文档章节

点名系统

酷呐么踏踏
 酷呐么踏踏
发布于 2017/07/27 09:14
字数 1268
阅读 24
收藏 0

老司机的思路:

先生成40个学生对象 放在list里 产生随机数  判断随机和学生Id是否一样  如果一样给他们设置是否到课和点名标记为TRUE    最后一个for循环 判断是不是都点过名了顺便记录到课人数

实现代码:

package test;

public class Student {
	private String name;
	private int sid;
	private boolean flag;
	private boolean work = false;

	public Student(String name, int sid, boolean flag) {
		super();
		this.name = name;
		this.sid = sid;
		this.flag = flag;

	}

	public boolean isWork() {
		return work;
	}

	public void setWork(boolean work) {
		this.work = work;
	}

	public Student() {
		super();
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", sid=" + sid + ", work=" + work
				+ "]";
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

}



package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		List<Student> l = new ArrayList<Student>();
		for (int i = 0; i < 40; i++) {
			l.add(new Student("学生" + (1 + i), 1000 + i + 1, false));
		}
		System.out.println("开始点名!");
		int x = 0;
		while (x == 0) { // 全局循环

			int flag = 0;
			while (flag == 0) { // 单次循环
				Random r = new Random();
				int rd = r.nextInt(l.size());
				for (int i = 0; i < l.size(); i++) {
					if (l.get(i).getSid() == (rd + 1000)
							&& l.get(i).isFlag() == false) {
						int a = 0;
						while (a == 0) { // 输入正确
							try {
								System.out.println(l.get(i).getName() + "\t"
										+ l.get(i).getSid());
								System.out.println("输入是否到课");
								Scanner sn = new Scanner(System.in);
								boolean b = sn.nextBoolean();
								if (b == true) {
									l.get(i).setWork(true);
								} else {
									l.get(i).setWork(false);
								}
								l.get(i).setFlag(true);
								a = 1;
								flag = 1;
							} catch (Exception e) {
								System.out.println("重新输入是否到课");
							}
						}

					}
				}
			}

			int i, j = 0;
			for (i = 0; i < l.size(); i++) {
				if (l.get(i).isFlag() == false) {
					break;
				}
				if (l.get(i).isWork() == true) {
					j++;
				}
				if (i == l.size() - 1) {
					x = 1;
					System.out.println("点名完毕!");
					System.out.println("到课情况:" + j + "人到!");
				}

			}

		}
	}
}

我的思路:

先生成40个学生对象,放入数组里,生成40个不重复的随机数,然后按照随机数依次叫人,直到叫完40个学生

package com.hr.app;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;

/**
 * Call Name System 需求:有40个人,让开始后,随机得到其中的一个人,然后下一次再开始,又得到一个人 在一次运行时,同一个学生不能点2次
 * 
 * @author l
 *
 */
public class App {

	public static void main(String[] args) {

		System.out.println("welcome use Call Name System");
		System.out.println("Please input \"begin\" begin Call Name,\"end\" end System");

		int[] person = new int[40];

		for (int i = 0; i < person.length; i++) {
			person[i] = i;
		}
		boolean b = true;

		int[] arr = new int[40];
		arr = randomArray(0, 40, 40);
		System.out.println(Arrays.toString(arr));
		int i = 0;
		while (b) {
			Scanner input = new Scanner(System.in);
			String type = input.nextLine();

			if (type.equals("begin")) {
				if (i < 40) {
					System.out.println("第" + arr[i] + "个");
					i++;
				} else {
					b = false;
					System.out.println("点完了");
				}
			} else if (type.equals("end")) {
				System.out.println("System end");
				b = false;
			} else {
				System.out.println("Input error,Please re-enter");
			}
		}

	}

	public void RandomNum(int max, int min) {
		long randomNum = System.currentTimeMillis();
		int randomNumber = (int) randomNum % (max - min) + min;
		for (int i = 0; i < 10; i++) {
			System.out.println(randomNumber);
		}
	}

	public void RandomNum1(int max, int min) {
		int randomNumber = (int) Math.round(Math.random() * (max - min) + min);
		for (int i = 0; i < 10; i++) {
			System.out.println(randomNumber);
		}
	}

	public void RandomNum2(int max, int min) {
		long randomNum = System.currentTimeMillis();
		Random random = new Random(randomNum);
		int randomNumber = random.nextInt(max) % (max - min + 1) + min;
		for (int i = 0; i < 10; i++) {
			System.out.println(randomNumber);
		}
	}

