2016-09-23 123 views
0

我有一輛汽車類和它的構造是這樣的:調用非靜態方法構造

public Cars(String carID, String plateNum, String position, Attendant assignedTo, long currTime) { 
     this.carID = carID; 
     this.plateNum = plateNum; 
     this.position = position; 
     this.assignedTo = assignedTo; 
     this.currTime = currTime; 
    } 

構造函數在其他類(主)當我按下從菜單創建汽車初始化。

構造函數的參數都是由car類中的方法創建/啓動的。系統應該是提供諸如(身份證,位置和時間)信息的系統。

問題是汽車對象還沒有被初始化,所以我不能讓方法工作。

但我真的需要汽車對象來包含其信息(如汽車ID:CR1)。

信息除時間以外都是字符串。

我該怎麼做? PS:我是編程新手。起初,我使用靜態方法,但事實證明靜態方法會導致我的代碼出現更大的麻煩。

我發佈了一些東西,其中有我的靜態方法,每個人都告訴我去除靜態。

public void addCar() { 

    Cars car1 = new Cars(car1.getID(), car1.askCarID(), Cars.getPosition(), Attendant.askForAtt(), System.currentTimeMillis()); 
    myGarage.add(car1); 
    if(!(car1.getAssignedTo()).equals(null)){ 
     car1.getAssignedTo().setAssign(car1); 
     car1.getAssignedTo().setAvailable(false); 
    } 
} 

這就是所謂的當我想​​創造一輛新車。

我也把全車類的情況下,你需要它:

import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.concurrent.TimeUnit; 

import javax.swing.text.Position; 

public class Cars { 

    private String carID; 
    private String plateNum; 
    private String position; 
    private Attendant assignedTo; 
    private long currTime; 
    static ArrayList<String> tempArray2 = new ArrayList<String>(); 

    public Cars(String carID, String plateNum, String position, Attendant assignedTo, long currTime) { 
     this.carID = carID; 
     this.plateNum = plateNum; 
     this.position = position; 
     this.assignedTo = assignedTo; 
     this.currTime = currTime; 
    } 

    public void createCarsID() { 

     for (int x = 0; x < Garage.getCarsCapacity(); x++) { 
      String tempCarID = ("CR" + (x + 1)); 
      tempArray2.add(tempCarID); 
     } 
    } 

    public String getID() { 

     createCarsID(); 
     String tempID = null; 
     String tempPos = null; 
     for (int x = 0; x < Garage.getCarsCapacity(); x++) { 
      if (tempArray2.get(x) != null) { 
       tempID = tempArray2.get(x); 
       tempPos = tempArray2.get(x); 
       tempArray2.remove(tempArray2.get(x)); 
       getPos(tempPos); 
       //tempArray2.get(x) = null; 
       break; 
      } 
     } 
     return tempID; 
    } 

    public static void getPos(String IdToPos) { 
     String strPos = IdToPos.substring(2); 
     int pos = Integer.parseInt(strPos); 
     position = "GR" + pos; 

    } 

    public String getPlateNum() { 
     return plateNum; 
    } 


    public static String getCarID() { 
     return carID; 
    } 

    public static String getPosition() { 
     return position; 
    } 

    public long getCurrTime() { 
     return currTime; 
    } 

    public Attendant getAssignedTo() { 
     return assignedTo; 
    } 

    public static String askCarID() { 
     boolean valid = false; 
     System.out.println("Please enter your car's plate number."); 
     Scanner scanCarID = new Scanner(System.in); 
     String scannedCarID = scanCarID.nextLine(); 
     while (!valid) { 
      if (scannedCarID.matches("^[A-Za-z][A-Za-z] [0-9][0-9][0-9]$")) { 
       valid = true; 
       System.out.println(scannedCarID); 
      } else { 
       System.out.println("Please enter a valid plate number. Ex: AF 378"); 
       askCarID(); 
      } 
     } 
     return scannedCarID.toUpperCase(); 
    } 

    public String convert(long miliSeconds) { 
     int hrs = (int) TimeUnit.MILLISECONDS.toHours(miliSeconds) % 24; 
     int min = (int) TimeUnit.MILLISECONDS.toMinutes(miliSeconds) % 60; 
     int sec = (int) TimeUnit.MILLISECONDS.toSeconds(miliSeconds) % 60; 
     return String.format("%02d:%02d:%02d", hrs, min, sec); 
    } 

     @Override 
     public String toString() { 
      return "Car:" + plateNum + " ID:" + carID + " Position:" + position + " Assigned to:" + assignedTo.getId() 
      + "(" + assignedTo.getName() + ")" + " Parked at:" + convert(currTime); 
     } 
    } 
+0

