2016-09-23 77 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