Java 如何在对象数组中正确更新对象变量
每次程序循环时,它都会将现金变量重置回500。我最初如何将其设置为500,减去赌注,然后让它在下一次迭代中记住该值?例如,我的输出:Java 如何在对象数组中正确更新对象变量,java,arrays,object,variables,Java,Arrays,Object,Variables,每次程序循环时,它都会将现金变量重置回500。我最初如何将其设置为500,减去赌注,然后让它在下一次迭代中记住该值?例如,我的输出: Computer 1 bets: $50 I now have: $450 // Computer 2 bets: $50 I now have: $450 //these are right Computer 3 bets: $50 I now have: $450 // Computer 1 bets: $50 I now have: $450 // Com
Computer 1 bets: $50 I now have: $450 //
Computer 2 bets: $50 I now have: $450 //these are right
Computer 3 bets: $50 I now have: $450 //
Computer 1 bets: $50 I now have: $450 //
Computer 2 bets: $50 I now have: $450 //now should have $400
Computer 3 bets: $50 I now have: $450 //
Computer 1 bets: $50 I now have: $450 //
Computer 2 bets: $50 I now have: $450 //now should have $350
Computer 3 bets: $50 I now have: $450 //
我的代码:
public class Computer {
private int id;
private int bet;
private int cash = 500;
private static Computer[] c;
public static void create(int numComps) {
c = new Computer[numComps];
for (int i = 0; i < numComps; i++) {
c[i] = new Computer();
c[i].id = i + 1;
c[i].bet = 50;
c[i].cash -= c[i].bet;
c[i].display();
}
}
private void display() {
String name = "Computer " + id;
System.out.println(name + " bets: $" + bet + " I now have: $" + cash);
}
public static void main(String[] args) {
int i = 0;
do {
create(3);
System.out.println();
i++;
} while (i < 3);
}
}
公共类计算机{
私有int-id;
私人赌注;
私人int现金=500;
专用静态计算机[]c;
公共静态void创建(int numComps){
c=新计算机[numComps];
对于(int i=0;i
在循环中,您正在调用create
,但从逻辑上讲,create
只应调用一次,因为它会创建新的计算机对象。而且,create
并没有按照它所说的去做。它不仅创建计算机对象,还让它们下注并显示bet
应该是一个单独的方法,create
根本不应该调用display
:
public static void create(int numComps) {
c = new Computer[numComps];
for (int i = 0; i < numComps; i++) {
c[i] = new Computer();
c[i].id = i + 1;
c[i].bet = 50;
}
}
public void bet() {
cash -= bet;
}
tl;dr调用
创建(3)代码>每次调用时都实例化三台新计算机
您需要开始遵循软件设计的关注点分离规则。代码中的每个方法都应该有一个作业。create
方法承担了太多的责任
这里最大的问题是你想出的静态方法。这使得事情变得更加复杂
最初如何将[现金变量]设置为500
您需要在构造函数中初始化该私有字段
减去赌注
您需要向类添加公共方法,以允许其他代码更改其私有字段
然后让它在下一次迭代中记住这个值
你已经处理好了。在您编写时,计算机
类可以“记住”私有字段现金
的值。问题在于,您只是在while循环的每次迭代中意外地实例化了三台新的计算机
public static void main(String[] args) {
create(3);
int i = 0;
do {
for (int j = 0 ; j < 3 ; j++) {
c[j].bet();
c[j].display();
}
System.out.println();
i++;
} while (i < 3);
}