Java 要求用户仅为gpa程序的字母等级输入1个字符

Java 要求用户仅为gpa程序的字母等级输入1个字符,java,Java,我正试图完成这个Java作业,我被困在了最后一点上。我需要这样做,当用户输入一个字母等级以计算他们的G.P.a.时,他们只能输入一个字母 例如,如果他们输入aaa而不是a,则需要接收错误 我被困在如何着手做这件事上。除了这件事,一切都正常。我对Java非常陌生,所以任何帮助都会很好 这是我的班级: public class Gpa { private int sumCredits; private int sumPoints; public int getPointsForGrade(

我正试图完成这个Java作业,我被困在了最后一点上。我需要这样做,当用户输入一个字母等级以计算他们的G.P.a.时,他们只能输入一个字母

例如,如果他们输入
aaa
而不是
a
,则需要接收错误

我被困在如何着手做这件事上。除了这件事,一切都正常。我对Java非常陌生,所以任何帮助都会很好

这是我的班级:

public class Gpa {

private int sumCredits;
private int sumPoints;


  public int getPointsForGrade(char letter) {
    int gradepoints;
   switch (letter)
   {
   case 'A':
   case 'a':
      gradepoints = 4;
      break;
   case 'B':
   case 'b':
      gradepoints = 3;
      break;
   case 'C':
   case 'c':
      gradepoints = 2;
      break;
   case 'D':
   case 'd':
      gradepoints = 1;
      break;
   case 'F':
   case 'f':
      gradepoints = 0;
      break;

   default:
      gradepoints = -1;
      break;


   }
   return gradepoints;  

  }


  public void Constructor(){

     sumCredits = 0;
     sumPoints = 0;

     return;
  }

  public void addGrade( char letter, int credits){  
     sumCredits = sumCredits + credits;
     sumPoints = sumPoints + getPointsForGrade(letter) * credits;
  }

  public double calcGPA(){
     double GPA;
     if (sumCredits == 0){
      return 0;

     }
     GPA = (double)sumPoints / sumCredits;
     return GPA;
  }

  public int totalCredits(){

   return sumCredits;

  }

  public int totalPoints(){

   return sumPoints;

  }

}
这是我的测试课,或者gpa计算器

import java.util.*;
import java.util.Scanner;

public class ComputeGpa {

   public static void main (String [] args){

   Scanner scan = new Scanner(System.in);
   Gpa gpa = new Gpa();
   int courses;
   int credits;
   char letter;


      while (true){
         System.out.println(" Enter number of courses: ");
         courses = scan.nextInt();
         if (courses > 0){

            break;

         }
         else {
            System.out.println(" Invalid number of courses - must be greater than 0");       
         }
      }

       for (int i = 1; i<= courses; i++)
       {

          while (true){

            System.out.println(" Enter Grade ( one character )");
            String grade = scan.next();
            letter = grade.toUpperCase().charAt(0);
            if (letter == 'A' || letter == 'B' || letter == 'C' || letter =='D' || letter == 'F'  ){
               break;
            }
            else {
               System.out.println(" must enter A,B,C,D,F (Upper or Lower case)");
            }

            if (letter != 'A' || letter != 'B' || letter !=  'C' || letter != 'D' || letter != 'F'){
               System.out.println("must be 1 letter only");
            }

         }

         while (true){
            System.out.println(" Enter Credits: ");
            credits = scan.nextInt();

            if (credits < 0 || credits > 9){

               System.out.println("Invalid credits = must be between 0 and 9, inclusively");
            }
            else {
               break;
            }
         }

           gpa.addGrade(letter, credits);
         System.out.println(" Points: " + gpa.getPointsForGrade(letter) );
         System.out.println(" Sum Points: " + gpa.totalPoints() + " Sum Credits: " + gpa.totalCredits()); 

      }  
     System.out.printf(" GPA: %.2f%n", gpa.calcGPA()); 

   }

}
import java.util.*;
导入java.util.Scanner;
公共类计算机{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
Gpa Gpa=新Gpa();
int课程;
国际学分;
字符字母;
while(true){
System.out.println(“输入课程数:”);
courses=scan.nextInt();
如果(课程>0){
打破
}
否则{
System.out.println(“课程数无效-必须大于0”);
}
}
对于(int i=1;i 9){
System.out.println(“无效积分=必须介于0和9之间,包括0和9”);
}
否则{
打破
}
}
gpa.addGrade(字母、学分);
System.out.println(“点数:+gpa.getPointsForGrade(字母));
System.out.println(“总和积分:+gpa.totalPoints()+”总和积分:+gpa.totalCredits());
}  
System.out.printf(“GPA:%.2f%n”,GPA.calcGPA());
}
}

您可以检查输入中是否有更多条目。我没有运行此代码,但这是一种简单的检查方法

 System.out.println(" Enter Grade ( one character )");
            String grade = scan.next();
            letter = grade.toUpperCase().charAt(0);

            if(grade.length() > 1){            // check the size of the input
               System.out.println("You entered too many letters");
            }

            else if (letter == 'A' || letter == 'B' || letter == 'C' || letter =='D' || letter == 'F'  ){
                     break;
                 }
                 else {
                     System.out.println(" must enter A,B,C,D,F (Upper or Lower case)");
                 }

在运行
scan.next()
并将其存储到字符串中的位置,可以检查字符串的长度

if (grade.length() > 1) {
    // show an error or throw an exception or smth
    System.out.println("Error, too many chars"); // do this if you want to print an error
    throw new Exception("TOO MANY CHARS"); // do this and don't catch it if you want to crash the program
}
编辑:对于OP的请求,如果错误,请再次询问分数

String grade = "x"; // set the base case that will never occur
while (!grade.equals("x")) { // check if it is x - if it's not x, continue
    if ((grade = scan.next()).length() == 1) {
        // check the length - if it's 1 letter
        // check the letter here. If it's not a valid letter, 
        // set grade back to x
    } else {
        // if you're here, it wasn't 1 letter.
        // print an error msg
        System.out.println("too many chars");

        // Therefore, set grade back to x so that we ask again
        grade = "x";
    }
}

谢谢,解决方法很简单,我想我还有很多东西要学