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