Java 为什么我的独立随机对象被赋予相同的值?

Java 为什么我的独立随机对象被赋予相同的值?,java,Java,抱歉发了这么长的邮件。我怀疑我的问题很容易解决,但是(我认为)我必须发布的代码很长,所以我道歉。如果有什么方法可以让我在不知道的情况下缩短这篇文章的篇幅,我会很感激你的反馈 我正在开发一个Java程序,该程序模拟一个虚构的带有停车标志的四向交叉口(第一街,北/南,主街,东/西)。我想让它创建Car类的4个对象,使用Math.random()将它们的3个属性(1.它是否存在?2.它的行驶方向是什么?3.它到达十字路口的顺序是什么?)随机化,然后打印它们 我正是这样做的-实例化4辆车(car1、ca

抱歉发了这么长的邮件。我怀疑我的问题很容易解决,但是(我认为)我必须发布的代码很长,所以我道歉。如果有什么方法可以让我在不知道的情况下缩短这篇文章的篇幅,我会很感激你的反馈

我正在开发一个Java程序,该程序模拟一个虚构的带有停车标志的四向交叉口(第一街,北/南,主街,东/西)。我想让它创建Car类的4个对象,使用Math.random()将它们的3个属性(1.它是否存在?2.它的行驶方向是什么?3.它到达十字路口的顺序是什么?)随机化,然后打印它们

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

    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();
        
    }
    
}
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.");
    }  
    
  }    
    
}
车辆1:此车辆不存在

车2:这辆车存在!它在1号向南行驶。它是最先到达的

汽车3:这辆汽车存在!它在主街西行。它是第二个到达的

车辆4:此车辆不存在

相反,它的运行方式与此类似:

车1:这辆车存在!它在主街西行。它是第二个到达的

车2:这辆车存在!它在主街西行。它是第二个到达的

汽车3:这辆汽车存在!它在主街西行。它是第二个到达的

汽车4:这辆汽车存在!它在主街西行。它是第二个到达的

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

CarDemo类,其中包含主方法:

    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();
        
    }
    
}
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.");
    }  
    
  }    
    
}
包含randomizeAll和printState方法的Car类:

    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();
        
    }
    
}
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.");
    }  
    
  }    
    
}

有人能告诉我为什么每个汽车对象共享相同的值吗?我一直盯着这个,在网上搜索了几个小时,什么都没有出现在我面前。非常感谢您的任何意见。如果我的代码在某些方面凌乱或冗余,我深表歉意,因为我正在上编程课的第一学期,所以我是编程高手的缩影。非常感谢。

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

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

您使用的是静态字段。根据定义,静态字段在类的所有实例之间共享。您需要将其设置为非静态。后续操作应为
private int-order因为订单是特定于护理实例的。它应该保持
私有静态final int ORDERMAX=4
因为ODERMAX值与
Car
类关联,并且不会因单个实例而改变。你们两个都很棒,非常感谢。我想这可能是我忽略了的简单问题。@Vinny请为您自己的问题写一个答案,并最终接受它,以标记已解决的页面并为后代提供资源。您使用的是静态字段。根据定义,静态字段在类的所有实例之间共享。您需要将其设置为非静态。后续操作应为
private int-order因为订单是特定于护理实例的。它应该保持
私有静态final int ORDERMAX=4
因为ODERMAX值与
Car
类关联,并且不会因单个实例而改变。你们两个都很棒,非常感谢。我想这可能是我忽略的一件简单的事情。@Vinny请为你自己的问题写一个答案,并最终接受它,以标记已解决的页面并为后代提供资源。