「的系統應該是一個給像(在ID,位置和時間)的信息。」 - 這裏的「系統」是什麼意思?這聽起來像你只是想請求來自用戶的所有信息,然後*調用構造函數。畢竟,靜態方法很可能適用於你只需要獲取汽車信息的地方 - 這並不需要任何以前的狀態。 –

+0

不要讓你的問題的第一句話「英語不是我的母語。」它阻礙了我們。讓你的第一句話成爲問題的總結。 –

+0

「不要提出你的問題的第一句話」英語不是我的母語。「」不是因爲你的英語很好。 –

回答

1

我附上你的代碼,可以幫助你:

首先爲所有的參數可以是靜態的話,我移動到構造函數。

秒我將靜態方法「createCarsID();」到一個靜態init塊,以避免不必要的調用。

該示例功能完整。

package test; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.concurrent.TimeUnit; 

import javax.swing.text.Position; 

public class Cars { 

private String carID; 
private String plateNum; 
private String position; 
private Attendant assignedTo; 
private long currTime; 
static ArrayList<String> tempArray2 = new ArrayList<String>(); 

static{ 
    createCarsID(); 
} 

public Cars() { 
    this.carID = Cars.getID(); 
    this.plateNum = Cars.askCarID(); 
    this.position = Cars.generatePosition(); 
    this.assignedTo = Attendant.askForAtt(); 
    this.currTime = System.currentTimeMillis(); 
} 

public static void createCarsID() { 

    for (int x = 0; x < Garage.getCarsCapacity(); x++) { 
     String tempCarID = ("CR" + (x + 1)); 
     tempArray2.add(tempCarID); 
    } 
} 

public static String getID() { 


    String tempID = null; 
    String tempPos = null; 
    for (int x = 0; x < Garage.getCarsCapacity(); x++) { 
     if (tempArray2.get(x) != null) { 
      tempID = tempArray2.get(x); 
      tempPos = tempArray2.get(x); 
      //tempArray2.remove(tempArray2.get(x)); 
      //getPos(tempPos); 
      //tempArray2.get(x) = null; 
      break; 
     } 
    } 
    return tempID; 
} 
public static String generatePosition() { 


    String tempID = null; 
    String tempPos = null; 
    for (int x = 0; x < Garage.getCarsCapacity(); x++) { 
     if (tempArray2.get(x) != null) { 
      tempID = tempArray2.get(x); 
      tempPos = tempArray2.get(x); 
      tempArray2.remove(tempArray2.get(x)); 
      return getPos(tempPos); 
      //tempArray2.get(x) = null; 

     } 
    } 
    return null; 
} 

public static String getPos(String IdToPos) { 
    String strPos = IdToPos.substring(2); 
    int pos = Integer.parseInt(strPos); 
    return "GR" + pos; 

} 

public String getPlateNum() { 
    return plateNum; 
} 


public String getCarID() { 
    return carID; 
} 

public String getPosition() { 
    return position; 
} 

public long getCurrTime() { 
    return currTime; 
} 

public Attendant getAssignedTo() { 
    return assignedTo; 
} 

public static String askCarID() { 
    boolean valid = false; 
    System.out.println("Please enter your car's plate number."); 
    Scanner scanCarID = new Scanner(System.in); 
    String scannedCarID = scanCarID.nextLine(); 
    while (!valid) { 
     if (scannedCarID.matches("^[A-Za-z][A-Za-z] [0-9][0-9][0-9]$")) { 
      valid = true; 
      System.out.println(scannedCarID); 
     } else { 
      System.out.println("Please enter a valid plate number. Ex: AF 378"); 
      askCarID(); 
     } 
    } 
    return scannedCarID.toUpperCase(); 
} 

public String convert(long miliSeconds) { 
    int hrs = (int) TimeUnit.MILLISECONDS.toHours(miliSeconds) % 24; 
    int min = (int) TimeUnit.MILLISECONDS.toMinutes(miliSeconds) % 60; 
    int sec = (int) TimeUnit.MILLISECONDS.toSeconds(miliSeconds) % 60; 
    return String.format("%02d:%02d:%02d", hrs, min, sec); 
} 

    @Override 
    public String toString() { 
     return "Car:" + plateNum + " ID:" + carID + " Position:" + position + " Assigned to:" + assignedTo.getId() 
     + "(" + assignedTo.getName() + ")" + " Parked at:" + convert(currTime); 
    } 
} 

最後爲了調用此函數:

package test; 
public class main { 
public static void main(String [] args){ 
    main test = new main(); 
    test.addCar(); 

} 
public void addCar() { 

    Cars car1 = new Cars(); 
    Garage myGarage = new Garage(); 
    myGarage.add(car1); 
    if(!(car1.getAssignedTo()).equals(null)){ 
     car1.getAssignedTo().setAssign(car1); 
     car1.getAssignedTo().setAvailable(false); 
    } 
} 
} 
+0

)感謝它的工作完美 – Kavi