【问题标题】:What's wrong with this code that it doesn't compile? [closed]这段无法编译的代码有什么问题? [关闭]
【发布时间】:2013-12-27 01:42:37
【问题描述】:

出于某种原因,true 和 false 被认为是“不兼容的类型”。我只是想通过布尔方法运行它吗?它有什么问题。

for(int i = 0; i < array.length ; i++)
{
int val = (array[i] % 2);
if(val == 0)
array[i] = true;
else
array[i] = false;
}

【问题讨论】:

  • 看起来你已经声明array 来存储某种数字; “真”和“假”不是数字。
  • 以不清楚的形式结束这个问题怎么样?
  • 哪方面不清楚?
  • 我同意,@Sage,虽然我不希望看到 Jon Skeet 失去再获得 100 次支持的机会。
  • @DavidWallace 我们必须猜测数组声明为什么类型。就问题而言,您必须猜测是否要尝试提供帮助。但它是可以修复的。

标签: java loops for-loop compilation boolean


【解决方案1】:

array 可能是 int[],因为您正在使用 array[i] % 2 并将结果分配给 int

没有从booleanint 的转换,因此您不能将结果存储回int[] 数组中。目前尚不清楚您要做什么,但这就是它没有编译的原因。


一边

如果您有一个单独的相同大小的boolean[],那就可以了——尽管它可以更简单地写成:

boolean[] even = new boolean[array.length];
for (int i = 0; i < array.length; i++) {
    even[i] = (array[i] % 2) == 0;
}

任何时候你发现自己:

if (someCondition) {
    doSomething(true);
} else {
    doSomething(false);
}

您应该考虑将其重构为:

doSomething(someCondition);

【讨论】:

  • 乔恩,你的答案在前两段时会更好——它完整而简洁地回答了这个问题。添加太多额外的东西只会让 OP 感到困惑。
  • @DavidWallace:将添加一条规则并表明它是一个旁白......
【解决方案2】:

您的数组包含错误的类型:

    int[] a = {1, 2, 4};
    boolean[] b = {true, false};

    b[0] = 1; //error
    a[0] = 1; //ok

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多