java - 类作业出错

标签 java

我的代码出现错误,我该如何解决这个问题。基本上,从字符串中提取第二个字符(如果存在)的最佳(入门级)方法是什么。

编辑:错误是

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
        String index out of range: 1
    at java.lang.String.charAt(String.java:686)
    at RomanNumeral.main(RomanNumeral.java:38)

我的代码:

import java.util.Scanner;

public class RomanNumeral {

    public static void main(String[] args) {
        // Declare Variable
        int total = 0, length = 0;
        int first;
        int second;
        String romanNumerals;

        // Declare Scanner
        Scanner in = new Scanner(System.in);

        // Get Input
        System.out.println("Please input a Roman Numeral: ");

        romanNumerals = in.next();

        length = romanNumerals.length();

        while (length != 0) {
            first = valueFinder(romanNumerals.charAt(0));

            if (length > 1) {
                second = valueFinder(romanNumerals.charAt(1));
            } else {
                second = 0;
            }

            if (first >= second || length == 1) {
                total += first;
                romanNumerals = romanNumerals.substring(1);
                System.out.println(romanNumerals);
            }// End of if
            else {
                total += (second - first);
                romanNumerals = romanNumerals.substring(2);
                System.out.println(romanNumerals);
            }// End of Else

        }// End of loop
        System.out.println(total);

    }// End of Main Method

    // valueFinder Method

    public static int valueFinder(char numeral) {
        int value = 0;
        switch (numeral) {
            case 'I':
                value = 1;
                break;
            case 'V':
                value = 5;
                break;
            case 'X':
                value = 10;
                break;
            case 'L':
                value = 50;
                break;
            case 'C':
                value = 100;
                break;
            case 'D':
                value = 500;
                break;
            case 'M':
                value = 1000;
                break;
            default:
                System.out.println(numeral 
                                + " is not a Roman Numeral, and will be ignored.");
                break;
        }// End of Switch
        return value;

    }// End of Method

}// End of Class

最佳答案

在获取 romanNumerals 的子字符串后,您需要更新您的 length 变量。当你对它进行子串化时,字符串本身会变得越来越短,但你所指的长度数字却不会。在需要时调用 string.length() 方法会更简单,因为这样就无需维护 length 变量。

或者,创建另一个方法来修改字符串和长度计数器(将其命名为 subStringAndUpdateLength())。但这就太过分了。

关于java - 类作业出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962169/

相关文章:

java - 静态导入时如何调用具有类型的通用方法?

java - 分而治之 - 未排序数组的 k 元素

java - Spring Scheduled 注解中的固定速率和固定延迟有什么区别?

java - Android登录无法连接DB

java - 部署到应用程序服务器的正确 maven2 阶段是什么?

java - ActiveMQ Web 控制台不适用于嵌入式代理

java - 使用@DirtiesContext BEFORE_CLASS 进行 Spring 启动测试

java - Java 是编译型编程语言还是解释型编程语言?

java - 如何使用phonegap插件从android调用javascript函数

java - 如何从 Java 循环中删除 while(true)?