继续得到一个逻辑错误,将我的数组输出减少到一堆零

时间:2014-11-19 04:43:53

标签: java javascript arrays

所以按照惯例,我的代码中有一个非常糟糕的逻辑错误,我的编译器没有捕获,因此我的输出没有返回我需要的值,我想知道是否有人可以给我一个轻推正确的方向,如何解决这个讨厌的错误。但是在你们谈到这一点之前,如果我解释一下有什么可能会有所帮助。所以在主要我试图赋值'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]
无论如何,我都非常感谢能帮助我指明正确的方向。

4 个答案:

答案 0 :(得分:0)

这,

for(int f : cf)
{
  if(array[f]%2==0)
  {

访问f的{​​{1}}处的值。我想你想检查array是否均匀。

f

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

for(int f : array)
{
  if(f%2==0)

然后你可以使用它来获得你的赔率和平均值

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;
}

答案 1 :(得分:0)

如果没有对数组的实际要求,可能更容易使用增长的集合,如集合或列表。但是使用给定的结构,您正在错误地使用for each循环。

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

尝试使用传统的for循环,即for (int i=0; i<cf.length;i++){ // do work here }并检查输出。

编译器可能会遇到其他逻辑错误,因为它不是语法或类型问题。

答案 2 :(得分:0)

  1. 在您打印odds and evens之前,您必须致电countem()方法
  2. 而只是将vegeta[VegetaScouterCount]=cf[f];更改为vegeta[VegetaScouterCount]=array[f]; 问题是你的数组cf只是大小为20,但是默认情况下所有索引都是0,否则你会告诉它

答案 3 :(得分: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);
}