2017-02-23 40 views
0

我是新來的java,非常感謝。如何更改另一個java類的變量值?

我有幾個類。我想將來自我的GUI類的用戶輸入傳遞給我的Basket類,它將更新存儲在變量中的值。以下是我目前有的,但它似乎並沒有更新變量。

一級 - GUI類:我想通過「席位」到籃下類

Basket b; 
b = new Basket(); 
String seats = JOptionPane.showInputDialog("Enter the number of seats to book"); 
try { 
    int currentValue = Integer.parseInt(seats); 
    int newValue = currentValue;  
    b.setSeatsBooked(newValue); 
    //some code emitted 
} 

二等 - 籃類,我想「席位」傳遞到這個類和存儲在實例變量中。

public class Basket { 
    private int seatsBooked; 
    public int getSeatsBooked() { 
     return seatsBooked; 
    } 
    public void setSeatsBooked(int seatsBooked) { 
     this.seatsBooked = seatsBooked; 
    } 
} 

這是另一個類在那裏我看到的結果是0:

Basket b; 
b = new Basket(); 
lblMovieSelection = new JLabel("You have booked:" + b.getSeatsBooked()); 
+1

你確定這個值沒有被更新嗎? –

+0

你正在使用的輸入是什麼輸出...... ???? –

+0

@WasiAhmad請參閱我更新的代碼作爲即時通訊,試圖看到該變量在另一個類,它顯示0. 0 – pogba123

回答

2

您需要傳遞已存儲值的類對象。如果您創建了一個新的類實例,那麼您如何預期該對象將包含該值?

在以下兩種情況下,

Basket b; 
b = new Basket(); 
String seats = JOptionPane.showInputDialog("Enter the number of seats to book"); 
try { 
    int currentValue = Integer.parseInt(seats); 
    int newValue = currentValue;  
    b.setSeatsBooked(newValue); 
    //some code emitted 
} 

Basket b; 
b = new Basket(); 
lblMovieSelection = new JLabel("You have booked:" + b.getSeatsBooked()); 

Basket類的對象b在兩個塊中一樣嗎?答案是否定的。因此,當您在第二個代碼塊中從新創建的對象b中調用b.getSeatsBooked(),Basket時,您將獲得零值。

有兩種方法可以解決這個問題。

  1. 最好的解決辦法是將類對象(作爲參數)傳遞給您調用getSeatsBooked()方法的第三個類。

:假設你的另一個類是X,有一個叫method()功能。然後,您可以將Basket類對象作爲參數傳遞給您可以訪問它以獲取更新值的函數。代碼可能如下所示。

class X{ 
    // other code 
    public void method(Basket b){ 
     lblMovieSelection = new JLabel("You have booked:" + b.getSeatsBooked()); 
    } 
} 
  • 如果要共享在所有的類實例變量seatsBooked,可以聲明變量爲靜態。 (我想這不是你要找的)
  • +0

    好的,我認爲第一個解決方案更好。但我堅持如何將變量傳遞給我的第三課。你有任何它如何工作的例子,因爲我無法在互聯網上找到任何。 – pogba123

    +0

    看到我更新的答案。 –

    -1

    嘗試使靜態變量,對於這樣的一個例子是:

    public static int testInt = 0; 
    

    這就是你在其他課程中調用此功能取決於您,可以使用2個選項。

    //NOT CLASS NAME IS FOR YOUR ACTUAL CLASS NAME. 
    ClassName varName = new ClassName(); 
    varname.testInt; 
    
    //OR YOU CAN USE 
    ClassName.testInt; 
    
    +1

    變量不必是靜態的,才能傳遞給另一個對象 –

    +0

    這就是你要去的部分downvote我.. ..? – DrBrad

    +0

    他正在使用公共setter並將捕獲的整數傳遞給它。這個答案是完全錯誤的。 –

    3

    這是錯誤行爲的原因:

    Basket b; 
    b = new Basket(); 
    
    lblMovieSelection = new JLabel("You have booked:" + b.getSeatsBooked()); 
    

    要創建一個新的對象!因此默認值爲零

    +0

    是的,我剛剛意識到。那麼我會如何解決這個問題? – pogba123

    +0

    您需要將該值作爲參數傳遞給第三個類,,, –

    +0

    您也可以將引用變量'b'傳遞給第三個類,特別是如果您要將其屬性/方法用於其他任何其他類。 –

    相關問題