我刚开始使用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
就不会改变。
答案 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
,否则将设置相同的默认值。
一些提示:
&&
而不是&
简称。在if
子句中,使用99%会更好(随着时间的流逝,您会知道为什么)