1
import java.text.*;
import java.util.*;
public class Proj3 {
    public static void main(String[]args){
     // DecimalFormat df = new DecimalFormat("#0.00”);
     Scanner s = new Scanner(System.in);
     int TotalHours = 0;
     int TotalGrade = 0;

     System.out.print("How many courses did you take? ");
     int Courses = Integer.parseInt(s.nextLine());
     System.out.println("");

     int CourseNumber = Courses - (Courses - 1);
     while (Courses > 0){
         System.out.print("Course (" + CourseNumber +"): How many hours? ");
         int Hours = Integer.parseInt(s.nextLine());
         TotalHours = TotalHours + Hours;

         System.out.print("Course (" + CourseNumber +"): Letter grade? ");
         char Grade = s.nextLine().charAt(0);

         if (Grade == 'A'){
             TotalGrade = TotalGrade + (4 * Hours);
            }
         if (Grade == 'B'){
             TotalGrade = TotalGrade + (3 * Hours);
            }
         if (Grade == 'C'){
             TotalGrade = TotalGrade + (2 * Hours);
            }
         if (Grade == 'D'){
             TotalGrade = TotalGrade + (1 * Hours);
            }

         Courses = Courses - 1;
         CourseNumber = CourseNumber + 1;
        }
     Double GPA = TotalGrade / TotalHours;
     System.out.println(df.format(GPA));

    }
}

这是一个任务,我不知道如何解决我的问题。该Double GPA = TotalGrade / ToutalHours;行出现Incompatible Types错误。

此外,我应该DecimalFormat df = new DecimalFormat("#0.00”);在 main 的开头包含该行,但它不起作用。

任何事情都非常有帮助。谢谢

4

4 回答 4

3
 Double GPA = TotalGrade / TotalHours;

Autoboxing是 Java 编译器在原始类型与其对应的对象包装类之间进行的自动转换。因此Double是原始的包装类,是原始doubleInteger包装类int

TotalGrade / TotalHours的结果是 anint但您正试图将其分配给 type 的对象Double。执行以下任一操作:

double GPA = (double)TotalGrade / TotalHours;

或者,

Double GPA = (double)TotalGrade / TotalHours;
于 2013-10-26T03:35:10.137 回答
1

您正在使用包装类Double。虽然您的变量TotalGrade / ToutalHours是原始类型 int。因此它们是不相容的。使用原始双精度将解决此问题。

double GPA = TotalGrade / ToutalHours;

同样的DecimalFormat问题,该format方法不接受 wrapper Double。因此,当您使用原语double时,它将解决问题。

于 2013-10-26T03:40:09.433 回答
1

你的代码有两个问题

  1. Java 允许类型提升,但您试图将 int 值提升为 Double,这是不可能的,这可以通过以下两种方式解决

更改您的双倍 GPA = TotalGrade / TotalHours;

将 GPA 翻倍 = (double)TotalGrade / TotalHours;//这是显式类型转换

或双倍 GPA = TotalGrade/ TotalHours // 这种类型的促销

第二个问题是

// DecimalFormat df = new DecimalFormat("#0.00”);

在这一行中,请参阅结束引号,将其错误地更改为"

于 2013-10-26T03:45:15.680 回答
0

您正在尝试将 int 转换为 Wrapper 类 Double。

代替

Double GPA = TotalGrade / TotalHours;

double GPA = TotalGrade /TotalHours;

你可以写

NumberFormat formatter = new DecimalFormat("#0.000");

如果您愿意,可以在 main 开头并像这样打印

System.out.println("The Decimal Value is:"+formatter.format(GPA));
于 2013-10-26T03:43:23.833 回答