可以肯定的是,我已经使循环变得复杂了,但是不确定如何简化

时间:2019-04-12 10:04:54

标签: java for-loop

正如标题所述,我只需要一些有关如何简化部分代码的帮助/建议。我得到了想要的输出,但是很明显看到我的处理方式有点过分了。我要在程序中执行的操作是通过数组

int [] myInches = {89,12,33,7,72,42,76,49,69,85,61,23};

进入我的buildFeetArray方法中,该方法只使用数组元素,将它们除以12得到一个新的元素值,然后将其放入一个新数组中,然后返回该数组。这是方法

 public static int[] buildFeetArray(int[] arrayParam) {
    int sum = 0;
    int lessthan1 = 0;
    int lessthan2 = 0;
    int lessthan3 = 0;
    int lessthan4 = 0;
    int lessthan5 = 0;
    int lessthan6 = 0;
    int lessthan7 = 0;
    int lessthan8 = 0;
    for (int count = 0; count < arrayParam.length; count++) {
        if (arrayParam[count] / 12 == 0) {
            lessthan1++;
        } else if (arrayParam[count] / 12 == 1) {
            lessthan2++;
        } else if (arrayParam[count] / 12 == 2) {
            lessthan3++;
        } else if (arrayParam[count] / 12 == 3) {
            lessthan4++;
        } else if (arrayParam[count] / 12 == 4) {
            lessthan5++;
        } else if (arrayParam[count] / 12 == 5) {
            lessthan6++;
        } else if (arrayParam[count] / 12 == 6) {
            lessthan7++;
        } else if (arrayParam[count] / 12 == 7) {
            lessthan8++;
        }
    }
    int[] newArray = {lessthan1, lessthan2, lessthan3, lessthan4, lessthan5, lessthan6, lessthan7, lessthan8};
    return newArray;
}

理想情况下,输出应为

int length = 8;
[0] = 1;
[1] = 2;
[2] = 1;
[3] = 1;
[4] = 1;
[5] = 2;
[6] = 2;
[7] = 2;

虽然有,但是绝对有一种更简单的方法,如果可能的话,我想避免使用列表,并在需要练习时坚持使用循环。预先感谢您的任何建议/提示。

6 个答案:

答案 0 :(得分:21)

我为此写了一些伪代码,其中您必须初始化一个数组,并在满足特定条件时递增数组的特定索引:

public static int [] buildFeetArray(int [] arrayParam) {
    int index;
    int [] lessthan = {0,0,0,0,0,0,0,0};
    for (int count = 0; count < arrayParam.length; count++) {
        index = arrayParam[count]/12;
        if(index < 8 ) {
            lessthan[index]++;
        }
    }
    return lessthan;
}

答案 1 :(得分:11)

您可能要使用另一个数组来存储结果,例如:

public static  int[] buildFeetArray(int [] arrayParam) {

    int[] lessThanArray = new int[8];

    for (int count = 0; count < arrayParam.length; count++) {
        for (int remainder = 0; remainder < lessThanArray.length; remainder++) {

            if (arrayParam[count] / 12 == remainder) {

                lessThanArray[remainder]++;
                break; // exit from the inner "for" loop
            }
        }
    }

    return lessThanArray;
}

答案 2 :(得分:10)

那呢:

int[] lessThanArray = new int[8];
for (int entry: myInches) {
    int lessThan = entry / 12;
    if (lessThan < 8) { 
        lessThanArray[lessThan]++;
    }
}

答案 3 :(得分:5)

您可以使用Switch块:

switch(arrayParam[count]/12){
  case 0:
    lessthan1++;
    break;
  case 1:
    lessthan2++;
    break;
  //and so on...
}

效果是一样的,但是看起来更干净,并且在这种情况下派上用场

答案 4 :(得分:3)

我们可以使用一些Java-8 API使其更短。

public static  int [] buildFeetArray(int [] arrayParam, int length) {
       int [] result = new int[arrayParam.length];
       IntStream.range(0, arrayParam.length).forEach(i -> result[arrayParam[i] / 12] = result[arrayParam[i] / 12] + 1 );
       return Arrays.copyOf(result, length);
 }

说明

  • 制作一个临时数组
  • 遍历整数流,生成索引值直到输入数组的长度。

  • 在每次迭代中,将索引作为除以12的结果,然后将其递增计数,即89/12 = 7,从而使第7 索引的计数递增。这将表示代码中的lessthan8变量。

  • 通过传递附加的length参数来返回所需长度的数组。

输入:

int[] res = buildFeetArray(new int[]{89,12,33,7,72,42,76,49,69,85,61,23}, 8);

输出:

[1, 2, 1, 1, 1, 2, 2, 2]

答案 5 :(得分:3)

我只是稍微修改了一下您的代码。您可以尝试以下方法:

public static  int [] buildFeetArray(int [] arrayParam) {
    int sum = 0;
    int len=8; // your ideal lengh, change it if needed
    int[] lessthan = new int[len+1];
    for(int i=0; i<len+1; i++){ lessthan[i]=0; }

    for (int count = 0; count < arrayParam.length; count++) {
        int d = arrayParam[count]/12;
        d = d+1; 
        lessthan[d]++;
        // so, if arrayParam[count]/12 == 0,1,2,..., then d = 1,2,3,...  

    }
    return lessthan;
}