【问题标题】:My for loop fails to check correctly if there is a 0 or a 1 in an array我的 for 循环无法正确检查数组中是否有 0 或 1
【发布时间】:2015-02-16 11:18:38
【问题描述】:

所以我得到了这个任务,我们必须检查创建一个数组并用0s 和1s 填充它。现在,程序的目的是找出数组中有多少个1s,所以输出应该是1s的个数。

因此,我创建了一个方法,在数组中搜索1s,但不知何故找不到它们。我已经通过 eclipse 进行了检查,并且输入数字被正确分配到数组中,但是不知何故,该方法无法找到可怕的 1s。

public static int finding1s (int array[][]){
    for (int i = 0; i < array.length; i++){
        for ( int j =0; j < array[i].length; j++){
             if (array[i][j] != 0){
                value++;
            }
        }
    }
    return value;
}

所以比如数组的二维输入是5和4,数组中赋给它们各自整数的数是

0100  
1000  
0010  
1101  
1111

该方法不会输出10,因为有10,而是输出20,因为那是5 x 40的总数和1s 在数组中。

【问题讨论】:

  • 为什么不试试== 1,增加价值?
  • 值在哪里初始化?
  • 我已经在方法之外初始化了值。另外,如果我将条件更改为 == 1,我会得到 0 的输出,这也不正确,因为那里有 1。
  • 您必须在每次调用该方法时将value 重置为0。否则,每次调用该方法时,您都会不断地添加到value。我建议你在方法中初始化value = 0,因为它在方法之外没有真正的“价值”。
  • 当然@Fruloops。我的猜测是,将您的逻辑从 != 0 翻转到 == 1 也会将您的输出从最小值 (0) 更改为最大值 (20)。我认为这很奇怪,可能表明比较数据的代码或数据本身有问题。只是一个想法。

标签: java arrays loops methods


【解决方案1】:

在循环开始前将count初始化为零,

public static int finding1s (int array[][]){
    int count = 0;
    for (int i = 0; i < array.length; i++){
        for ( int j =0; j < array[i].length; j++){
             if (array[i][j] != 0){
                count++;
            }
        }
    }
    return count;
}

public static void main(String[] args) {
    int[][] array = { { 0, 1, 0, 0 }, { 1, 0, 0, 0 }, { 0, 0, 1, 0 },
            { 1, 1, 0, 1 }, { 1, 1, 1, 1 } };
    System.out.println(finding1s(array));
}

输出是

10

你的value 在你的循环之前不能为零(事实上,它必须是10)。

【讨论】:

    【解决方案2】:

    您的方法没有将value 初始化为0,也没有声明它,所以我必须假设value 是一些在其他地方初始化的static 变量。

    现在,如果您调用您的方法两次,而不在两次调用之间重置 value,您将获得两倍于预期结果的结果。

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多