2013-06-22 60 views
0

我在練習中遇到了一些問題,我想知道是否有人可以提供幫助。這裏是問題:從類中調用計算的變量

創建一個名爲Purchase的類。每筆採購都包含發票號碼,銷售金額和銷售稅金額。包括髮票號碼和銷售金額的設置方法。在銷售金額的set()方法中,將銷售稅計算爲銷售額的5%。還包括顯示購買細節的顯示方法。保存爲Purchase.class b。創建一個聲明一個Purchase對象並提示用戶購買細節的應用程序。當您提示輸入發票號碼時,請勿讓用戶繼續操作,直至輸入介於1,000和8,000之間的數字。當您提示銷售金額時,請不要繼續,直到用戶輸入非負值。創建有效的購買對象後,顯示對象的發票編號,銷售額和銷售稅。

這是我爲我的採購類

import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class Purchase 
{ 
    //variables 
    public static int invoice; 
    public static double saleAmount; 
    public static double saleTax; 

    //get&set for Invoice 
    public void setInvoice(int x) 
     { 
      invoice = x; 
     } 
    public int getInvoice() 
     { 
      return invoice; 
     } 

    //get&set for saleAmount 
    public void setSaleAmount(double y) 
     { 
      saleTax = y * 0.05; 
      saleAmount = y; 
     } 
    public double getSaleAmount() 
     { 
      return saleAmount; 
     } 

    //get for saleTax 
    public double getSaleTax() 
     { 

      return saleTax; 
     } 

    //display method 
    public void display(int invoice, double saleAmount, double saleTax) 
     { 
     System.out.println("Invoice number: " + invoice + '\n' + "Sale's Amount: " + saleAmount + '\n' + "Sale's Tax: " + saleTax); 
     } 
} 

代碼爲CreatePurchase類的代碼

import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class CreatePurchase 

{ 
    public static void main(String[] args) 

    {   
     Purchase purchase1 = new Purchase(); 

     //scanner for sales amount  
     Scanner inputDevice = new Scanner(System.in); 
     System.out.println("Please enter the sale amount: "); 
     Purchase.saleAmount = inputDevice.nextDouble(); 

     //loop for saleAmount 
       while (Purchase.saleAmount < 1) 
        { 
        System.out.print('\n'+ "Error, your sale amount needs to be more than 0. Please enter a valid sale amount: >> "); 
        Purchase.saleAmount = inputDevice.nextDouble(); 
        } 

     //scanner for invoice 
     System.out.println("Please enter an invoice number between 1000 and 8000: "); 
     Purchase.invoice = inputDevice.nextInt(); 

       //loop for invoice 
       while (Purchase.invoice < 999 || Purchase.invoice > 8000) 
        { 
        System.out.print('\n'+ "Error, please enter a valid invoice number between 1000 and 8000: >> "); 
        Purchase.invoice = inputDevice.nextInt(); 
        } 

     //display result 
     JOptionPane.showMessageDialog(null, "Your invoice number is " + Purchase.invoice + '\n' 
     + "Your sale tax is: " + Purchase.saleTax + '\n' 
     + "Your grand total is: " + Purchase.saleAmount);    

    } 
} 

正如你可以看到,當您運行的第二類中,saleAmount不包括額外5%的銷售稅和銷售稅仍然爲0.可能是一件非常愚蠢的事情,但我不知道從哪裏開始。

+1

如果您打算爲類屬性設置getter和setter,那麼您應該使屬性爲'private',以便在setter中進行任何計算必須進行計算,因爲您無法直接在類之外設置屬性 –

回答

0

saleTax通過setSaleAmount方法計算。你永遠不會調用這個方法,所以saleTax從不計算。

相反的:

   Purchase.saleAmount = inputDevice.nextDouble(); 

你可能想:

   purchase1.setSaleAmount(inputDevice.nextDouble()); 

您可能還需要通過一些文字解釋,和之間的靜態和實例成員類和對象之間的區別閱讀。但通過改變這一行代碼,程序至少可以工作。

+0

現在沒有編制,錯誤調用: 符號:變量getSaleTax 位置:型購房的變量purchase1 CreatePurchase.java:46:錯誤:無法找到符號 \t \t + 「你的總計是:」 + purchase1.getSaleAmount); –

+0

您需要像使用getSaleTax()而不是getSaleTax一樣使用它。您試圖將該函數用作錯誤的變量。 –

+0

您正在將一種方法看作是一種屬性。要調用一個方法,你必須使用括號'()' – Joni

0

發票的定義,saleAmount和saleTax爲public static打敗了面向對象程序設計的目的。

它們應該是私有實例變量,您應該通過調用您創建的實例上的get和set方法來訪問和修改它們(purchase1)。否則,定義這些setter和getters是沒有意義的,創建這個實例是沒有意義的,你永遠不會使用它。

+0

謝謝伊蘭,我試圖使用這個實例,但我很漂亮,並且不是100%如何。現在好,非常感謝你! :d –

0

1)將您靜態類變量爲實例變量。

private int invoice; 
private double saleAmount; 
private double saleTax; 

2)然後使用您的Purchase對象的getter/setter

purchase1.setSaleAmount(); 
purchase1.getSaleAmount(); 

注:靜態字段不識別對象實例。如果想要有多個Purchase對象,您的變量應該是實例變量而不是類(靜態)變量。