0

我正在编写一种方法来检查数组中包含多少奇数。这个想法是我使用一个 for 循环来测试一个数字是否为奇数,如果是,它将变量 b 加一,然后返回 b 作为赔率数。我是这样写的:

for ( int a = 0, b = 0; values[a]%2==1;a++){
b++;
}

return b;

但它给了我一个错误“返回 b;^ b 无法解决”。

我究竟做错了什么?

4

6 回答 6

2

变量 b 在 for 语句中定义,并且仅在该代码块中可见。

试试这个

int b = 0;
for ( int a = 0; values[a]%2==1;a++){
b++;
}

return b;
于 2012-09-10T10:14:36.913 回答
2

您已经在循环范围内定义了 b - 它在您的回报之外是不可见的。你可以这样重写:

int b = 0
for ( int a = 0; values[a]%2==1;a++){
b++;
}

return b;
于 2012-09-10T10:14:44.850 回答
1

当您尝试访问定义它的范围之外的变量时,会出现此错误。

// b is defined in this scope and available here only
for ( int a = 0, b = 0; values[a]%2==1;a++){

    b++;
}

// Nothing as b is available outside scope
return b;

要解决此问题,只需b在更大范围内声明即可。

int b=0;
for ( int a = 0; values[a]%2==1;a++){
    b++;
}

return b;
于 2012-09-10T10:15:23.643 回答
1

其他答案指出了导致编译错误的原因。还应该注意,算法是错误的。问题是循环在第一次终止时values[a]%2==1false. 换句话说,它计算第一个偶数之前的奇数个数......而不是奇数的总数。

于 2012-09-10T10:18:24.423 回答
0

http://www.roseindia.net/java/beginners/IfElse.shtml

看看这个教程。它应该告诉你你需要知道的一切,并且比你的方法简单一点。

于 2012-09-10T10:15:44.053 回答
0

您不需要b值来检查数组的末尾。你有类似的东西

for (int a = 0; a < values.length;a++)
    if(values[a]%2!=1)
        return a;

// currently throws an exception.

您可能打算计算看起来像这样的奇数值的数量。

int count = 0;
for (int a = 0; a < values.length;a++)
    if(values[a] % 2 !=0)
        count++;
return count;

或者

int count = 0;
for (int v: values)
    count += v & 1;
return count;
于 2012-09-10T10:32:32.350 回答