我的任务:
Stix游戏 - 类似于前一段时间在“Survivor,Thailand”上玩的游戏 - 在简化版本中看起来像这样:
它由两名球员(在Survivor中有两个以上,但在这里我们只处理两个)。 桌子上放着许多木棍(比如火柴)。 第一个玩家需要1,2或3支,只要桌子上有很多人。 然后第二个玩家需要1,2或3支(如果可能的话),依此类推。 拿最后一根棍子的人输了。
这是我的班级:
public class StixBoard
{
public int number;
public StixBoard(int number)
{
number = number;
}
public int getNumStix()
{
return number;
}
public boolean takeStix(int number)
{
int take = 1;
while(take <= getNumStix())
{
takeStix(take);
take++;
}
if(number >= 1 && number <= 3)
{
number = number - this.number;
System.out.println("Number of sticks on board:" + number);
return(true);
}
else
System.out.println("Illegeal Move");
return(false);
}
public boolean isGameOver()
{
if(number >=1)
{
return(true);
}
else
return false;
}
public String toString()
{
return(getNumStix() + " Stix Remaining.");
}
}
This is my tester:
public class StixGame
{
public static void main(String[] args)
{
StixBoard game1 = new StixBoard(6);
System.out.println(game1.getNumStix());
}
}
Can someone tell my why game1 only returns 0?
*UPDATE*
Now that it constantly displays:
6
Illegeal Move
false
6
I've been playing around with it but can't figure out why =/
Program now looks like this:
public class StixBoard
{
public int number;
public StixBoard(int number)
{
this.number = number;
}
public int getNumStix()
{
return number;
}
public boolean takeStix(int number)
{
int take = 0;
while(take != number && number <= 3 && number > 0)
{
number = this.number - take;
take++;
}
if(this.number >= 1 && this.number <= 3)
{
number = number - this.number;
System.out.println("Number of sticks on board:" + number);
return(true);
}
else
System.out.println("Illegeal Move");
return(false);
}
public boolean isGameOver()
{
if(number >=1)
{
return(true);
}
else
return false;
}
public String toString()
{
return(getNumStix() + " Stix Remaining.");
}
}
这是我的测试员:
public class StixGame
{
public static void main(String[] args)
{
StixBoard game1 = new StixBoard(6);
System.out.println(game1.getNumStix());
System.out.println(game1.takeStix(3));
System.out.println(game1.getNumStix());
}
}
答案 0 :(得分:6)
在构造函数中使用number = number
时,它实际上使用了输入中的变量,因此您基本上将其重置为自身。然后当构造函数完成时,它超出范围,因此变量消失。您需要做的是重命名函数参数或使用this.number = number
。
答案 1 :(得分:0)
您必须使用以下内容初始化您的课程:
public StixBoard(int number)
{
this.number = number;
}
避免在构造函数
中对变量使用相同的名称答案 2 :(得分:0)
您的构造函数将number
参数设置为自身:
public StixBoard(int number)
{
number = number;
}
this.number
的默认值仍为0
。您需要使用this.
前缀将参数值分配给实例变量,以避免名称冲突:
this.number = number;
答案 3 :(得分:0)
问题是你的构造函数:
public StixBoard(int number) {
number = number;
}
替换为:
public StixBoard(int number) {
this.number = number;
}
如您所见,参数编号会遮挡您的字段编号。因此,asignment将参数编号分配给自身,而不是分配给您的类字段。要删除阴影,必须使用关键字this
来引用当前线程中执行的对象字段。