2015-11-03 100 views
1

我正在使用的程序當前運行成功,但它不執行我的程序的一部分,並且顯示沒有錯誤。我的顯示器()沒有運行或顯示我的println

提示符爲: 「創建聲明購買對象的應用程序並提示用戶購買詳細信息。提示輸入發票號碼時,不要讓用戶繼續操作,直到輸入介於1000和8000之間的數字當您提示輸入銷售金額,不要繼續,直到用戶輸入一個非負數,銷售金額,銷售稅,將文件保存爲CreatePurchase.java.

import java.util.Scanner; 

public final class CreatePurchase { 
    static int invoiceNum; // I made these variables static because 
    static double amount; // it fixed an error I was having with using 
          // non-static variables in a static field? 

    double tax = .05; 
    double totalamount; 

    public static void main(String[] args) { 
     Purchase completedPurchase = new Purchase(); 
     Scanner input = new Scanner(System.in); 
     System.out 
       .println("Please enter the invoice number! (Must be between 1000 and 8000!)"); 
     invoiceNum = input.nextInt(); 
     System.out 
       .println("Please enter the amount of the sale! (Must be greater than 0!)"); 
     amount = input.nextDouble(); 

     while (invoiceNum < 1000 || invoiceNum > 8000) { 
      System.out 
        .println("The invoice number you entered is invalid, try again!"); 
     } 
     while (amount < 0) { 
      System.out.println("The sale amount is invalid, try again!"); 
     } 
    } 

    public int getInvoiceNum(int invoiceNum) { 
     return invoiceNum; 
    } 

    public double getAmount(double amount) { 
     return amount; 
    } 

    public double getTotalAmount(double totalAmount) { 
     return totalAmount; 
    } 

    public void setTotalAmount(double tax, double amount) { 
     double totalAmount = (amount * tax); 
    } 

    public void display(int invoiceNum, double amount, double totalAmount) { 
     System.out.println("Your invoice number is:" + invoiceNum + "."); 
     System.out.println("Your sale amount is: " + amount + "."); 
     System.out.println("Your sale amount after tax is: " + totalAmount 
       + "."); 
    } 
} 

我花了幾個小時試圖數字爲了讓我的顯示方法能夠正常工作,我需要修復這些問題。該程序運行成功,並沒有錯誤,所以我不知道甚至試圖修復。 (對不起,如果我的代碼或問題沒有意義。)

+0

除了上面提到的直接問題,潛伏在你的代碼中有幾個危險的條件。再看一看 - 如果你輸入負值會發生什麼?嘗試,如果你覺得大膽。編譯器抱怨「static不能訪問非靜態變量」的原因是因爲教授可能希望你創建一個'Purchase'對象(再次讀取問題語句!),並修改其中的值(例如,通過'completedPurchase.tax = .2')。一般來說,應該避免可變的'static'變量。在您完成這項工作後,請繼續閱讀[codereview.se]瞭解更多信息。 –

+0

非常感謝大家回覆,你們都非常樂於助人,感謝你們的時間和耐心! – yuki

回答

0

如果有機會,我會大量重構你的代碼。首先,CreatePurchase類應該是一個簡單的POJO(普通的舊Java對象),其中包含發票號,購買金額和銷售稅的狀態,以及用於訪問和更改該狀態的getter和setter方法。接下來,此類中的main()方法將實例化用於存儲用戶輸入的CreatePurchase對象。我做了一個很大的改變,就是代碼如何處理用戶輸入。我的代碼使用兩個while循環來輪詢用戶正確的發票號碼(在10008000之間)和數量(非負數),然後才能繼續執行方法的其餘部分。最後,創建的對象CreatePurchase用於將結果輸出到控制檯。

public final class CreatePurchase { 
    private int invoiceNum; 
    private double amount; 
    private double totalamount; 

    // I am hard-coding the sales tax as 5%, as you did in your question, 
    // though this code can easily be modified if you also want to input the tax 
    private final double tax = .05; 

    public int getInvoiceNum() { 
     return invoiceNum; 
    } 

    public void setInvoiceNum(int invoiceNum) { 
     this.invoiceNum = invoiceNum; 
    } 

    public double getAmount() { 
     return amount; 
    } 

    public void setAmount(int amount) { 
     this.amount = amount; 
    } 

