簡體   English   中英

Java:參數的值不變

[英]Java: value of parameter doesn't change

我剛開始使用Java,為了學習它,我試圖在BlueJ中編寫Tamagotchi。 這是代碼的一部分:

public class Tamagotchi
{
    private int hunger;
    private int mood;
    private int fatigue;
    private int hBorder;
    private int mBorder;
    private int fBorder;
    private String generalCondition;

    public Tamagotchi(int hungerBorder, int moodBorder, int fatigueBorder)
    {
        // Instanzvariable initialisieren
        hunger = 0;
        mood = 0;
        fatigue = 0;
        hBorder = hungerBorder;
        mBorder = moodBorder;
        fBorder = fatigueBorder;
        generalCondition = "indifferent";
    }

    public void setGeneralCondition(){
        if (fatigue > fBorder){
            generalCondition = "tired";
        }
            if ((fatigue < fBorder) & (hunger > hBorder)){
                generalCondition = "hungry";
            }
                if ((mood > mBorder) & (hunger < hBorder) &
                (fatigue < fBorder)){
                    generalCondition = "happy";
                }
        else {
            generalCondition = "indifferent";
        }
    }

    public void play()
    {
        if (hunger > hBorder){hunger += 2; mood += 2; fatigue += 3;
        }
        else {}
        setGeneralCondition();
    }

    public void eat(){
        if (fatigue > fBorder){hunger -= 2; fatigue += 2;
        }
        else{}
        setGeneralCondition();
    }

   public void sleep(){
        if (hunger > hBorder){hunger += 1; mood -= 1; fatigue = 0;
        }
        else{hunger += 1; mood += 1; fatigue = 0;
        }
        setGeneralCondition();
    }

    public void pet(){
        hunger += 1;
        mood += 2;
        setGeneralCondition();
    }

    public String getGentralCondition(){
        return generalCondition;
    }

    public void makeHappy(){
        eat();
        sleep();
    }
}

我的問題是,當我使用任何一種方法時, generalCondition都不會改變。 我認為setGeneralCondition方法有問題,但是我不知道問題出在哪里。 有人可以幫助:/?

提前THX。 編輯:我現在發布孔代碼。 就像我在評論中說的那樣:每當我使用eat(),play()之類的方法時,我都希望generalCondition發生變化... setGeneralCondition方法應該檢查飢餓情緒或疲勞值之一是否通過某個邊界,並且更改條件(疲勞,飢餓或快樂)。 但是無論何時我使用其他方法之一, generalCondition都不會改變。

編輯:我對您的代碼進行了進一步的編輯,並提出了一個運行您的代碼並更改generalCondition的小主程序! 簽出並運行以供自己查看。

我的直覺告訴我,這個類Tamagotchi是一個類文件或對象Tamagotchi,將由駐留在另一個文件中某個地方的main方法使用。 如果真是這樣,我相信這是一個簡單的解決方法,您需要做的就是添加this. 在很多地方。 我已經開始為您做下面的工作。 試試這個,讓我知道這是否有效!

public class Tamagotchi{
    private int hunger;
    private int mood;
    private int fatigue;
    private int hungerBorder;
    private int moodBorder;
    private int fatigueBorder;
    private String generalCondition;

    public Tamagotchi(int hungerBorder, int moodBorder, int fatigueBorder)
    {
        // Instanzvariable initialisieren
        this.hunger = 30;
        this.mood = 30;
        this.fatigue = 30;
        this.hungerBorder = hungerBorder;
        this.moodBorder = moodBorder;
        this.fatigueBorder = fatigueBorder;
        this.generalCondition = "indifferent";
    }

    public void setGeneralCondition(){
        if (fatigue > fatigueBorder){
            this.generalCondition = "tired";
            return;
        }
        if ((fatigue < fatigueBorder) && (hunger > hungerBorder)){
            this.generalCondition = "hungry";
            return;
        }
        if ((mood > moodBorder) && (hunger < hungerBorder) && (fatigue < fatigueBorder)){
            this.generalCondition = "happy";
            return;
        } else {
            this.generalCondition = "indifferent";
        }
    }

    public String getGeneralCondition(){
        return generalCondition;
    }

    public void play()
    {
        if (!generalCondition.equalsIgnoreCase("hungry")){
            hunger += 2; mood += 2; fatigue += 3;
        } else {
        }
        setGeneralCondition();
    }

    public void eat(){
        if (fatigue > fatigueBorder){
            hunger -= 2; fatigue += 2;
        } else{
        }
        setGeneralCondition();
    }

    public void sleep(){
        if (hunger > hungerBorder){
            hunger += 1; mood -= 1; fatigue = 0;
        } else{
            hunger += 1; mood += 1; fatigue = 0;
        }
        setGeneralCondition();
    }

    public void pet(){
        hunger += 1;
        mood += 2;
        setGeneralCondition();
    }

    public void makeHappy(){
        eat();
        sleep();
    }
}

這是我編寫的用於測試上面代碼的一些主要方法。

public class Test {
    public static void main(String[] args) {
        Tamagotchi test = new Tamagotchi(10, 10, 10);
        test.play();
        test.makeHappy();

        System.out.println(test.getGeneralCondition());
    }
}

輸出:

hungry

希望這可以幫助!

此處的PS是基本編碼樣式的鏈接。 使用這些樣式練習編碼,因為它可以使您自己的代碼更易於他人閱讀,看起來更簡潔,並且更容易查看和修復錯誤! 編碼風格指南

您發布的代碼有幾個主要問題。

正如slough所述,您需要在Tamagotchi構造函數中將“ this”添加到hungerBorder,moodBorder和疲乏Border中。 您當前正在執行的操作是將參數參數hungerBorder,moodBorder和疲倦邊框設置為其自身。 現在,在變量前面添加“ this”時,無論當前使用什么局部變量,都在引用類變量。

此外,不應將字符串與==和!=進行比較。 僅當比較中的兩個字符串都指向相同的內部引用時,此方法才起作用。 相反,您應該使用.equals(),其調用方式如下:

String testString = "test";
String otherString = "other";
if (testString.equals(otherString)) {
    System.out.println("equal");
} else {
    System.out.println("not equal");
}

從編譯的角度來看,這是工作代碼。 您遇到的問題可能是您實現的數據或邏輯。 要更改generalCondition您需要條件((mood > mBorder) & (hunger < hBorder) & (fatigue < fBorder))返回true否則將設置相同的默認值。

一些提示:

  1. 很可能您沒有調試應用程序。 特別是在您首次使用Programming / java時,請開始執行此操作。
  2. 使用&&代替& short。 在99%的用法中, if子句會更好(隨着時間的流逝,您會知道為什么)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM