2015-11-26 150 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]++; 
}