1

私はJavaが初めてで、単純なプログラムのコードを書いています。

このプログラムは、ユーザーに受講したクラスの数を尋ね、次に各クラスの成績と単位時間を尋ねます。

私はこのプログラムを書くのに多くの問題を抱えています.. 私はそれに近づいたと思いますが、私はまだいくつかのことに苦労しています. 具体的には、「精度の低下」エラーが発生していますが、Math.pow または float を使用している場合にのみ表示されるという印象を受けました。

これが私が持っているものです:

java.util.Scanner をインポートします。パブリッククラスGPA

{
  public static void main(String[] args)
   {

    Scanner kbReader = new Scanner(System.in);

    System.out.println("Enter number of classes: ");
    int numberClasses = kbReader.nextInt();

    int i;

      for (i = 0; i < numberClasses; i++)
      {

  System.out.print("Enter letter grade of class: ");
      int letterGrade = kbReader.nextInt();

  System.out.print("Enter credit hour of class: ");
  int creditHour = kbReader.nextInt();

int totalCreditForGPA;
int totalCreditHours;

switch (letterGrade)
    {
   case 'A':
   case 'a': totalCreditForGPA = totalCreditForGPA + (creditHour * 4.0);
         totalCreditHours =  totalCreditHours + creditHour;
         break;
  case 'B':
  case 'b':  totalCreditForGPA = totalCreditForGPA + (creditHour * 3.0);
         totalCreditHours =  totalCreditHours + creditHour;
         break;
  case 'C':
  case 'c':  totalCreditForGPA = totalCreditForGPA + (creditHour * 2.0);
         totalCreditHours =  totalCreditHours + creditHour;
         break;
  case 'D':
  case 'd':  totalCreditForGPA = totalCreditForGPA + (creditHour * 1.0);
         totalCreditHours =  totalCreditHours + creditHour;
         break;
  case 'F':
  case 'f':  totalCreditForGPA = totalCreditForGPA + (creditHour * 0.0);
         totalCreditHours =  totalCreditHours + creditHour;
         break;
  default:
         System.out.println("Invalid letter grade.");
    }
  }

int GPA = totalCreditforGPA;
System.out.println("Your GPA is " + GPA);
   }
}

事前にご協力いただきありがとうございます。

4

2 に答える 2

1

これらの行は、精度の問題の損失を引き起こします

totalCreditForGPA = totalCreditForGPA + (creditHour * 4.0);
totalCreditHours =  totalCreditHours + creditHour;

int に double を掛けて、それを double にアップキャストし、それを int に追加して、int 変数に格納できない double のままにします。解決策は、変数を double として格納するか、整数で乗算することです (たとえば、4.0 ではなく 4)。double を乗算するすべての場所、つまり switch ステートメントのすべてのケースで問題を修正することを忘れないでください。

于 2013-07-14T19:13:26.677 に答える