Java:不兼容的类型

时间:2013-10-26 03:29:31

标签: java

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”);行,但它不起作用。

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

4 个答案:

答案 0 :(得分:3)

 Double GPA = TotalGrade / TotalHours;

Autoboxing是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。因此Double是原始double的包装类,而Integer是原始int的包装类。

您的TotalGrade / TotalHours产生int,但您尝试将其分配给类型为Double的对象。做其中之一:

double GPA = (double)TotalGrade / TotalHours;

或,

Double GPA = (double)TotalGrade / TotalHours;

答案 1 :(得分:1)

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

double GPA = TotalGrade / ToutalHours;

DecimalFormat问题相同,format方法不接受包装器Double。因此,当您使用原始double时,它将解决问题。

答案 2 :(得分:1)

您的代码中存在两个问题

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

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

         

    加倍GPA =(双倍)TotalGrade / TotalHours; //这是明确的   铸造

         

    或双倍GPA = TotalGrade / TotalHours //此类促销

    第二个问题是

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

    在此行中,请看结尾引用其错误的更改为"

答案 3 :(得分:0)

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

替换

Double GPA = TotalGrade / TotalHours;

使用

double GPA = TotalGrade /TotalHours;

你可以写

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

在主要的开头,如果你想要和打印一样

System.out.println("The Decimal Value is:"+formatter.format(GPA));