Java 如何将随机数添加到ArrayList对象中,并决定谁越过该线

Java 如何将随机数添加到ArrayList对象中,并决定谁越过该线,java,arraylist,Java,Arraylist,我想在每个ArrayList对象和每个 对象将尝试到达最后一行10000米 我该怎么做。 这是我的密码: private static final int maxDistance = 10000; private ArrayList<CarModel> theCar; public CarController() { this.theCar = new ArrayList<CarModel>(); } //adding object into t

我想在每个ArrayList对象和每个 对象将尝试到达最后一行
10000

我该怎么做。
这是我的密码:

private static final int maxDistance = 10000; 
private ArrayList<CarModel> theCar;

public CarController() {

    this.theCar = new ArrayList<CarModel>();     

}
//adding object into the ArrayList

public void addCar(String driverName)
{

    CarModel c = new CarModel(driverName);

     theCar.add(c);

}

// Race Start method

public void raceStart()
{

     while( theCar.size() != maxDistance )
     {
         for(int i=0;i<theCar.size();i++)
         {

            theCar.add(randomWithRange(0, 50));
         }
     }

//random number generated method 

public static int randomWithRange(int min, int max)  
{
    int range = (max - min) + 1;
    return (int) (Math.random() * range) + min;
}
private static final int maxDistance=10000;
私人ArrayList theCar;
公共车辆控制员(){
this.theCar=newarraylist();
}
//将对象添加到ArrayList中
公共无效添加车(字符串驱动程序名称)
{
CarModel c=新的CarModel(driverName);
加上(c);
}
//起跑法
公共空间开始()
{
while(the car.size()!=maxDistance)
{

对于(int i=0;i如果我理解正确,您应该将字段“distance”添加到您的类CarModel中,并在每次迭代中递增它:

public void raceStart() {
    while (true) {
        for (CarModel car: theCar) {
            int carDistance = car.getDistance();   // Get car's current distance
            carDistance += randomWithRange(0, 50);
            car.setDistance(carDistance);          // And set in back
            if (carDistance >= maxDistance) {
                System.out.println(car.getDriverName());
                return;                          // Race has finished
            }
        }
    }
}

UPD 上面的代码有一个逻辑错误,因为我们应该完成当前迭代以确定谁是赢家(否则参与者的距离增量数量不同)。以下是更新的代码:

public void raceStart() {
    long startTime = System.currentTimeMillis();
    long finishTime;
    CarModel winner = null;
    while (true) {
        if (winner != null) {   // Race has finished
            processResults(winner, finishTime - startTime);
            return;
        }
        for (CarModel car : theCar) {
            int carDistance = car.getCarDistance();
            carDistance += randomWithRange(0, 50);
            car.setCarDistance(carDistance);
            if (carDistance >= maxDistance) {                 
                if (winner == null || carDistance > winner.getCarDistance()) {
                    winner = car;   // We have new winner
                    finishTime = System.currentTimeMillis();
                }
            }
        }
    }
}

private void processResults(CarModel winner, long winnerTime) {
    System.out.println("First winner is :" + winner.getDriverNames() + "\nTOTAL DISTANCE TRAVELED : "
            + winner.getCarDistance() + " METERS " + "\nTOTAL TIME TO FINISH THE RACE : " + winnerTime);

    System.out.println("\n\nALL OTHERS COMPETITORS RACE DETAILS");
    for (CarModel car : theCar) {
        if (!car.equals(winner)) {// need to skip winner
            System.out.println(
                    "DRIVER NAME :" + car.getDriverNames() + "\nCAR DISTANCE : " + car.getDistance() + "\n");
            System.out.println();
        }
    }
}

当至少有一辆车到达终点时,赢家引用将不为空。我们需要在下一辆车迭代之前中断While循环,因为比赛已经结束。希望您理解我的想法

再说一遍,问题是什么?我如何将随机数添加到ArrayList对象中,并决定谁越过终点线?无限循环在这里(theCar.size()!=maxDistance),而且您在raceStart()方法中使用了错误的方法。我在这里堆栈,我如何才能在(carDistance>=maxDistance){System.out.println(“第一个获胜者是:“+cm.getDriverNames()”)时计算出iIvan;return;//比赛已结束}如果我想输出驱动程序的获胜者,它显示了什么是“cm”?您可以调用car.getDriverName(),其中“car”是car数组的一个对象,它应该有驱动程序名(如果您正确调用addCar函数)。查看编辑的答案是的,我更改了它,它工作正常,但我如何才能随着时间的推移获得其余的驱动程序详细信息以完成更新。我编辑了代码。您的代码在每次迭代中有10.000次不必要的迭代,这是不正确的。只是一个secHi Ivan很高兴看到它工作正常。我添加了日期和保存并加载方法我写的文件似乎写得不正确。如果我想重新启动游戏,我想得到最后的比赛结果,但它只显示日期,而不是结果。我怎么做我已经编辑了代码。。。
public void raceStart() {
    long startTime = System.currentTimeMillis();
    long finishTime;
    CarModel winner = null;
    while (true) {
        if (winner != null) {   // Race has finished
            processResults(winner, finishTime - startTime);
            return;
        }
        for (CarModel car : theCar) {
            int carDistance = car.getCarDistance();
            carDistance += randomWithRange(0, 50);
            car.setCarDistance(carDistance);
            if (carDistance >= maxDistance) {                 
                if (winner == null || carDistance > winner.getCarDistance()) {
                    winner = car;   // We have new winner
                    finishTime = System.currentTimeMillis();
                }
            }
        }
    }
}

private void processResults(CarModel winner, long winnerTime) {
    System.out.println("First winner is :" + winner.getDriverNames() + "\nTOTAL DISTANCE TRAVELED : "
            + winner.getCarDistance() + " METERS " + "\nTOTAL TIME TO FINISH THE RACE : " + winnerTime);

    System.out.println("\n\nALL OTHERS COMPETITORS RACE DETAILS");
    for (CarModel car : theCar) {
        if (!car.equals(winner)) {// need to skip winner
            System.out.println(
                    "DRIVER NAME :" + car.getDriverNames() + "\nCAR DISTANCE : " + car.getDistance() + "\n");
            System.out.println();
        }
    }
}