Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以最优雅的方式找到价值最大的对象?_Java_Oop - Fatal编程技术网

Java 如何以最优雅的方式找到价值最大的对象?

Java 如何以最优雅的方式找到价值最大的对象?,java,oop,Java,Oop,因此,我的任务是用Java编写一个幸运赛车游戏,严格遵循OOP的约束,编写一个可维护/优雅的代码。共有5辆车(物体),每轮速度随机(共10轮),10轮后,我需要找出哪辆车(物体)行驶的总距离最大,即哪辆车赢得了比赛。由于这是一辆自动驾驶汽车,我在每次速度输入时都会更新档位-不相关的信息,但我想我可能会在显示代码之前解释一下上下文 下面是AutomaticCar.java(类): public class AutomaticCar{ 私有字符串模型; 私人国际年; 私人整数速度; 私人int齿轮;

因此,我的任务是用Java编写一个幸运赛车游戏,严格遵循OOP的约束,编写一个可维护/优雅的代码。共有5辆车(物体),每轮速度随机(共10轮),10轮后,我需要找出哪辆车(物体)行驶的总距离最大,即哪辆车赢得了比赛。由于这是一辆自动驾驶汽车,我在每次速度输入时都会更新档位-不相关的信息,但我想我可能会在显示代码之前解释一下上下文

下面是AutomaticCar.java(类):

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();

    }

}