酷呐么踏踏

## 老司机的思路：

### 先生成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 {
}
}

}

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;
}
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;
}
}
``````

### 酷呐么踏踏

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

2011/11/28
4.4K
48

2015/11/03
2
0

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

2016/02/25
19
0

cpeam
2015/03/05
486
0

Taro 兼容 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（虚拟桶）

4
0
Kafka 原理和实战

vivo互联网技术

19
0
java数据类型

audience_1

9
0