该程序应打印出每个数字生成100个随机数的次数,范围为1到10(然后将其放入数组中)。
我想不出任何其他方式,而不是为每个数字都有一个if语句。 有没有办法避免这么多if语句被其他代码或其他东西?
public static void countNumbers() {
Random generator = new Random();
int arr[] = new int[101];
int add[] = new int[10];
for (int i = 0; i < 100; i++) {
int sum = 0;
arr[i] = generator.nextInt(10)+1;
if(arr[i] ==1){
add[0]++;
}
if(arr[i] ==2){
add[1]++;
}
if(arr[i] ==3){
add[2]++;
}
if(arr[i] ==4){
add[3]++;
}
if(arr[i] ==5){
add[4]++;
}
if(arr[i] ==6){
add[5]++;
}
if(arr[i] ==7){
add[6]++;
}
if(arr[i] ==8){
add[7]++;
}
if(arr[i] ==9){
add[8]++;
}
if(arr[i] ==10){
add[9]++;
}
}
System.out.println(Arrays.toString(add));
System.out.println();
}
答案 0 :(得分:7)
您应该注意所有的if语句都有类似的结构:
if(arr[i] ==x){
add[x-1]++;
}
因此可以用add[arr[i]-1]++;
替换它们。
您只需要一个if语句来验证您是否没有超出add
数组的范围:
if (arr[i] <= 10 && arr[i] >= 1) {
add[arr[i]-1]++;
}
编辑:
正如assylias所评论的那样,您并不真正需要if语句,因为您将arr
数组初始化为1到10之间的值。
答案 1 :(得分:3)
是强>
如果你注意到,你有一个重复的模式:
if(arr[i] == 1){
add[0]++;
}
然后你可以用下一个替换它:
add[arr[i] - 1]++;
结果for
看起来很相似:
for (int i = 0; i < 100; i++) {
arr[i] = generator.nextInt(10) + 1;
add[arr[i] - 1]++;
}
答案 2 :(得分:2)
您的整个方法可以替换为:
public static void countNumbers() {
Random generator = new Random();
int add[] = new int[10];
for (int i = 0; i < 100; i++) {
add[generator.nextInt(10)]++;
}
System.out.println(Arrays.toString(add));
System.out.println();
}
其他变量(例如arr
数组)目前尚未使用,因此我建议在实际需要之前将其删除。
答案 3 :(得分:2)
我认为重复使用add[]
的大小是好的,这样可以让您的代码更加灵活。
int add[] = new int[10];
for (int i = 0; i < 100; i++) {
int index = generator.nextInt(add.length);
arr[index]++;
}