2013-09-21 174 views
0

我正在爲「班級書店」編寫程序。我覺得所有的東西都可以工作,但是對於發佈價格和標記,我得到一個「變量未初始化」的錯誤。然而,我給了他們兩個價值。我究竟做錯了什麼?我正在使用Netbeans。變量未初始化

import java.util.Scanner; 
public class ProgrammingProject { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     //Set my variables for the program 
     double publisherPrice; 
     double newBook; 
     double usedBook; 
     double usedBookDiscount; 
     double rentalBook; 
     double rentalBookDiscount; 
     double markup; 
     int booksOrdered; 

     String bookName; 

     System.out.println("Enter the Book Title: "); 
     bookName = keyboard.next(); 


     System.out.println("Enter the Amount of Books Ordered: "); 
     booksOrdered = keyboard.nextInt(); 

       //Set the conditions for markup 
     if (booksOrdered < 20) { 
      markup = .40; 
        } 
     if (booksOrdered >= 20 && booksOrdered < 50){ 
      markup = .35; 
        } 
     if (booksOrdered >= 50 && booksOrdered < 100){ 
      markup = .30; 
        } 
     if (booksOrdered >=100){ 
      markup = .25; 
     } 



     //Set calculations for program to use 

     usedBookDiscount = .75; 
     rentalBookDiscount = .40; 
     newBook = (publisherPrice + markup); 
     usedBook = ((newBook * usedBookDiscount) - usedBookDiscount); 
     rentalBook = ((newBook * rentalBookDiscount - rentalBookDiscount)); 

     System.out.println(bookName + publisherPrice + newBook + usedBook + rentalBook); 



       } 
} 
+1

錯誤說明全部 – Reimeus

+1

該錯誤消息是不言自明的。我沒有看到任何代碼給'publisherPrice'和'markup'任何值。 – tbodt

+0

我沒有意識到我沒有要求輸入publishingPrice,但我的錯誤。 –

回答

2

你只內if陳述值分配給markup。編譯器沒有跟蹤什麼是可行的,並且你是否覆蓋了所有的情況......所以就編譯器而言,變量仍然沒有明確的分配。

最簡單的解決辦法是使用else代替:

if (booksOrdered < 20) { 
    markup = .40; 
} else if (booksOrdered < 50) { 
    markup = .35; 
} else if (booksOrdered < 100) { 
    markup = .30;  
} else { 
    markup = .25; 
} 

由於最終else是無條件的,編譯器將發現,通過這種碼的每個路徑分配一個值到markup

這就足夠了markup - 但是您還沒有指定任何將值賦予publisherPrice的值。這是否意味着通過更多的用戶輸入設置?請注意,如果您在聲明點爲變量賦值,而不是在方法的開始處聲明所有內容,然後賦值,則更容易找到所有這些。

例如,而不是這樣的:

String bookName; 

System.out.println("Enter the Book Title: "); 
bookName = keyboard.next(); 

...你可以有:

System.out.println("Enter the Book Title: "); 
String bookName = keyboard.next(); 

至於另一個方面說明,你不應該一般使用double的資金數量 - 考慮使用改爲BigDecimal

+0

不相關,但考慮用'else if'' booksOrdered> = x'不再需要 – nachokk

+0

@nachokk:對,將編輯出來。 –

+0

謝謝,這有很大的幫助。我是大學新生,這是我的第一個編程課。如果我使用帶有多個單詞或一個數字的書籍標題,是否有任何理由讓它變得模糊起來(Ex Calculus 101,因爲書名跳過訂購的書籍數量)(哈利波特導致錯誤)? –

1

所有變量都必須先用值初始化,然後才能對其執行算術運算。