	/**
	 * 随机指定范围内N个不重复的数 最简单最基本的方法 最简单最易理解的两重循环去重
	 * 
	 * @param min
	 *            指定范围最小值
	 * @param max
	 *            指定范围最大值
	 * @param n
	 *            随机数个数
	 */
	public static int[] randomCommon(int min, int max, int n) {
		if (n > (max - min + 1) || max < min) {
			return null;
		}
		int[] result = new int[n];
		int count = 0;
		while (count < n) {
			int num = (int) (Math.random() * (max - min)) + min;
			boolean flag = true;
			for (int j = 0; j < n; j++) {
				if (num == result[j]) {
					flag = false;
					break;
				}
			}
			if (flag) {
				result[count] = num;
				count++;
			}
		}
		return result;
	}

	/**
	 * 利用HashSet的特征,只能存放不同的值 随机指定范围内N个不重复的数 利用HashSet的特征,只能存放不同的值
	 * 
	 * @param min
	 *            指定范围最小值
	 * @param max
	 *            指定范围最大值
	 * @param n
	 *            随机数个数
	 * @param HashSet<Integer>
	 *            set 随机数结果集
	 */
	public static void randomSet(int min, int max, int n, HashSet<Integer> set) {
		if (n > (max - min + 1) || max < min) {
			return;
		}
		for (int i = 0; i < n; i++) {
			// 调用Math.random()方法
			int num = (int) (Math.random() * (max - min)) + min;
			set.add(num);// 将不同的数存入HashSet中
		}
		int setSize = set.size();
		// 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
		if (setSize < n) {
			randomSet(min, max, n - setSize, set);// 递归
		}
	}

	/**
	 * 随机指定范围内N个不重复的数 在初始化的无重复待选数组中随机产生一个数放入结果中,
	 * 将待选数组被随机到的数,用待选数组(len-1)下标对应的数替换 然后从len-2里随机产生下一个随机数,如此类推
	 * 
	 * @param max
	 *            指定范围最大值
	 * @param min
	 *            指定范围最小值
	 * @param n
	 *            随机数个数
	 * @return int[] 随机数结果集
	 */
	public static int[] randomArray(int min, int max, int n) {
		int len = max - min + 1;

		if (max < min || n > len) {
			return null;
		}

		// 初始化给定范围的待选数组
		int[] source = new int[len];
		for (int i = min; i < min + len; i++) {
			source[i - min] = i;
		}

		int[] result = new int[n];
		Random rd = new Random();
		int index = 0;
		for (int i = 0; i < result.length; i++) {
			// 待选数组0到(len-2)随机一个下标
			index = Math.abs(rd.nextInt() % len--);
			// 将随机到的数放入结果集
			result[i] = source[index];
			// 将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换
			source[index] = source[len];
		}
		return result;
	}
}

 

© 著作权归作者所有

酷呐么踏踏

酷呐么踏踏

粉丝 4
博文 54
码字总数 28151
作品 0
太原
程序员
私信 提问
吉林大学老师蓝牙点名被赞“有创意”

“哥们,我不想去上课,你把我手机带过去吧,记得开蓝牙哦,亲!”这一“逃课新招”,应对的是老师的“点名新招”蓝牙点名。近日,吉林大学珠海学 院计算机系老师研发出一套新鲜点名系统,要...

小编辑
2011/11/28
4.4K
48
点名系统的方案讨论.

讨论翰德点名系统两种做法, 哪种更好. [1] 先建立微信平台, 可以借用微信平台的用户管理系统. 点对点发送消息, 即实现点名系统, 优点是方法简单, 建立起来快捷方便, 可以积累用户, 更可以借用...

沈佳
2015/11/03
2
0
快乐课堂--寓教于乐、老师必备的课堂教学软件

快乐课堂是我开发的一款寓教于乐的课堂教学软件,历经多年,多次迭代。 本软件为绿色免安装软件,可以直接放在U盘里运行,上课时,可以用自己的电脑的运行,也可以拿着U盘,插到别的电脑上运...

shuilan0066
2018/03/09
0
0
asp.net获取当前网址url

设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb51.net"是域名 "aaa"是站点名 "bbb.aspx"是页面名(文件名) "id=5&name=kelli"是参数 【......

伽罗kapple
2016/02/25
19
0
从Berkeley db数据库中读取数据

现在在做数据库的压缩工作,前面的压缩工作已经完成,本来以前是以key1/data(key2,value),其中key1是点名,key2是时间,value是浮点型数据,一一对应存入数据库,然后按照key1值就可以读取...

cpeam
2015/03/05
486
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在做 Taro 适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 解决跨域问题 h5 发请求会报跨域问题,需...

dkvirus
55分钟前
3
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部