Java:参数的值不变

时间:2019-08-07 18:17:56

标签: java

我刚开始使用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就不会改变。

3 个答案:

答案 0 :(得分:0)

编辑:我对您的代码进行了进一步的编辑,并提出了一个运行您的代码并更改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

希望这会有所帮助!

P.S。这是基本编码样式的链接。使用这些样式练习编码,因为它可以使您自己的代码更易于他人阅读,看起来更简洁,并且更容易查看和修复错误! Coding Style Guide

答案 1 :(得分:0)

您发布的代码几乎没有主要问题。

正如sloughy所述,您需要在Tamagotchi构造函数中的“ hungerBorder”,“ moodBorder”和“ atigueBorder”中添加“ this”。您当前正在执行的操作是将参数参数hungerBorder,moodBorder和疲倦边框设置为其自身。现在,在变量前面添加“ this”时,无论您当前正在使用什么局部变量,都在引用类变量。

此外,您不应该将String与==和!=进行比较。仅当比较中的两个字符串都指向相同的内部引用时,此方法才起作用。相反,您应该使用.equals(),其调用方式如下:

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

答案 2 :(得分:0)

这是从编译角度来看的有效代码。您遇到的问题可能是您实现的数据或逻辑。要更改generalCondition,您需要满足以下条件 ((mood > mBorder) & (hunger < hBorder) & (fatigue < fBorder))返回true,否则将设置相同的默认值。

一些提示:

  1. 很可能您没有调试应用程序。尤其是在您首次使用Programming / java时,请开始执行此操作。
  2. 使用&&而不是&简称。在if子句中,使用99%会更好(随着时间的流逝,您会知道为什么)