首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的独立随机对象被分配相同的值?

为什么我的独立随机对象被分配相同的值?
EN

Stack Overflow用户
提问于 2020-07-22 07:12:59
回答 1查看 53关注 0票数 1

很抱歉寄了这么长的邮筒。我怀疑我的问题很容易解决,但是(我想)我必须发布的代码很长,所以我很抱歉。如果我有办法在没有意识到的情况下缩短这篇文章,我将非常感谢你的反馈。

我正在编写一个Java程序,它模拟一个虚构的带有停车标志的4路交叉口(第一个St,它运行北/南,主St,它东/西运行)。我想要它创建汽车类的4个对象,随机化它们的3个属性(1.它是否存在? 2.它是朝什么方向移动的? 3.到达交叉口的顺序是什么?)使用Math.random(),并打印它们。

我就是这样做的--实例化了4辆汽车(car1,car2,car3,car4),用randomizeAll方法随机化了它们的属性,然后使用printState方法打印它们的属性。我希望它能像这样运行:

Car 1:这辆车不存在。

汽车2:这辆车存在!它是在第一街南行的,它是第一个到达的。

汽车3:这辆车存在!它正向西行驶,沿主圣。它到达第二。

汽车4:这辆车不存在。

相反,它的运行方式类似于这一点的一些变化:

汽车1:这辆车存在!它正向西行驶,沿主圣。它到达第二。

汽车2:这辆车存在!它正向西行驶,沿主圣。它到达第二。

汽车3:这辆车存在!它正向西行驶,沿主圣。它到达第二。

汽车4:这辆车存在!它正向西行驶,沿主圣。它到达第二。

所有四辆车都有相同的精确属性(尽管每次我重新运行程序时,它们都会改变)。我不知道是什么导致了这一切。只需要看两件事,我在CarDemo类中的主要方法和Car类本身。我的代码如下:

CarDemo类,它包含主要方法:

代码语言:javascript
复制
    public class CarDemo {

      public static void main(String[] args) {
       
        Car car1 = new Car();
        Car car2 = new Car();
        Car car3 = new Car();
        Car car4 = new Car();
        
        car1.randomizeAll();
        car2.randomizeAll();
        car3.randomizeAll();
        car4.randomizeAll();
        
        System.out.println("Car 1:");
        car1.printState();
        
        System.out.println("Car 2:");
        car2.printState();
        
        System.out.println("Car 3:");
        car3.printState();
        
        System.out.println("Car 4:");
        car4.printState();
        
    }
    
}

Car类,它包含randomizeAll和printState方法:

代码语言:javascript
复制
public class Car {
    
    private static int existence; 
    private static final int EXISTENCEMAX = 1;
    private static final int EXISTENCEMIN = 0;

    private static int direction;
    private static final int DIRECTIONMAX = 4;
    private static final int DIRECTIONMIN = 1;
    
    private static int order;
    private static final int ORDERMAX = 4;
    private static final int ORDERMIN = 1;

    
    public void randomizeAll() {
        existence = (int)(Math.random() * (EXISTENCEMAX - EXISTENCEMIN + 1) + EXISTENCEMIN);
        direction = (int)(Math.random() * (DIRECTIONMAX - DIRECTIONMIN + 1) + DIRECTIONMIN);
        order = (int)(Math.random() * (ORDERMAX - ORDERMIN + 1) + ORDERMIN);
    
}
        
    public void printState(){

    boolean exist;
    exist = existence == 1;
    if (exist) {
        System.out.println("This car exists!");
        switch(direction){
            case 1:
                System.out.println("It is traveling northbound on 1st St.");
                break;
            case 2:
                System.out.println("It is traveling southbound on 1st St.");
                break;
            case 3:
                System.out.println("It is traveling eastbound on Main St.");
                break;
            case 4:
                System.out.println("It is traveling westbound on Main St.");
                break;
        }
        switch(order){
            case 1:
                System.out.println("It arrived first.");
                break;
            case 2:
                System.out.println("It arrived second.");
                break;
            case 3:
                System.out.println("It has arrived third.");
                break;
            case 4:
                System.out.println("It arrived fourth.");
                break;
        }           
    } else {
        System.out.println("This car does not exist.");
    }  
    
  }    
    
}

有人能告诉我为什么每个汽车对象共享相同的值吗?我一直盯着这个,在网上研究了好几个小时,什么也没出现在我身上。任何投入都是非常感谢的。我很抱歉,如果我的代码在某些地方是杂乱无章或多余的,我是在我的第一个学期的编程课程,所以我是一个编程新手的缩影。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 01:53:15

我在"car“类中的属性被声明为静态属性,这意味着它们在类的所有实例/对象之间共享。删除静态关键字修复了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63028757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档