我正在将罗马数字输入转换为它的整数值。在我的convertChar方法中,每当我在代码中添加break语句时,我都会收到一个错误,即它是一个无法访问的语句。我不知道为什么会这样。我是一名新生,我一定做错了,我希望有人可以告诉我我做错了什么,以及如何解决。它必须与我设置方法的方式有关吗?我仍然对输入的变量感到困惑,所以也许我搞砸了但是我没有足够的经验来确切知道我做错了什么。这就是我拥有的一切:
public class RomanNumeralConverter {
public int romanInput() {
return convert(getUserInput());
}
public String getUserInput() {
Scanner numberInput = new Scanner (System.in);
System.out.print("Enter a roman numeral in uppercase: ");
String userInput = numberInput.next();
numberInput.close();
return userInput;
}
public int convert (String userInput) {
int result = 0;
int subtractamount = 0;
int x = userInput.length();
while(x != 0) {
char romanConvert = userInput.charAt(x);
if(x >= 1) {
if(convertChar(romanConvert) >= convertChar(userInput.charAt(x - 1))) {
subtractamount += convertChar(userInput.charAt(x - 1));
}
}
result += convertChar(romanConvert);
x--;
}
result -= subtractamount;
return result;
}
public static char convertChar(char value) {
switch (value) {
case 'I':
return 1;
break;
case 'V':
return 5;
break;
case 'X':
return 10;
break;
case 'L':
return 50;
break;
case 'C':
return 100;
break;
case 'D':
return 500;
break;
case 'M':
return 1000;
break;
default:
System.out.println("Invalid character!");
return 0;
break;
}
return value;
}
public void printValue() {
System.out.println(romanInput());
}
public static void main(String[] args) {
new RomanNumeralConverter().printValue();
}
}
答案 0 :(得分:2)
您的问题出在您的switch语句中。你可以通过尝试让方法只返回一次(我认为这是最佳实践)来最小化这种情况。
public static char convertChar(char value) {
char result;
switch (value) {
case 'I':
result = 1;
break;
case 'V':
result = 5;
break;
case 'X':
result = = 10;
break;
case 'L':
result = 50;
break;
case 'C':
result = 100;
break;
case 'D':
result = 500;
break;
case 'M':
result = 1000;
break;
default:
System.out.println("Invalid character!");
result = 0;
break;
}
return result
}
答案 1 :(得分:2)
在Java中,执行时永远不会达到的语句是编译错误。在您的情况下,将永远不会达到break语句,因为它上面有一个return语句。此外,永远不会达到最后一个返回语句,因为在任何情况下,切换块结束时都会返回。
答案 2 :(得分:1)
问题出在您的switch
声明中。
可以将default
个案视为else
语句中的if-else
;如果switch
中没有其他条件满足,它将始终执行。如果您在return
案例中执行throw
(或default
),那么之后的任何代码都将无法访问。
您有两种选择:
return
语句更改为仅将值分配给result
,这意味着代码中只有一个返回点,或return result
。switch