我正在尝试编写代码以将字母等级转换为数值。我有这段代码,但是当我运行它时,出现错误消息java.lang.StringIndexOutOfBoundsException

我究竟做错了什么?

这是代码:

import java.util.Scanner;


public class Lab6Smalls {
  public static void main(String[] args){
    Scanner scan = new Scanner(System.in);

    String grade;
    String letter1;
    String letter2;
    double gpa = 0;

    System.out.print("Enter a letter grade: ");

    grade = scan.nextLine();
    letter1 = grade.substring(0,1);
    letter2 = grade.substring(1,2);

    if (letter1.equals("A") && letter2.equals("+")){
        gpa = 4.3;
    } else if (letter1.equals("A")){
        gpa = 4.0;
    } else if (letter1.equals("B")){
        gpa = 3.0;
    } else if (letter1.equals("C")){
        gpa = 2.0;
    } else if (letter1.equals("D")){
        gpa = 1.0;
    } else if (letter1.equals("F")){
        gpa = 0.0;
    } else {
        System.out.println("The value is invalid.");
    }

    if (!letter1.equals("F")){
        if(letter2.equals("+") && !letter1.equals("A")) gpa += 0.3;
        else if(letter2.equals("-")) gpa -= 0.3;
    }

    System.out.println("The numerical value is " + gpa + ".");
  }
}

最佳答案

存在错误,因为A +以外的其他字母没有第二个值

A +有两个字母

B有一个,所以当您尝试找到第二个时,它会中断

C有一个,所以当您尝试找到第二个时,它会中断

D有一个,所以当您尝试找到第二个时,它会中断

您想要在检索第二个值之前检查它是否存在。
尝试这个

String letter2 = "";
grade = scan.nextLine();
letter1 = grade.substring(0,1);

// Check, if there is a second letter, get it.
if (grade.length() >= 2) {
  letter2 = grade.substring(1,2);
}

关于java - 我在该程序中做错了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35050874/

10-12 04:56