基本的家庭工作问题我做错了什么

时间:2009-12-30 23:37:07

标签: java

/* Method: findName() */
/**
 * Finds the name of the entry and sets it to the name variable.
 */
    private void findName(String line){
        end = line.indexOf(" ");
        name = line.substring(0,end);
    }

/* Method: findDecades() */
/**
 * Finds the name of the entry and sets it to the name variable.
 */
    private void findDecades(String line){
        for(int i = 0; i<NDECADES; i++){
            int start = end + 1;
            end = line.indexOf(" ",start);
            String decadeTemp = line.substring(start, end);
            data[i] = Integer.parseInt(decadeTemp);
        }
    }

Line如下所示:

Sam 58 69 99 131 168 236 278 380 467 408 466

当我运行代码时,第一个方法运行正常,但是当它到达该行时会抛出错误异常:

            String decadeTemp = line.substring(start, end);

编辑:

抛出的错误是:

抛出新的StringIndexOutOfBoundsException(endIndex - beginIndex);

7 个答案:

答案 0 :(得分:4)

我怀疑(没有进一步的信息)你在

期间运行了你的字符串的结尾
line.substring(start, end);

所以你的边界条件不对。我会打印出开始/结束值并从中确定是什么问题。我强烈建议,顺便说一下,在这样的问题中你发布了你得到的异常/堆栈跟踪。

更进一步,通过使用String.split(" ")并在结果数组中进行迭代,您可以更轻松地找到上述内容。这往往不易出错,因为你可以在数组中使用for循环,而不必跟踪开始和结束点(我总是错误,它的价值)。

(因为这是作业,我假设输入字符串格式正确。否则你将不得不提供各种输入,并且需要更强大的解决方案)

答案 1 :(得分:4)

添加另一行

        end = line.indexOf(" ",start);
        System.out.println("Doing substring of "+start+" to "+end);  // new line
        String decadeTemp = line.substring(start, end);

这应该是显而易见的。 我猜测结尾是-1,这意味着你没有找到空格,NDECADES太大了。

答案 2 :(得分:1)

如果line中没有空格怎么办?或者如果它上面没有start的任何空格怎么办?

答案 3 :(得分:1)

您可能想看一下String上的其他一些方法,这些方法可以使这更简单(String.split()浮现在脑海中)。

答案 4 :(得分:0)

问题解决NDECADES是一个太大的空间。

答案 5 :(得分:0)

要自己开始发现问题,你应该看看String#indexOfString#substring的Javadoc,特别是关于边界情况会发生什么(比如找不到任何东西等)。

答案 6 :(得分:0)

你需要做一些检查,例如

if (start > 0 && end > 0 && end < length).

您还需要检查decadeTemp是否为数字。