在try和catch块中有一个return语句,但仍然会出现错误: 缺少退货声明。 我正在使用BlueJ btw。
public int[] getInput(){
boolean rightInput = false;
int[] nothing = {0,0};
while(rightInput == false){
try{
rightInput = true;
int[] XY = {0,0};
String coordinates;
System.out.println("Insert coordinates (x y) and press enter.");
coordinates = input.nextLine();
XY[1] = Character.getNumericValue(coordinates.charAt(0));
XY[0] = Character.getNumericValue(coordinates.charAt(2));
return XY;
}catch(StringIndexOutOfBoundsException se){
System.out.println(se);
System.out.println("Try Again with a space between x and y.");
rightInput = false;
return nothing;
}
}
}
答案 0 :(得分:1)
在while
循环之后必须有一个return语句,因为可能控制不根本不进入while循环体(当rightInput
为真时) 1 并且该方法必须在这种情况下返回一些东西。
while 块之后移动return nothing;
将适合您。
或者,您可以将while循环条件设为true
while (true) {
try {
...
return XY;
} catch(...) {
...
return nothing;
}
}
1 虽然在你的情况下rightInput
总是假的,编译器不会推断(也许不能?)并且它是一件好事。想想如果有一个专门的逻辑来动态计算rightInput
会发生什么。然后它会导致编译错误,要求添加一个return语句,因为编译器现在无法判断 while 循环体是否会被执行。
答案 1 :(得分:0)
如果你的代码不符合while循环中指定的条件怎么办,那么怎么不进入while循环呢?所以为了覆盖那个场景,while循环之外应该有一个return语句。只需加上
return null
在方法结束之前。
while{
try {
}
catch {
}
}
return null;
答案 2 :(得分:0)
将您的代码更改为:
<?php
$nums = array(0, 1, 2, 3);
echo "My 1st array =";
$str='';
foreach ($nums as $value) {
$str.= $value.",";
}
echo rtrim($str,',');
?>
答案 3 :(得分:0)
我可以从你想要在while循环中执行操作的代码中理解,直到 rightInput 变为true,如果在它们之间发生任何错误,它不应该破坏循环。
你正在做的是在每个循环执行后返回值。返回本身将带您离开循环,因为我们使用 break 运算符。
我建议你将返回XY 移出循环。请在下面找到更新代码:
public int[] getInput(){
boolean rightInput = false;
//int[] nothing = {0,0}; not required any more
int[] XY = {0,0}; // moved outside loop
while(rightInput == false){
try{
rightInput = true;
String coordinates;
System.out.println("Insert coordinates (x y) and press enter.");
coordinates = input.nextLine();
XY[1] = Character.getNumericValue(coordinates.charAt(0));
XY[0] = Character.getNumericValue(coordinates.charAt(2));
} catch(StringIndexOutOfBoundsException se) {
System.out.println(se);
System.out.println("Try Again with a space between x and y.");
rightInput = false;
// return nothing; not required any more it is same as XY
}
}
return XY;
}