[英]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
否則將設置相同的默認值。
一些提示:
&&
代替&
short。 在99%的用法中, if
子句會更好(隨着時間的流逝,您會知道為什么)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.