Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在对象数组中正确更新对象变量_Java_Arrays_Object_Variables - Fatal编程技术网

Java 如何在对象数组中正确更新对象变量

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

每次程序循环时,它都会将现金变量重置回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 //
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);
}