[英]Is there a way to have less if-statements?
該程序應打印出每個數字生成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();
}
您應該注意,所有if語句都具有類似的結構:
if(arr[i] ==x){
add[x-1]++;
}
因此可以通過add[arr[i]-1]++;
替換它們add[arr[i]-1]++;
。
您只需要一個if語句來驗證您是否沒有超出add
數組的范圍:
if (arr[i] <= 10 && arr[i] >= 1) {
add[arr[i]-1]++;
}
編輯:
正如assylias所評論的那樣,你並不真正需要if語句,因為你將arr
數組初始化為1到10之間的值。
是。
如果你注意到,你有一個重復的模式:
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]++;
}
您的整個方法可以替換為:
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
數組)目前尚未使用,因此我建議在實際需要它們之前將其刪除。
我認為重新使用你add[]
的大小是好的,這樣你就可以保持你的代碼更靈活。
int add[] = new int[10];
for (int i = 0; i < 100; i++) {
int index = generator.nextInt(add.length);
arr[index]++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.