簡體   English   中英

有沒有辦法減少if語句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM