Java说我的返回值int没有初始化。
public static int getRow(char r)
{
int row;
if (r == 0)
row = 0;
if (r == 1)
row = 1;
if (r == 2)
row = 2;
if (r == 3)
row = 3;
if (r == 4)
row = 4;
if (r == 5)
row = 5;
if (r == 6)
row = 6;
if (r == 7)
row = 7;
if (r == 8)
row = 8;
if (r == 9)
row = 9; //end if
return row;
}
return row
上有一个错误,它表示int row
尚未初始化。此方法是将char
的值转换为int
,以便将其放置在数组中以创建网格游戏。当我将row
初始化为0
时,它不会命中任何if语句并将值保持为零。游戏是战舰游戏,因此值已经验证为0-9
。
答案 0 :(得分:2)
如果r
不在0 to 9
范围内怎么办?然后未初始化row
将返回!这就是为什么你被迫初始化row
。
使用默认值初始化row
,或放置else
块。
我不确定,但您在寻找Character#getNumericValue
吗? Read more
所以你可以轻松地做到这一点:
public static int getRow(char r) {
return Character.getNumericValue(r);
}
但要小心
如果字符没有数字值,则返回-1。如果字符的数值不能表示为非负整数(例如,小数值),则返回-2。
答案 1 :(得分:1)
要使代码正常工作,请初始化int row = -1; //如下所示
public static int getRow(char r)
{
int row = -1;
if (r == 0)
row = 0;
if (r == 1)
row = 1;
if (r == 2)
row = 2;
if (r == 3)
row = 3;
if (r == 4)
row = 4;
if (r == 5)
row = 5;
if (r == 6)
row = 6;
if (r == 7)
row = 7;
if (r == 8)
row = 8;
if (r == 9)
row = 9; //end if
return row;
}
返回值为-1表示没有传递0到9的值。
但是这里传递的参数是char。因此,如果要比较字符,请使用单引号“1”。即如果您想查看输入是否为字符1。
public static int getRow(char r)
{
int row;
if (r == '0')
row = 0;
if (r == '1')
row = 1;
if (r == '2')
row = 2;
if (r == '3')
row = 3;
if (r == '4')
row = 4;
if (r == '5')
row = 5;
if (r == '6')
row = 6;
if (r == '7')
row = 7;
if (r == '8')
row = 8;
if (r == '9')
row = 9; //end if
return row;
}
在您的代码中,要比较的字符是与ASCII 0到9对应的字符。 假设你想要返回作为char传递的同一个int,你可以不用任何if来处理它。刚回来r - 48;或者返回r - '0';因为48是ASCII值0;
public static int getRow(char r)
{
return r - 48;
}
答案 2 :(得分:0)
$http.get(url, {responseType: "arraybuffer"} ).then(function(response) {
$scope.image= response.data; });
语句中没有一个是if
。
如果添加true
并在else
块中设置row
的值,编译器将检测到没有代码路径导致未初始化的值{{ 1}}失败将消失。
答案 3 :(得分:0)
假设你期望一个字符在'0'到'9'范围内,那么这段代码将为你提供你想要产生的结果:
public static int getRow(char r){
return r - '0';
}
答案 4 :(得分:0)
您声明了int row;
,但未向其指定任何值。
当r
不在['0' - '9']
时,row
将没有任何值,因为您没有为其分配任何值。这就是你必须初始化row
的原因。
您可以进一步简化您的功能:
public static int getRow(char r)
{
if( r >= '0' && r <= '9')
return r - '0';
else
return -1; // or any other value according to your logic
}
答案 5 :(得分:0)
首先,如果所有row
语句都为false,则if
将没有值。这是导致错误的原因。
第二,&#34;结构&#34;这种方法,IMO,太单调,可以清理。我们将-1视为哨兵值。
public static int getRow(char r)
{
int row = -1;
if ('0' <= r && r <= '9') {
row = r - '0';
}
return row;
}
使用三元运算符并且没有局部变量时更短/更清洁:
public static int getRow(char r) {
return ('0' <= r && r <= '9') ? r - '0' : -1
}
答案 6 :(得分:0)
代码行int row;
声明一个名为row
的整数变量。要初始化您的row
变量,您需要为其赋值。如果您的角色r
不在0到9之间,则您的row
变量将永远不会分配给它。
您可以在同一行中声明和初始化您的行变量,如下所示:
int row = 0;
但是,Java有一种内置方法可以为您执行此转换,因此您不需要编写自己的方法来执行此操作。您可以简单地调用内置方法getRow(char r)
,而不是创建Character.getNumericValue(char r)
方法。
答案 7 :(得分:0)
如果你的if语句都不是真的那么返回值是多少?您可以初始化&#34; row&#34;由于局部变量不像实例变量,因此需要使用某些东西进行初始化,因为它们不具有称为默认值的东西。
public static int getRow(char r)
{
int row=-1;
if (r == 0)
row = 0;
if (r == 1)
row = 1;
if (r == 2)
row = 2;
if (r == 3)
row = 3;
if (r == 4)
row = 4;
if (r == 5)
row = 5;
if (r == 6)
row = 6;
if (r == 7)
row = 7;
if (r == 8)
row = 8;
if (r == 9)
row = 9; //end if
return row;
}
所以一旦你像上面那样初始化你的变量,如果你的if语句都没有评估为true,那么它返回-1
同样使用switch语句而不是这些if语句。这将是非常明确和最佳实践。
答案 8 :(得分:-3)
我猜这是因为您要将字符与整数值进行比较而不是字符值。
r == 3;
//is not the same as
r == '3';
编辑:
如果你想简单地修改你的代码,否则(因为,有人指出,你没有明确的初始化),你删除了一个案例,并将其作为你的其他情况。
{
int row;
if (r == 0)
row = 0;
else if (r == 1)
row = 1;
else if (r == 2)
row = 2;
else if (r == 3)
row = 3;
else if (r == 4)
row = 4;
else if (r == 5)
row = 5;
else if (r == 6)
row = 6;
else if (r == 7)
row = 7;
else if (r == 8)
row = 8;
else (r == 9)
row = 9; //end if
return row;
}
这与所谓的&#34;开关 - 案例&#34;基本相同:
//char r
switch(r) {
case '0': row = 0;
break;
case '1': row = 1;
break;
case '2': row = 2;
break;
case '3': row = 3;
break;
case '4': row = 4;
break;
case '5': row = 5;
break;
case '6': row = 6;
break;
case '7': row = 7;
break;
case '8': row = 8
break;
default: row = 9;
}
return row;
Java编译器非常聪明,可以发现至少有一个实例应该已经初始化并继续前进。
它可以处理一些更复杂的情况,但是如果......其他......应该总是通过。
在战列舰的背景下,您的输入范围是&#39; 0&#39; 0 - &#39; 9&#39;,所以你可以假设,如果你曾经给它任何其它垃圾输入。
然而,请注意,这不一定是最好的解决方案,只是最明显的解决方案。在此处查看其他答案以获得更多见解。
您将来可能做的很多事情都与处理字符或字符串以及提取数据有关,就像您在这里所做的一样。
//char r
return Integer.parseInt(r +""); //+"" converts 'r' to "r"
//or, as mentioned below
return Character.getNumericValue(r);
//works for things like roman numerals
//but also will always return SOME value.
//Be aware of this, because you may not expect to get an int for 'a'
将返回一个整数,或者抛出NumberFormatException,而不进一步检查。