2015-11-26 149 views
2

這個程序應該打印出每個數字已經產生了100個隨機數的規模從1到10(然後把它放在數組中)的次數。有沒有辦法減少if語句?

我想不出任何其他方式比每個數字都有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

這有一個模式。你可以使用它。一般來說,你可以使用'switch'語句,它們沒有模式。 –

+0

將所有if語句替換爲'add [i <= 0? 0:i - 1] ++;' – nbokmans

回答

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之間的值。

+3

你的情況是多餘的 - 'arr [i]'將始終在1到10之間。 – assylias

+0

增加Eran的答案:即使你需要幾個if:如果他們互相抵消,使用if - else if,以避免檢查大量不必要的條件 – Stultuske

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

您的整個方法可以替換爲:

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陣列),所以我建議讓他們擺脫直到你真正需要它們不會在那一刻使用。

2

我認爲這是很好的重新使用你的尺寸add[]這樣你可以保持你的代碼更加靈活。

int add[] = new int[10]; 

for (int i = 0; i < 100; i++) { 
    int index = generator.nextInt(add.length); 
    arr[index]++; 
}