我正在编写一种方法来检查数组中包含多少奇数。这个想法是我使用一个 for 循环来测试一个数字是否为奇数,如果是,它将变量 b 加一,然后返回 b 作为赔率数。我是这样写的:
for ( int a = 0, b = 0; values[a]%2==1;a++){
b++;
}
return b;
但它给了我一个错误“返回 b;^ b 无法解决”。
我究竟做错了什么?
变量 b 在 for 语句中定义,并且仅在该代码块中可见。
试试这个
int b = 0;
for ( int a = 0; values[a]%2==1;a++){
b++;
}
return b;
您已经在循环范围内定义了 b - 它在您的回报之外是不可见的。你可以这样重写:
int b = 0
for ( int a = 0; values[a]%2==1;a++){
b++;
}
return b;
当您尝试访问定义它的范围之外的变量时,会出现此错误。
// 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;
其他答案指出了导致编译错误的原因。还应该注意,算法是错误的。问题是循环在第一次终止时values[a]%2==1
是false
. 换句话说,它计算第一个偶数之前的奇数个数......而不是奇数的总数。
http://www.roseindia.net/java/beginners/IfElse.shtml
看看这个教程。它应该告诉你你需要知道的一切,并且比你的方法简单一点。
您不需要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;