很抱歉寄了这么长的邮筒。我怀疑我的问题很容易解决,但是(我想)我必须发布的代码很长,所以我很抱歉。如果我有办法在没有意识到的情况下缩短这篇文章,我将非常感谢你的反馈。
我正在编写一个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类,它包含主要方法:
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方法:
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.");
}
}
}有人能告诉我为什么每个汽车对象共享相同的值吗?我一直盯着这个,在网上研究了好几个小时,什么也没出现在我身上。任何投入都是非常感谢的。我很抱歉,如果我的代码在某些地方是杂乱无章或多余的,我是在我的第一个学期的编程课程,所以我是一个编程新手的缩影。提前谢谢。
发布于 2020-07-23 01:53:15
我在"car“类中的属性被声明为静态属性,这意味着它们在类的所有实例/对象之间共享。删除静态关键字修复了问题。
https://stackoverflow.com/questions/63028757
复制相似问题