所以我一直在讨论这个项目任务,我不知道如何完成它。我已经完成了80%,但最后一部分我甚至不知道一般的想法。问题是
“然后编写一个方法randomVehicle
随机生成Vehicle
引用,构建汽车和卡车的概率相等,随机位置。调用它10次并绘制所有这些引用。”
我有一个主方法,一个抽象超类Vehicle
和两个Car和Truck的子类。我知道如何使用循环进行概率但我不知道如何采用该概率答案(1将是卡车,2将是汽车)并使用它来参考汽车和卡车的预定义形状。
换句话说,我如何创建程序,在我编译并运行后,将这些随机决定的汽车和卡车显示出来。
很抱歉,如果问题令人困惑,但我只是在学习抽象课程。
到目前为止,这是代码:
主要方法
import java.awt.*;
@SuppressWarnings("serial")
class drawTest extends Canvas{
public drawTest(){
setSize(800, 600);
setBackground(Color.white);
}
public static void main(String[] argS){
drawTest canvas = new drawTest();
Frame aFrame = new Frame();
aFrame.setSize(800, 600);
aFrame.add(canvas);
aFrame.setVisible(true);
}
public void paint(Graphics canvas){
Vehicle car = new CarTest();
car.paint(canvas);
paint(canvas);
}
}
CarTest
班级
import java.awt.*;
@SuppressWarnings("serial")
public class CarTest extends Vehicle{
public void paint(Graphics canvas){
canvas.drawOval(10+super.x, 30+super.y, 15, 15); // Front Wheel
canvas.drawOval(45+super.x, 30+super.y, 15, 15); // Back Wheel
canvas.drawRect(5+super.x, 10+super.y, 60, 20); // Bottom of Car
canvas.drawRect(15+super.x, 5+super.y, 40, 5); // Bottom of Car
}
}
TructTest
班级
import java.awt.*;
@SuppressWarnings("serial")
public class TruckTest extends Vehicle{
public void paint(Graphics canvas){
canvas.drawRect(30+super.x, 5+super.y, 100, 30); // Cargo Section
canvas.drawOval(30+super.x, 35+super.y, 15, 15); // Wheel Under Cargo
canvas.drawOval(45+super.x, 35+super.y, 15, 15); // Wheel Under Cargo
canvas.drawOval(100+super.x, 35+super.y, 15, 15); // Wheel Under Cargo
canvas.drawOval(115+super.x, 35+super.y, 15, 15); // Wheel Under Cargo
canvas.drawRect(5+super.x, 15+super.y, 20, 20); // Driver Section
canvas.drawOval(5+super.x, 35+super.y, 15, 15); // Wheel Under Driver
}
}
摘要Vehicle
类
import javax.swing.*;
import java.awt.*;
@SuppressWarnings("serial")
public abstract class Vehicle extends JApplet{
public Vehicle(){
// Generates Random position
x = (int)(Math.random()*700);
y = (int)(Math.random()*550);
}
public abstract void paint(Graphics canvas);
public void randomVehicle(){
int carTruckChoice = (int)(1+Math.random()*2);
if (carTruckChoice == 1){
// don't know if this is the right implementation
}
else if (carTruckChoice == 2){
// don't know if this is the right implementation
}
}
public int x;
public int y;
}
答案 0 :(得分:2)
伪代码让你入门:
randomVehicle =
randomPosition = randomPosition()
randomNumber = randomOneOrTwo()
if (randomNumber is 1)
vehicle = new Car()
else
vehicle = new Truck()
vehicle.setPosition(randomPosition)
return vehicle
for 1..10
randomVehicle().draw()
你有一个抽象类Vehicle,以及两个具体的子类Car and Truck。
答案 1 :(得分:2)
一般来说,StackOverflow不接受家庭作业问题,但我会做一个例外,因为这基本上是一个成语,因为我真诚地认为你已经尝试过这个。
这是一种生成一个随机载体的方法:
public static Vehicle randomVehicle(){
return (Math.random() < .5) ? new CarTest() : new TruckTest();
}
<强>解释强>
Math.random()
生成0到1之间的数字。
括号中的表达式测试是否小于一半;即它在true
和false
之间随机选择。
问号是Java ternary operator。如果括号中的表达式返回true
,则vehicle
将初始化为第一个操作数,即Car()
的新实例,反之亦然。
答案 2 :(得分:2)
public void randomVehicle() {
Random random = new Random();
Vehicle vehicle;
for(int i = 0; i<10; i++) {
int randomChoice = random.nextInt(2);
if(randomChoice == 1){
vehicle = new Car();
} else {
vehicle = new Truck();
}
//draw vehicle here .. vehicle.draw();
}
}
答案 3 :(得分:0)
如果要生成A子类的随机实例,则需要2件事。
1)包含所有“n”个实例类的数据结构
2)在从0到n-1的任何数字上着陆的相等概率的随机分布。
可以使用包含类的java(列表,数组或枚举)中的任何线性数据结构来实现数据结构。然后,通过迭代100个随机数生成,您可以使用反射通过直接从数组(或枚举或列表等)基于索引访问类来生成类的实例。
此解决方案的优点在于,当您添加新的汽车类型时,您只需要将类名添加到数组结构中......对底层实现没有其他更改。