技能使用:
1 2 3
| 1. 数组 2. if语句、while语句、for语句 3. random()方法
|
任务描述:
1 2 3 4 5 6 7
| 任务描述: 设计一个随机点名系统。 要求: (1)抽取数量任意定制 (2)屏幕显示学生班级和顺序号 *补充说明: 一共有4个班,每个班30人。
|
代码实现:
java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| package one_ten;
import java.util.Scanner;
public class Random_student { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入抽取同学的个数(最多抽取99位):"); int count = scan.nextInt(); scan.close(); int[] student = new int[100]; int[] classes = new int [100]; int i = 0; int j = 0; count --; while( i <= count) { student[i] = (int)(Math.random()*100); if(student[i] >= 30 || student[i] == 0) i --; i++; } while( j <= count) { classes[j] = (int)(Math.random()*10); if(classes[j] > 4 || classes[j] == 0) j --; j++; } for(int k = 0; k < i; k++) { if(student[k] >= 10) { if( (k + 1) < 10) System.out.println( "第0" + (k + 1) +"位同学的学号是:202030" + classes[k] + student[k] + " 班级:" + classes[k] + " 序号:" + student[k]); else System.out.println( "第" + (k + 1) +"位同学的学号是:202030" + classes[k] + student[k] + " 班级:" + classes[k] + " 序号:" + student[k]); } else { if( (k + 1) < 10) System.out.println( "第0" + (k + 1) +"位同学的学号是:202030" + classes[k] + "0" + student[k] + " 班级:" + classes[k] + " 序号:0" + student[k]); else System.out.println( "第" + (k + 1) +"位同学的学号是:202030" + classes[k] + "0" + student[k] + " 班级:" + classes[k] + " 序号:0" + student[k]);
} } } }
|
运行检测:
抽取8位同学

抽取10位同学

抽取99位同学


