0

最近,在编码时,我遇到了以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
                     String index out of range: 0
at java.lang.String.charAt(String.java:686)
at TestAssign2.main(TestAssign2.java:119)

当我将行添加firstLetter=userName.charAt(0);到代码中时会出现错误,并且程序会在用户输入所有询问的值后显示错误消息。在输入此行之前,一切正常。

while(uProgStart.equals(PROGSTART))
        {


            System.out.println("What is your name?");
            userName=sc.nextLine();
            junk = sc.nextLine();



            System.out.println("What is the year of your birth?");
            birthYear = sc.nextInt();
            junk = sc.nextLine();

            System.out.println("What is the date of your birth? (dd.mm)");
            birthDDMM = sc.nextDouble();
            junk = sc.nextLine();



            day=(int)birthDDMM;

            month=(int)Math.round(100*birthDDMM)%100;

                //Begins calculation of Dss Score
                if(birthYear%CYCLE_LENGTH!=SNAKE_YEAR)
                    {
                        DssScore=DssScore+1;
                    }

                if(month<SPRING_BEGINNING||month>SPRING_END)

                    {
                        DssScore=DssScore+2;
                    }

     firstLetter=userName.charAt(0);            
            if(firstLetter==(LOWER_S)||firstLetter==(UPPER_S))
                {
                    DssScore=DssScore+4;
                }

该行的想法是查看用户输入的名称是否以字母“s”或“S”开头。

所有变量都已声明,我只是为了保持这篇文章简洁而没有包括它们。

4

3 回答 3

1

我认为您错误地按了 Enter 键而没有机会输入任何输入,并且它强制用户名变量为空。我像上面提到的那样重现了这个错误。有时当你处理 时scanner,它会发生这样的事情。

因此,在您的代码中,username在执行任何操作之前检查是否为空。

于 2013-04-13T03:09:54.117 回答
0

您可能希望使用if它来确保下一行确实存在。

像这样的东西:

if(sc.hasNextLine()) {
   userName = sc.nextLine()
} else {
  System.out.println("OMG... Where is my line?")
}

这很可能不能很好地解决您的问题,但根据我们掌握的有限信息,很难提出更好的建议。

真正的问题很可能在您的逻辑中的其他地方。

于 2013-04-13T03:14:15.190 回答
0

在 charAt调用之前sc.nextLine()进行分配userName的调用可能会返回一个空字符串(例如,如果您扫描一个空行)。

于 2013-04-13T02:58:12.280 回答