    public double getTotalAmount() { 
     return totalAmount; 
    } 

    public void setTotalAmount(double totalAmount) { 
     this.totalAmount = totalAmount; 
    } 

    public static void main(String[] args) { 
     CreatePurchase cp = new CreatePurchase(); 
     Scanner input = new Scanner(System.in); 

     // these next two do-while loops will continue polling the user 
     // until he enters a valid input 
     do { 
      System.out.println("Please enter the invoice number! (Must be between 1000 and 8000!)"); 
      invoiceNum = input.nextInt(); 
     } while (invoiceNum < 1000 || invoiceNum > 8000); 

     cp.setInvoiceNum(invoiceNum); 

     do { 
      System.out.println("Please enter the amount of the sale! (Must be greater than 0!)"); 
      amount = input.nextDouble(); 
     } while (amount < 0); 

     totalamount = amount*(1 + tax); 
     cp.setAmount(amount); 
     cp.setTotalAmount(totalAmount); 

     // now use the CreatePurchase object to print out 
     // details of the transaction 
     System.out.println("Your invoice number is:" + cp.getInvoiceNum() + "."); 
     System.out.println("Your sale amount is: " + cp.getAmount() + "."); 
     System.out.println("Your sale amount after tax is: " + cp.getTotalAmount() + "."); 
    } 
} 
+0

語法錯誤 - 您使用'totalamount'和'tax',但這些仍然是實例變量。 –

+0

我沒有投票(倒下或其他)在你的答案。如果你要給他們完整的代碼,你至少可以通過這些改變嗎? –

+0

downvote的任何評論?我的答案似乎正是OP要求的。 –

0

您聲明瞭方法public void display(int invoiceNum, double amount, double totalAmount)但您從未真正使用它。

+0

這似乎應該是一個評論,而不是一個答案。 –

+0

相信與否,它沒有完全回答OP,因爲它具有無限的「while」循環,在用戶輸入錯誤的情況下永遠不會中斷。 –

+0

@TimBiegeleisen但這是一個單獨的問題。 'display()'沒有運行,因爲沒有人調用它,無論輸入與否都沒有。 – Alexander

0

請嘗試下面的代碼,這應該有所幫助!

import java.util.Scanner; 

public final class CreatePurchase { 
    static int invoiceNum; // I made these variables static because 
    static double amount; // it fixed an error I was having with using 
          // non-static variables in a static field? 

    static double tax = .05; 
    static double totalAmount; 

    public void updatePurchase(final Purchase purchase) { 
     Scanner input = new Scanner(System.in); 
     System.out 
       .println("Please enter the invoice number! (Must be between 1000 and 8000!)"); 
     invoiceNum = input.nextInt(); 

     if (invoiceNum < 1000 || invoiceNum > 8000) { 
      System.out 
        .println("The invoice number you entered is invalid, try again!"); 
      updatePurchase(purchase); 

     } 
     System.out 
       .println("Please enter the amount of the sale! (Must be greater than 0!)"); 
     amount = input.nextDouble(); 

     if (amount < 0) { 
      System.out.println("The sale amount is invalid, try again!"); 
      updatePurchase(purchase); 
     } 

     setTotalAmount(tax, amount); 

     display(invoiceNum, amount, getTotalAmount()); 

    } 

    public static void main(String[] args) { 
     Purchase completedPurchase = new Purchase(); 
     new CreatePurchase().updatePurchase(completedPurchase); 
    } 

    public int getInvoiceNum(int invoiceNum) { 
     return invoiceNum; 
    } 

    public double getAmount(double amount) { 
     return amount; 
    } 

    public double getTotalAmount() { 
     return totalAmount; 
    } 

    public void setTotalAmount(double tax, double amount) { 
     totalAmount = (amount * tax); 
    } 

    public void display(int invoiceNum, double amount, double totalAmount) { 
     System.out.println("Your invoice number is:" + invoiceNum + "."); 
     System.out.println("Your sale amount is: " + amount + "."); 
     System.out.println("Your sale amount after tax is: " + totalAmount 
       + "."); 
    } 
} 
+0

我試過你的問題來解決遞歸。 –

+0

非常感謝您的回覆,看到我可以做出某些工作的所有不同方式很有幫助! – yuki