随机点名器,即在全班同学中随机的打印出一名同学的名字。
要做到随机点名,需要具备 ①存储所有的同学姓名 ②显示全班同学姓名 ③随机点名其中的一个人,打印到控制台。
需要涉及的知识点:①数组 ②随机类
1.实现对全班同学姓名的存储
在存储姓名时,如果对每一个同学都定义一个变量进行姓名存储,会出现过多的变量,很难一次性将全部数据持有。可以使用数组解决多个数据的存储问题。
代码如下:
//键盘输入多个同学名字存储到容器中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < students.length; i++) {
System.out.println("存储第"+i+"个姓名:");
students[i] = sc.next();
}
2.打印全班同学每一个人的姓名
打印所有人的姓名如果使用将所有人的姓名一个一个的打印输出显然是不可能的,因此,可以使用数组遍历的方式进行操作。
代码如下:
//遍历数组,得到每个同学姓名
for(int i = 0; i < students.length; i++) {
String name = students[i];
//打印姓名
System.out.println("第" + i + "个学生姓名为:" + name);
}
3.获取随机点到的姓名,并打印输出
此时,需要在总人数范围内,随机生成一个随机数,作为数组的索引来获取数组中学生的姓名。
代码如下:
//根据数组长度,获取随机索引
int index = new Random().nextInt(students.length);
String name = students[index];
System.out.println("被点到的人为:"+name);
完整代码如下:
import java.util.Random;
import java.util.Scanner;
public class CallName {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("-------随机点名器-------");
// 创建一个存储多个同学姓名的数组
String[] students = new String[8];
//键盘输入多个同学名字存储到容器中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < students.length; i++) {
System.out.println("存储第"+i+"个姓名:");
students[i] = sc.next();
}
//遍历数组,得到每个同学姓名
for(int i = 0; i < students.length; i++) {
String name = students[i];
//打印姓名
System.out.println("第" + i + "个学生姓名为:" + name);
}
//根据数组长度,获取随机索引
int index = new Random().nextInt(students.length);
String name = students[index];
System.out.println("被点到的人为:"+name);
}
}
显然在进行代码实现的时候,将所有的功能都放在main方法中,并不是一个最明智的做法。随机点名器明确地分为三个功能。如果将多个独立功能的代码写到一起,则代码相对冗长,而且不利于阅读和修改。可以针对不同功能将其封装到一个方法中,将完整独立的功能分离出来。
代码的实现步骤:
1.main方法中调用三个独立的方法
public static void main(String[] args){
//定义数组,存储学生姓名
String[] names = new String[8];
//调用添加姓名方法
addStudent(names);
//调用遍历数组方法
printStudentName(names);
//调用随机姓名的方法
String name = randomStudentName(names);
System.out.println(name);
}
2.存储所有同学的姓名
这里定义一个向数组中添加学生姓名的addStudent()方法。要定义方法就要考虑它的返回值和参数。由于是向数组中添加,因此没有返回值,参数就是数组
public static void addStudent(String[] names){
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
names[3] = "李蕾";
names[4] = "韩梅梅";
names[5] = "小名";
names[6] = "老王";
names[7] = "小华";
}
3.打印全班同学每个人的姓名
这里需要定义一个打印输出所有人姓名的printStudentName()方法。也就是将存储有学生姓名的数组作为参数并遍历输出,显然没有返回值。
public static void printStudentName(String[] names){
for(int i = 0 ; i < names.length ;i++){
System.out.println(names[i]);
}
}
4.获取随机点到的学生姓名
这里需要定义一个获取随机姓名的randomStudentName()的方法,这个方法使用随机数做索引在数组在找出某一学生姓名,那么返回值就是学生姓名,参数还是存放学生姓名的数组。
public static String randomStudentName(String[] names){
Random ran = new Random();
int index = ran.nextInt(names.length);
return names[index];
}
结合以上四个步骤得出的完整代码为:
import java.util.Random;
public class CallName{
public static void main(String[] args){
//定义数组,存储学生姓名
String[] names = new String[8];
//调用添加姓名方法
addStudent(names);
//调用遍历数组方法
printStudentName(names);
//调用随机姓名的方法
String name = randomStudentName(names);
System.out.println(name);
}
public static String randomStudentName(String[] names){
Random ran = new Random();
int index = ran.nextInt(names.length);
return names[index];
}
public static void printStudentName(String[] names){
for(int i = 0 ; i < names.length ;i++){
System.out.println(names[i]);
}
}
public static void addStudent(String[] names){
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
names[3] = "李蕾";
names[4] = "韩梅梅";
names[5] = "小名";
names[6] = "老王";
names[7] = "小华";
}
}
以上就是两种实现随机数点名的代码。