Java 不断得到一个逻辑错误,它将我的数组输出减少到一堆零

Java 不断得到一个逻辑错误,它将我的数组输出减少到一堆零,java,javascript,arrays,Java,Javascript,Arrays,所以像往常一样,我的代码中有一个非常糟糕的逻辑错误,编译器没有捕捉到,因此我的输出没有返回我需要的值,我想知道是否有人能给我一个正确的方向来解决这个讨厌的错误。但在你们开始讨论之前,我先解释一下到底发生了什么可能会有所帮助。因此,在主要情况下,我试图分配值'x'一个数字数组,该数组被带入另一个文件中的getAllEvens,但在输出屏幕的某个地方,值更改被否定或根本没有发生,我得到的都是零。 我真的很感激在这方面的任何帮助或建议,但请尽量按照我的代码来进行设置,或者至少不要使用太多的高级方法,因

所以像往常一样,我的代码中有一个非常糟糕的逻辑错误,编译器没有捕捉到,因此我的输出没有返回我需要的值,我想知道是否有人能给我一个正确的方向来解决这个讨厌的错误。但在你们开始讨论之前,我先解释一下到底发生了什么可能会有所帮助。因此,在主要情况下,我试图分配值'x'一个数字数组,该数组被带入另一个文件中的getAllEvens,但在输出屏幕的某个地方,值更改被否定或根本没有发生,我得到的都是零。 我真的很感激在这方面的任何帮助或建议,但请尽量按照我的代码来进行设置,或者至少不要使用太多的高级方法,因为我正在努力使这与我为学校做的实验室保持一致。现在我们来看看代码

主要代码

`int[] x = {2,4,6,8,10,12,14};
 int[] x = {2,4,6,8,10,12,14};
 int[] y = {1,2,3,4,5,6,7,8,9};
 int[] z = {2,10,20,21,23,24,40,55,60,61};

 System.out.println("Odds - " + Arrays.toString(OddsAndEvens.getAllOdds(x)));
 System.out.println("Evens - " + Arrays.toString(OddsAndEvens.getAllEvens(x)));
另一个文件中的代码

private static int[] cf = new int[20];
public static int countEm(int[] array, boolean odd)
{
    cf=array;
    return 0;
}
public static int[] getAllEvens(int[] array)
{
        int[]vegeta = new int[20];
        int VegetaScouterCount = 0;
        int[] XboxThreeYearOld = new int[20];
        for(int f : cf)
        {

            if(array[f]%2==0)
            {
                vegeta[VegetaScouterCount]=cf[f];
                VegetaScouterCount++;
                XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
            }
            XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
        }
        return XboxThreeYearOld;
}
请忽略这个时髦的俚语

我得到的输出

Odds - []
Evens - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我想要什么

Odds - []
Evens - [2, 4, 6, 8, 10, 12, 14]
不管怎样,我都很感激能帮我指明正确的方向。

for(int f : cf)
{
  if(array[f]%2==0)
  {
访问数组f处的值。我想你想检查f是否为偶数

要真正修复代码,我首先要编写一个方法来计算偶数。像

static int countEvens(int[] arr) {
    int count = 0;
    for (int i : arr) {
        if (i % 2 == 0) {
            count++;
        }
    }
    return count;
}
然后你可以用它来获得你的赔率,甚至

static int[] getAllEvens(int[] array) {
    int[] out = new int[countEvens(array)];
    int pos = 0;
    for (int f : array) {
        if (f % 2 == 0) {
            out[pos++] = f;
        }
    }
    return out;
}
然后

static int[] getAllOdds(int[] array) {
    int[] out = new int[array.length - countEvens(array)];
    int pos = 0;
    for (int f : array) {
        if (f % 2 != 0) {
            out[pos++] = f;
        }
    }
    return out;
}

如果对数组没有实际需求,那么使用不断增长的集合(如集合或列表)可能会更容易。但是使用给定的结构时,您错误地使用了for-each循环

变量f不是索引,而是每个位置的cf值。因为cf是用长度20初始化的,并且填充了零,所以它总是返回0

尝试使用传统的for循环,即for int i=0;我 在打印赔率和赔率之前,必须调用countem方法 相反,只需更改vegeta[vegetashotercount]=cf[f];到vegeta[vegetashotercount]=数组[f]; 问题是,数组cf的实例大小为20,但在您告诉它其他情况之前,所有索引默认为0
您尚未初始化cf数组,因此Java将自动为其分配默认值,这意味着每个元素的值都为零

另外,您正在使用完全由零组成的cf来检查一个数字是否为偶数,因此它是0%2

另外,您正在将cf的元素分配给vegeta,然后将其复制到XboxThreeYearOld,这是返回值。因此,返回的数组将填充零

要解决您的问题,请使用以下方法:

for (int i = 0; i < array.length; i++) {
    if (array[i] % 2 == 0) {
        vegeta[VegetaScouterCount] = array[i];
        VegetaScouterCount++;
        XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
    }
    XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}

非常感谢,我很感激,如果我删除了所有的时髦俚语,可能会有所帮助,但现在我明白我做错了什么。谢谢:我真的很感激关于这个问题的所有反馈,因为我并不期待得到所有的帮助,但现在我确实看到,我确实把所有的价值观都设置为零,现在我觉得自己是个十足的白痴谢谢你朝着正确的方向轻推
for (int i = 0; i < array.length; i++) {
    if (array[i] % 2 == 0) {
        vegeta[VegetaScouterCount] = array[i];
        VegetaScouterCount++;
        XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
    }
    XboxThreeYearOld = Arrays.copyOfRange(vegeta, 0, VegetaScouterCount);
}