博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
点名系统
阅读量:6697 次
发布时间:2019-06-25

本文共 6224 字,大约阅读时间需要 20 分钟。

hot3.png

老司机的思路:

先生成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
l = new ArrayList
(); 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
* set 随机数结果集 */ public static void randomSet(int min, int max, int n, HashSet
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; }}

 

转载于:https://my.oschina.net/869088067/blog/1490016

你可能感兴趣的文章
SEO艺术
查看>>
Python标准库
查看>>
SQL基础教程
查看>>
POJ 3683 Priest John's Busiest Day(2-ST)
查看>>
Why std::binary_search of std::list works, sorta ...(转载)
查看>>
一起谈.NET技术,在MVC2.0使用Lodop为WEB打印提出完美解决方案
查看>>
瑞星2009:3大拦截2大防御功能主动遏制木马病毒
查看>>
Android RIL源码研究笔记 の ril (一)
查看>>
手动添加mysql服务
查看>>
javascirpt历史澄清误解基本概念特点编程语言web2.0网页javascript - javascirpt知识大全...
查看>>
Java多线程同步Synchronized使用分析
查看>>
[ mongoDB ] - mongoDB的基本操作
查看>>
gson-2.2.api简单
查看>>
大跃进和循序渐进
查看>>
纯后台生成highcharts图片有哪些方法?
查看>>
Oracle手边常用70则脚本知识汇总
查看>>
Creating Apps With Material Design —— Creating Lists and Cards
查看>>
GIS基础软件及操作(二)
查看>>
Underscore.js (1.7.0)-函数预览
查看>>
Why does pthread_cond_signal not work?【转】
查看>>