2017-04-11 29 views
-1

我想將隨機數0到50添加到每個ArrayList對象中,並且每個 對象都會嘗試到達最後一行10000米。如何將隨機數添加到ArrayList對象並決定誰跨線

我該怎麼做。
這裏是我的代碼:

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; 
} 

這部分在這裏編輯的代碼。在這裏,我想獲得其他賽車細節的信息,他們花了多長時間完成比賽。

public void raceStart() { 

    while (true) { 
     for (CarModel car : theCar) { 
      int carDistance = car.getCarDistance(); 
      carDistance += randomWithRange(0, 50); 
      car.setCarDistance(carDistance); 

      for (int time = 0; time <= maxDistance; time++) 
      { 

       if (carDistance >= maxDistance) { 
        System.out.println("First winner is :" + car.getDriverNames() + "\nTOTAL DISTANCE TRAVELED : " 
          + carDistance + " METERS " + "\nTOTAL TIME TO FINISH THE RACE : " + time); 


        System.out.println("\n\nALL OTHERS COMPETITORS RACE DETAILS"); 

        for (int t = 0; t < carDistance; t++) // will find out 
                  // all other 
                  // drivers time 
                  // and distance 
        { 
         System.out.println(
           "DRIVER NAME :" + car.getDriverNames() + "\nCAR DISTANCE : " + carDistance + "\n"); 
         System.out.println(); 
        } 
        return; // Race has finished 

       } 

      } 
     } 
    } 
} 
+1

再次,問題是什麼 –

+0

如何在ArrayList對象中添加隨機數並決定誰跨線? – Mjachowdhury

+0

無限循環在這裏while(theCar.size()!= maxDistance),你也在raceStart()方法中使用了錯誤的方法。 – Omore

回答

0

如果我理解你的權利,你應該域「距離」添加到您的類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循環,因爲比賽已經結束。希望你明白我的想法

+0

我ivan如果(carDistance> = maxDistance){ \t \t System.out.println(「第一個贏家是:」+ cm.getDriverNames()); \t return; //比賽已結束 \t} 如果我想輸出驅動程序的優勝者,它顯示mt null – Mjachowdhury

+0

什麼是「cm」?您可以調用car.getDriverName(),其中「car」是Car數組的對象,並且它應該具有Driver名稱(如果您正確調用addCar函數)。 看編輯答案 –

+0

是的,我改變了它,它的工作,但我怎樣才能得到其餘的驅動程序的詳細信息與時間完成接收。我編輯了代碼。 – Mjachowdhury