代码自评:
老师评价:
- 建议把同一个班的学生放在一起,并对抽到的学生按次序排序。
- 解决重复数据的问题。
Plus版本:
任务描述:
1 2 3 4 5 6 7
| 任务描述: 设计一个随机点名系统。 要求: (1)抽取数量任意定制 (2)屏幕显示学生班级和顺序号 *补充说明: 一共有4个班,每个班30人。
|
代码逻辑解释:
1 2 3 4 5 6 7 8 9 10 11
| (1)输入阶段: 输入抽取同学的个数。 (2)随机数获取阶段: 通过random方法获得两个数组的随机数数据,分别用来表示学生的班级信息和序号信息 (3)排除相同班级,相同次序的同学的数据 难点:相同班级不能排除,不同班级相同次序的同学的数据也不能排除 (4)排序阶段 通过起泡法排序将学生的序号信息进行从大到小排序,并对对应的班级信息做出相应的变化 (5)输出阶段 通过使用if语句使学生信息按照四个班分块输出; 通过使用if和for语句令输出信息变得更加整齐(这个用的代码最多,但都是复制粘贴,外加一些小改动。)
|
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
| import java.util.Scanner;
public class Random_student { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入抽取同学的个数(最多抽取80位):"); int count = scan.nextInt(); scan.close(); int[] student = new int[200]; int[] classes = new int [200]; int i = 0; int j = 0; count --; boolean flag = false; while( j <= count) { classes[j] = (int)(Math.random()*10); if(classes[j] > 4 || classes[j] == 0) j --; j++; } while( i <= count) { student[i] = (int)(Math.random()*100); for(int p = 0; p < i; p++) { if(student[p] == student[i] && classes[p] == classes[i]) { flag = true; } } if(student[i] >= 30 || student[i] == 0 || flag) i --; i++; flag = false; } int length = i; for(int m = 0 ; m < length - 1; m++) { for(int n = 0; n < length - 1 - m; n ++) { if(student[n] > student[n+1]) { int temp1 = student[n]; student[n] = student[n+1]; student[n+1] = temp1; int temp2 = classes[n]; classes[n] = classes[n+1]; classes[n+1] = temp2; } } } int count1 = 1; for(int k1 = 0; k1 < i; k1++) { if(classes[k1] == 1){ if(student[k1] >= 10) { if( count1 < 10) System.out.println( "第0" + count1 +"位同学的学号是:202030" + classes[k1] + student[k1] + " 班级:" + classes[k1] + " 序号:" + student[k1]); else System.out.println( "第" + count1 +"位同学的学号是:202030" + classes[k1] + student[k1] + " 班级:" + classes[k1] + " 序号:" + student[k1]); } else { if( count1 < 10) System.out.println( "第0" + count1 +"位同学的学号是:202030" + classes[k1] + "0" + student[k1] + " 班级:" + classes[k1] + " 序号:0" + student[k1]); else System.out.println( "第" + count1 +"位同学的学号是:202030" + classes[k1] + "0" + student[k1] + " 班级:" + classes[k1] + " 序号:0" + student[k1]);
} count1 ++; } } System.out.println("1班抽中了 " + (count1 - 1) + "位同学"); int count2 = count1; for(int k2 = 0; k2 < i; k2++) { if(classes[k2] == 2){ if(student[k2] >= 10) { if( count2 < 10) System.out.println( "第0" + count2 +"位同学的学号是:202030" + classes[k2] + student[k2] + " 班级:" + classes[k2] + " 序号:" + student[k2]); else System.out.println( "第" + count2 +"位同学的学号是:202030" + classes[k2] + student[k2] + " 班级:" + classes[k2] + " 序号:" + student[k2]); } else { if( count2 < 10) System.out.println( "第0" + count2 +"位同学的学号是:202030" + classes[k2] + "0" + student[k2] + " 班级:" + classes[k2] + " 序号:0" + student[k2]); else System.out.println( "第" + count2 +"位同学的学号是:202030" + classes[k2] + "0" + student[k2] + " 班级:" + classes[k2] + " 序号:0" + student[k2]); } count2 ++; } } System.out.println("2班抽中了 " + (count2 - count1) + "位同学"); int count3 = count2; for(int k3 = 0; k3 < i; k3++) { if(classes[k3] == 3){ if(student[k3] >= 10) { if( count3 < 10) System.out.println( "第0" + count3 +"位同学的学号是:202030" + classes[k3] + student[k3] + " 班级:" + classes[k3] + " 序号:" + student[k3]); else System.out.println( "第" + count3 +"位同学的学号是:202030" + classes[k3] + student[k3] + " 班级:" + classes[k3] + " 序号:" + student[k3]); } else { if( count3 < 10) System.out.println( "第0" + count3 +"位同学的学号是:202030" + classes[k3] + "0" + student[k3] + " 班级:" + classes[k3] + " 序号:0" + student[k3]); else System.out.println( "第" + count3 +"位同学的学号是:202030" + classes[k3] + "0" + student[k3] + " 班级:" + classes[k3] + " 序号:0" + student[k3]); } count3 ++; } } System.out.println("3班抽中了 " + (count3 - count2) + "位同学"); int count4 = count3; for(int k4 = 0; k4 < i; k4++) { if(classes[k4] == 4){ if(student[k4] >= 10) { if( count4 < 10) System.out.println( "第0" + count4 +"位同学的学号是:202030" + classes[k4] + student[k4] + " 班级:" + classes[k4] + " 序号:" + student[k4]); else System.out.println( "第" + count4 +"位同学的学号是:202030" + classes[k4] + student[k4] + " 班级:" + classes[k4] + " 序号:" + student[k4]); } else { if( count4 < 10) System.out.println( "第0" + count4 +"位同学的学号是:202030" + classes[k4] + "0" + student[k4] + " 班级:" + classes[k4] + " 序号:0" + student[k4]); else System.out.println( "第" + count4 +"位同学的学号是:202030" + classes[k4] + "0" + student[k4] + " 班级:" + classes[k4] + " 序号:0" + student[k4]); } count4 ++; } } System.out.println("4班抽中了 " + (count4 - count3) + "位同学"); } }
|
运行检测:



代码自评:
Plus版本相比于原版增添了三个功能:
避免重复抽取同一位同学
Plus版本新增了剔除相同班级、相同序号的数据的逻辑。
数据分块输出
Plus版本可以将输出的数据以班级为依据分四块分别输出。
数据分块排序
Plus版本可以将相同班级的学生以序号为依据,从小到大排序并输出。
总体来说,Plus版本已经具备了一个随机点名小程序的基本功能,除了运行效率不高以外已经没有其他明显的缺点了。
总结(瞎扯两句):
Plus版编写完后的总体感受:太麻烦了,太长了。
只是多了三个功能,但Plus版本相比于原版代码长度增加了2倍,代码量是原版的足足三倍。
但是也没什么办法,只用最基本的流程控制和数组去写程序确实没办法过于简洁,这个问题只有学了面向对象的知识后才能轻松的解决。
总而言之,就是赶紧学面向对象吧,现在连新手村还没出呢!
