Java 如何以最优雅的方式找到价值最大的对象?
因此,我的任务是用Java编写一个幸运赛车游戏,严格遵循OOP的约束,编写一个可维护/优雅的代码。共有5辆车(物体),每轮速度随机(共10轮),10轮后,我需要找出哪辆车(物体)行驶的总距离最大,即哪辆车赢得了比赛。由于这是一辆自动驾驶汽车,我在每次速度输入时都会更新档位-不相关的信息,但我想我可能会在显示代码之前解释一下上下文 下面是AutomaticCar.java(类):Java 如何以最优雅的方式找到价值最大的对象?,java,oop,Java,Oop,因此,我的任务是用Java编写一个幸运赛车游戏,严格遵循OOP的约束,编写一个可维护/优雅的代码。共有5辆车(物体),每轮速度随机(共10轮),10轮后,我需要找出哪辆车(物体)行驶的总距离最大,即哪辆车赢得了比赛。由于这是一辆自动驾驶汽车,我在每次速度输入时都会更新档位-不相关的信息,但我想我可能会在显示代码之前解释一下上下文 下面是AutomaticCar.java(类): public class AutomaticCar{ 私有字符串模型; 私人国际年; 私人整数速度; 私人int齿轮;
public class AutomaticCar{
私有字符串模型;
私人国际年;
私人整数速度;
私人int齿轮;
私用里程表;
私人总距离=0;
私人股本平均值=0;
公共自动化CAR(字符串模型,整数年){
setModel(model);
设定年份(年);
}
公共无效设置速度(整数速度){
如果(速度<0){
System.out.println(“无效速度-请重试”);
}否则{
速度=速度;
setGear();
}
}
public int getSpeed(){
返回速度;
}
公共void集合模型(字符串模型){
this.model=模型;
}
公共字符串getModel(){
收益模型;
}
公共年(国际年){
今年=年;
}
公共int getYear(){
回归年;
}
公共空位设定里程计(int currentRound){
里程表=(当前轮*速度);
设置总距离(里程表);
}
公共里程计(){
返回里程表;
}
公共空间设置总距离(内部里程表){
总距离+=里程表;
}
public int getTotalInstance(){
返回总距离;
}
公共无效设置设备(){
如果(速度>0&&speed=101&&speed=201&&speed=301&&speed 401&&speed car2.GetTotalInstance()&&
car1.getTotalInstance()>car2.getTotalInstance()&&
car1.getTotalInstance()>car2.getTotalInstance()&&
car1.getTotalInstance()>car2.getTotalInstance()&&
)
input.close();
}
}
所以基本上,我想找出哪辆车的总行驶距离最大。我知道我可以通过比较1号车和其他4辆车的总距离等,以一种混乱的方式来完成,但我希望找到一种更优雅、更简单的方法来完成,可能在OOP和实践的范围内
我希望我能找到一种方法,在AutomaticCar类中创建一个私有方法,我只需调用该方法,就可以用它的总距离宣布获胜者-但是,我不知道我是否能说出哪辆车的总距离被宣布为最长的总距离
因此,如果有其他方法,请在下面发表评论,谢谢。您可以将所有车辆放入
列表中,根据行驶距离对列表进行排序。经过整理,,如果按降序排序,位于列表中最后一个索引处的汽车将具有最高行驶距离,或者位于第一个索引处。我当然可以使用列表,但这是一个我们没有讨论过的主题,因此我可能不应该使用它。您也可以通过在setTotalDistance
检查当前实例的总距离是否大于已保存汽车实例的行驶距离的方法。如果其更大,则更新引用以指向当前汽车实例。
public class AutomaticCar {
private String model;
private int year;
private int speed;
private int gear;
private int odoMeter;
private totalDistance = 0;
private gearAverage = 0;
public AutomaticCar(String model, int year) {
setModel(model);
setYear(year);
}
public void setSpeed(int speed) {
if (speed < 0) {
System.out.println("Invalid speed - please try again.");
} else {
this.speed = speed;
setGear();
}
}
public int getSpeed() {
return speed;
}
public void setModel(String model) {
this.model = model;
}
public String getModel() {
return model;
}
public void setYear(int year) {
this.year = year;
}
public int getYear() {
return year;
}
public void setOdoMeter(int currentRound) {
odoMeter = (currentRound * speed);
setTotalDistance(odoMeter);
}
public int getOdoMeter() {
return odoMeter;
}
public void setTotalDistance(int odoMeter) {
totalDistance += odoMeter;
}
public int getTotalDistance() {
return totalDistance;
}
public void setGear () {
if (speed > 0 && speed <= 100) {
gear = 1;
} else if (speed >= 101 && speed <= 200) {
gear = 2;
} else if (speed >= 201 && speed <= 300) {
gear = 3;
} else if (speed >= 301 && speed <= 400) {
gear = 4;
} else if (speed > 401 && speed <= 500) {
gear = 5;
}
gearAverage += gear;
}
public int getGear () {
return gear;
}
public int gearAverage() {
return (gearAverage/10);
}
public String printDashes(int distance) {
int dashesToPrint = (int)(distance/100);
String storedDashes = "";
for(int i = 0; i < dashesToPrint; i++) {
storedDashes = (storedDashes + "-");
}
return storedDashes;
}
public void declareWinner() {
}
}
import java.util.Scanner;
import java.util.Random;
public class LuckyRacer {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Random rand = new Random();
String model;
int year;
int totalRounds = 10;
int currentRound;
System.out.println("Enter Car Model & Year for Car One");
model = input.nextLine();
year = input.nextInt();
input.nextLine();
AutomaticCar car1 = new AutomaticCar(model, year);
car1.setSpeed(rand.nextInt(501));
System.out.println("Enter Car Model & Year for Car Two");
model = input.nextLine();
year = input.nextInt();
input.nextLine();
AutomaticCar car2 = new AutomaticCar(model, year);
car2.setSpeed(rand.nextInt(501));
System.out.println("Enter Car Model & Year for Car Three");
model = input.nextLine();
year = input.nextInt();
input.nextLine();
AutomaticCar car3 = new AutomaticCar(model, year);
car3.setSpeed(rand.nextInt(501));
System.out.println("Enter Car Model & Year for Car Four");
model = input.nextLine();
year = input.nextInt();
input.nextLine();
AutomaticCar car4 = new AutomaticCar(model, year);
car4.setSpeed(rand.nextInt(501));
System.out.println("Enter Car Model & Year for Car Five");
model = input.nextLine();
year = input.nextInt();
AutomaticCar car5 = new AutomaticCar(model, year);
car5.setSpeed(rand.nextInt(501));
for (currentRound = 1; currentRound <= totalRounds; currentRound++) {
car1.setOdoMeter(currentRound);
car2.setOdoMeter(currentRound);
car3.setOdoMeter(currentRound);
car4.setOdoMeter(currentRound);
car5.setOdoMeter(currentRound);
System.out.println("After " + currentRound + " hour/s");
System.out.println("Car 1 " + car1.printDashes(car1.getOdoMeter()) + " :" + car1.getOdoMeter() + " km passed.");
System.out.println("Car 2 " + car2.printDashes(car2.getOdoMeter()) + " :" + car2.getOdoMeter() + " km passed.");
System.out.println("Car 3 " + car3.printDashes(car3.getOdoMeter()) + " :" + car3.getOdoMeter() + " km passed.");
System.out.println("Car 4 " + car4.printDashes(car4.getOdoMeter()) + " :" + car4.getOdoMeter() + " km passed.");
System.out.println("Car 5 " + car5.printDashes(car5.getOdoMeter()) + " :" + car5.getOdoMeter() + " km passed.");
car1.setSpeed(rand.nextInt(501));
car2.setSpeed(rand.nextInt(501));
car3.setSpeed(rand.nextInt(501));
car4.setSpeed(rand.nextInt(501));
car5.setSpeed(rand.nextInt(501));
}
if (car1.getTotalDistance() > car2.getTotalDistance() &&
car1.getTotalDistance() > car2.getTotalDistance() &&
car1.getTotalDistance() > car2.getTotalDistance() &&
car1.getTotalDistance() > car2.getTotalDistance() &&
car1.getTotalDistance() > car2.getTotalDistance() &&
)
input.close();
}
}