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