正如标题所述,我只需要一些有关如何简化部分代码的帮助/建议。我得到了想要的输出,但是很明显看到我的处理方式有点过分了。我要在程序中执行的操作是通过数组
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;
虽然有,但是绝对有一种更简单的方法,如果可能的话,我想避免使用列表,并在需要练习时坚持使用循环。预先感谢您的任何建议/提示。
答案 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;
}