2013-10-26 218 views
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錯誤。Java:不兼容類型

此外,我應該包括DecimalFormat df = new DecimalFormat("#0.00」);線在主的開始,但它不工作。

任何事情都很有幫助。感謝

+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; 
+0

您的第一個示例 - 您不會將您的除數/紅利轉換爲「double」。這將導致整數劃分。 – Makoto

+0

感謝您的回覆。我的第一個例子將會導致整數除法'yes',但它不會給OP帶來的錯誤。我正在迴應OP的問題,他爲什麼會遇到'不兼容類型'錯誤並且解決它。我應該編輯它嗎?請提供任何建議將可觀的 – Sage

1

您正在使用的包裝類Double。而你的變量TotalGrade/ToutalHours是基本類型int。因此它們是不相容的。使用原始的double將解決這個問題。

double GPA = TotalGrade/ToutalHours; 

同爲DecimalFormat問題,format方法不接受包裝Double。所以當你使用原始的double它將解決這個問題。

0

您試圖將int To Wrapper類轉換爲Double。

更換

Double GPA = TotalGrade/TotalHours; 

隨着

double GPA = TotalGrade /TotalHours; 

,你可以寫

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

在主begining,如果你想和打印它像

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

您認爲投到(雙倍)TotalGrade是否需要? –

+0

你是對的GV –

+0

假設OP確實需要小數部分...... –

1

有在你的代碼的兩個問題

  1. Java允許類促銷,但你正在試圖推動一個int值,雙擊,這是不可能這可以在以下兩種方式
解決

更改您的Double GPA = TotalGrade/TotalHours;

雙倍GPA =(double)TotalGrade/TotalHours; //這是明確的 型鑄造

或雙GPA = TotalGrade/TotalHours //這種類型的促銷

第二個問題是

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

在此行中看到的收盤報價的錯誤變化它到"