2012-01-02 64 views
0

我有問題如何更改給定類的布爾值,以便一旦它再次遇到它有最後一次設置的值。這是我的課存儲布爾值

public class Sandwich { 
    private String type; 
    private double price; 
    private String ing; 
    public boolean owned; 

    Sandwich (String t, double p, boolean o){ 
     type = t; 
     price = p; 
     owned = o; 
    } 

    public boolean getO(){ 
     return this.owned; 
    } 

    public void setO(boolean o){ 
     this.owned = o; 
    } 

    public String getType(){ 
     return this.type; 
    } 
} 

,並在那裏訪問,應該改變的地方:

public void purchase(Sandwich s) { 
    boolean owned = s.owned; 

    //I tried also with accessor and mutator here but then changed to public 
    String type = s.getType(); 
    if (owned == false) { 
     if (money <= 0){ 
      System.out.println("Worker " + this.name + " can not buy " + type + " sandwich, cuz he doesn't have enough money"); 
     } else { 
      System.out.println("Worker " + this.name + " can buy " + type + " sandwich"); 
      this.money = money; 
      owned = true; 

      //this is the place where it is supposed to change value to true (sandwich was bought and has owner now 
      s.owned = owned; 
     } 
    } else if (owned == true) { 
     System.out.println("Worker " + this.name + " can not buy " + type + " sandwich cuz it was bought"); 
     System.out.println("Test"); 
    } 
} 

問題是,雖然給定的三明治是在過去購買了國有值設置爲每次假我嘗試運行此代碼。我需要三明治來記錄擁有的改變後的價值,以便下次我運行該條件時將擁有== true。它怎麼可能

+1

所以你需要它堅持之間的應用程序的運行?或者當應用程序正在運行? – Joe 2012-01-02 19:37:18

+1

請使用'if(擁有)'和'(擁有)',注意在這種情況下,執行與'!owned'測試相反的操作是多餘的,如果它不是'!owned',它將總是'擁有' 。 – 2012-01-02 19:38:08

+1

無論你遇到什麼問題,它與'Sandwitch'類中的布爾值無關。如果您要自行測試功能,您會發現設置它並閱讀它可以正常工作。你在代碼中做了一些你沒有發佈的代碼,將'擁有'設置爲'false' – 2012-01-02 19:38:19

回答

3

似乎是在你的設計中的缺陷所取代。您需要在Worker和sandwish類型之間建立關係。

你可以做的只是在工人類中實施購買的sandwish類型列表,並在工人購買sandwish時與其進行比較。

或者如果你想,你可以有一個布爾值的所有sandwish類型的散列表,表明類型是否已經被購買或沒有。

+0

您每次運行代碼時都會創建一個新的三明治實例。這不是同一個對象。 – ryandlf 2012-01-02 20:11:39

+0

如何更改我的代碼,以便它是相同的對象? – aretai 2012-01-02 20:50:32

+0

此列表是否應在採購類中或代碼中的其他位置創建?謝謝 – aretai 2012-01-02 21:10:05

2

你創建了get和set例程,然後沒有使用它們。我會將代碼更改爲此。

public void purchase(Sandwich s){ 
      String type = s.getType(); 
      if (!(s.getO())){ 
       if (money <= 0){ 
        System.out.println("Worker " + this.name + " can not buy " + type + " sandwich, cuz he doesn't have eno 

ugh money"); 
       } else { 
        System.out.println("Worker " + this.name + " can buy " + type + " sandwich"); 
        this.money = money; 
        s.setO(true); 
       } 
      } else { 
       System.out.println("Worker " + this.name + " can not buy " + type + " sandwich cuz it was bought"); 
       System.out.println("Test"); 
      } 
    } 
+0

雖然這是正確的,但它不會改變一件事情。問題不在於班級或其「擁有」領域。 – 2012-01-02 19:40:42

+0

@布萊恩羅奇 - 第二個想法,你更可能是正確的。問題在於別的地方。森林樹木,哎喲! – 2012-01-02 19:43:16

+0

我仍然建議使用setter/getter,並使該字段本身是私人的。爲什麼有一個簡單的二傳手和吸氣劑的公共場地呢? +1從我:) – Thomas 2012-01-02 19:57:29

1

只是刪除

boolean owned = s.owned; 

,並使用s.getO(),你必須使用owned

例如

if (owned == false){ 

可以

if (!s.getO()){ 

,並使用setter方法s.setO(true/false)去改變它。

例如

owned = true; 
s.owned = owned; 

可以通過

s.setO(true); 
+0

雖然這是正確的,但它不會改變一件事情。問題不在於班級或其「擁有」領域。 – 2012-01-02 19:40:57

+0

正確。我只是嘗試了不同的版本(也與getter和setter),但它不起作用,所以問題似乎在某處eleky – aretai 2012-01-02 21:05:38

+0

請按照人們所說的並相應地更新您的文章。 – 2012-01-02 21:37:59