为什么我会收到此“无法访问的语句”错误?

时间:2014-11-11 22:35:48

标签: java

我正在将罗马数字输入转换为它的整数值。在我的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();
}
}

3 个答案:

答案 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