此代码以不计算其平均值的方式打印数组(1,7,8,22,37,55,80)。
我想要的输出(8,22,80)。
我得到的输出(1,7,8,22,37,55,80)。
///The getEvens() method
public static int[] getEvens(int a[]) {
int myEvens = 0;
for (int i = 0; i < a.length; i++) {
if (a[i] % 2 == 0) {
myEvens++;
}
}
Arrays.sort(a);
return a;
}
\\\\The main method
public static void main(String args[]) {
int [] getEvens;
int [] myArray = {1,8,80,22,55,37,7};
int [] evenResult = getEvens(myArray);
System.out.print("\nThe even numbers in the array(" + Arrays.toString(myArray)+ ") are:{ " + Arrays.toString(evenResult)+ "}.");
}
答案 0 :(得分:2)
其中一个问题是您没有从getEvens()方法返回任何内容,因此您的第二个toString
将无法满足您的需求。您也增加myEvens
,但此值用作计数器。您需要保存数组中的偶数值。
您可以轻松地使用ArrayList执行此操作:
//import ArrayList
import java.util.ArrayList;
//before method
List<Integer> evens = new ArrayList<Integer>();
//in the for-loop
evens.add(a[i]);
在ArrayLists here上查看更多信息。
如果要继续使用数组,可以创建一个长度为myEvens
的新数组,再次运行原始循环,并将每个偶数值添加到新数组中。但是,为此,您需要一种方法来跟踪新阵列中的索引。
排序算法可在线获取。 array.sort()
适用于数组值。排序的ArrayList实现被赋予here。
答案 1 :(得分:0)
现在,你正在做的就是计算你阵列中的平均数,如果这就是你想要做的就好了。如果你真的希望将它们提取到自己的数组中,那就太复杂了,因为数组不是动态的。
你有两种选择,我更喜欢后者:
创建一个List<Integer>
并将值存储在那里,然后将它们提取到一个数组中(如果您愿意的话):
// Declare this list outside of the loop
List<Integer> evens = new ArrayList<>();
if(a[i] % 2 == 0) {
evens.add(a[i]);
}
return evens.toArray(new int[0]);
使用Arrays.stream
构建流并过滤掉仅包含偶数值的数组:
// Just return this explicitly
return Arrays.stream(a).filter(i -> i % 2 == 0)
.toArray();
答案 2 :(得分:0)
由于没有人提及它,这里是Java 8的简洁版本:
public static int[] getEvens(int a[]) {
Arrays.stream(a).filter(i -> i % 2 == 0).toArray();
}
答案 3 :(得分:-2)
您实际上只是排序并返回传递给您的方法的相同数组。 在你的if语句中,你在计算&#34; myEvens&#34;你可以将[i]添加到一个新数组,然后返回一个而不是一个(这是输入参数)。
答案 4 :(得分:-2)
您的代码正在尝试计算数组中的平均数。 正如@jeff carey所说,你可以为他们创造新的阵列和均衡。 以下是您的代码段
public static List<int> getEvens(int [] a) {
int myEvens = 0;
int [] evenArray=new int[3];
List<int> evenList=new List<int>();
int length=a.Length;
int index=0;
for (int i = 0; i <length; i++) {
if (a[i] % 2 == 0) {
myEvens++;
evenList.Add(a[i]);
}
}
Array.Sort(a);
return evenList;
}
希望这有帮助