有没有办法减少if语句?

时间:2015-11-26 10:50:54

标签: java if-statement

该程序应打印出每个数字生成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();
}

4 个答案:

答案 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]++;
}