gpt4 book ai didi

Java-字符串索引越界异常 "String index out of Range"

转载 作者:行者123 更新时间:2023-12-01 19:21:31 25 4
gpt4 key购买 nike

我是java新手,硬着头皮问我确信是一个愚蠢的问题。我创建了一些方法,只是想在 main 中调用它们。我在 main 方法中的 while 循环中收到错误。编译器说“线程主 java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:0 at java.lang.String.charAt(String.java:686) at Project3.main(Project3.java:61)

任何帮助将不胜感激。谢谢。完整代码如下:

import javax.swing.JOptionPane;
import java.util.Scanner;
public class Project3
{
public static void main(String[] args)
{
int iScore1; //first variable input by user to calc average
int iScore2; //second variable input by user to calc average
int iScore3; //third variable input by user to calc average
double dAverage; //returned average from the three test scores
char cLetterGrade; //letter grade associated with the average
double dGPA; //the GPA associated with the letter grade
char cIterate = 'Y'; // loop check
String strAgain; //string user inputs after being asked to run again

System.out.print(createWelcomeMessage());


//pause in program
pressAnyKey();

while (cIterate == 'Y')
{
//prompt user for test scores
System.out.print("\n\nPlease enter the first test score: ");
Scanner keys = new Scanner(System.in);
iScore1 = keys.nextInt();

System.out.print("\nPlease enter the second test score: ");
iScore2 = keys.nextInt();

System.out.print("\nPlease enter the third test score: ");
iScore3 = keys.nextInt();

//calculate average from the three test scores
dAverage = calcAverage(iScore1, iScore2,iScore3);
System.out.print("\nThe average of the three scores is: " + dAverage);

//pause in program
pressAnyKey();

//get letter grade associated with the average
cLetterGrade = getLetterGrade(dAverage);
System.out.print("\nThe letter grade associated with the average is " + cLetterGrade);

//pause in program
pressAnyKey();

//get the GPA associated with the letter grade
dPGA = calcGPA(cLetterGrade);
System.out.print("\nThe GPA associated with the GPA is "+ dGPA);

//pause in program
pressAnyKey();

System.out.print("\nDo you want to run again?(Y or N):_\b");
strAgain = keys.nextLine;
strAgain = strAgain.toUpperCase();
cIterate = strAgain.charAt(0);
}//end while

//display ending message to user
System.out.print(createEndingMessage());

}//end main method
}//end class Project3

public static String createWelcomeMessage()
{
String strWelcome;
strWelcome = "Why hello there!\n";
return strWelcome;
}//end createWelcomeMessage()

public static String createEndingMessage()
{
String strSalutation;
strSalutation = "See you later!\n";
return strSalutation;
}//end createEndingMessage()

public static void pressAnyKey()
{
JOptionPane.showMessageDialog(null, "Press any key to continue: ");
}//end pressAnyKey()

public static int getTestSCore()
{
int iScore;
System.out.print("Enter a test score: ");
Scanner keys = new Scanner(System.in);
iScore = keys.nextInt();
return iScore;
}//end getTestSCore()

public static int calcAverage(int iNum1, int iNum2, int iNum3)
{
double dAverage;
dAverage = ((double)iNum1 + (double)iNum2 + (double)iNum3) / (double)3.0;
return dAverage;
}//end calcAverage(int iNum1, int iNum2, int iNum3)

public static char getLetterGrade(double dGrade)
{
char cLetter;

if (dGrade <60)
{
cLetter = 'F';
}
else if (dGrade >=60 && dGrade <70)
{
cLetter = 'D';
}
else if (dGrade >=70 && dGrade <80)
{
cLetter = 'C';
}
else if (dGrade >=80 && dGrade <90)
{
cLetter = 'B';
}
else if (dGrade >=90)
{
cLetter = 'A';
}

return cLetter;
}//end getLetterGrade(double dGrade)

public static double calcGPA(char cLetterGrade)
{
double dGPA;

if (cLetterGrade == 'A')
{
dGPA = 4.0;
}
else if (cLetterGrade == 'B')
{
dGPA = 3.0;
}
else if (cLetterGrade == 'C')
{
dGPA = 2.0;
}
else if (cLetterGrade == 'D')
{
dGPA = 1.0;
}
else
{
dGPA = 0.0;
}
return dGPA;
}//end calcGPA(char cLetterGrade)

最佳答案

您正在使用 scanner.nextInt() 读取三个整数。由于 nextInt 不会在读取 token 后消耗任何空格或换行符,这意味着如果用户输入数字并按 Enter 键,流中仍然存在换行符。

因此,当您稍后调用 nextLine 时,它只会读取该换行符并返回空字符串。

由于对空字符串调用 charAt 会导致越界错误,因此您会得到这样的错误。

要解决此问题,请使用 next 而不是 nextLine,它将读取下一个单词(消耗其之前的所有空格),而不是下一行,或者调用nextLine 两次。一次消耗换行符,一次读取实际行。

您仍然应该检查用户是否输入空行。

关于Java-字符串索引越界异常 "String index out of Range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com