创建Java Car类

时间:2012-04-19 09:27:55

标签: java inheritance

我正在用另一个单独的驱动程序类创建一个类。汽车租赁公司的汽车类是存储有关汽车的信息,如品牌,型号和注册号,因此使用我可以用来输入新车辆的驾驶员类别,检查车辆是否在租用和不可用并且名称如果雇用的话,是雇主。

我的车类有方法:

public class Car {

private String Make;
private String Model;
private int RegistrationNum;

public Car(String Make, String Model, String RegN){
    //Constructor,
    //stores the make, model and registration number of the new car
    //sets its status as available for hire.
    Make = "";
    Model = "";
    RegN = "";

}

public String getMake(){
    return Make;

}

public String getModel(){
    return Model;

}

public boolean hire(String newHirer){

    {
  //Hire this car to the named hirer and return true. 

        return true;
    }
  //Returns false if the car is already out on hire.



}

public boolean returnFromHire(){

    {
 //Receive this car back from a hire and returns true.
        return true;
    }

 //Returns false if the car was not out on hire     


}

public int getRego(){


 //Accessor method to return the car’s registration number      

    RegistrationNum++;
    return RegistrationNum;
    }



public boolean hireable(){
 //Accessor method to return the car’s hire status.     



    {
 //returns true if car available for hire           
    return true;    
    }
}

public String toString(){
 //return car details as formatted string
 //output should be single line containing the make model and reg number
 //followed by either "Available for hire" or "On hire to: <name>"


    return "Vehicle ID number: "+ getRego()+"-"+"Make is: "+ getMake()+"-"+"Model is: "+getModel();


}


}

以下是我的Driver类:

  import java.util.*;
  public class CarDriver {
  static Car car1;

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner scan = new Scanner(System.in);


{
    System.out.println("Make?");
    String Make=scan.nextLine();
    System.out.println("Model");
    String Model=scan.nextLine();
    System.out.println("Registration number?");
    String RegNum=scan.nextLine();

    car1 = new Car(Make,Model,RegNum);


    System.out.println("What you input :");

    System.out.println(car1.toString());
}}

 }

我的输出:

Make?
carmake
Model
carmodel
Registration number?
12345t
What you input :
Vehicle ID number: 1-Make is: null-Model is: null

问题:

  1. 无法理解如何转换伪代码 布尔方法到java代码

  2. 无法连接驱动程序 用于存储我输入的信息的类,如模型,make 和注册号

5 个答案:

答案 0 :(得分:3)

第二

将构造函数更改为此:

public Car(String Make, String Model, String RegN){
    this.Make = Make;
    this.Model= Model;
    this.RegN = RegN;
}

你以前的构造函数有一个问题,基本上你所做的只是你得到构造函数参数并将它们全部设置为“”(空字符串),你不想这样做。您希望将参数值分配给实例字段。如果您想访问实例字段,则必须使用关键字 this

public Car(String Make, String Model, String RegN){
//Constructor,
//stores the make, model and registration number of the new car
//sets its status as available for hire.
Make = "";
Model = "";
RegN = "";

}

答案 1 :(得分:1)

第一:为了检索有关&#34;这辆车被雇用的人的信息&#34;或者&#34;哪位司机雇用了这辆车&#34;,您必须先存储该信息。 你会使用什么数据类型? (记住这是&#34; homeworks&#34;,我认为最好不要给我的答案)。

P.S:对变量和非静态/最终属性使用非大写标识符会更好。

答案 2 :(得分:0)

正如我在代码中看到的那样,您不必在构造函数中设置Car实例的任何字段。你应该写这样的smth:

public Car(String Make, String Model, String RegN){
    //Constructor,
    //stores the make, model and registration number of the new car
    //sets its status as available for hire.
    this.Make = Make;
    this.Model = Model;
    this.RegN = RegN;
}

答案 3 :(得分:0)

回答你的第二个问题:

你打电话的那一刻:

car1 = new Car(Make,Model,RegNum); 

调用Car类的构造函数以及您提供的变量。 当您查看您创建的构造函数时:

public Car(String Make, String Model, String RegN){        
   Make = "";    
   Model = "";    
   RegN = "";   
}    

您可以看到您提供的变量永远不会设置为Car类的局部变量。 为了解决这个问题,您需要将其更改为以下内容:

public Car(String Make, String Model, String RegN){        
   this.Make  = Make;    
   this.Model = Model;    
   this.RegN   = RegN;   
}    

祝你的计划好运!

答案 4 :(得分:0)

当您使用所需参数调用Car类的构造函数时,默认情况下,这些参数引用将发送到构造函数。

public Car(String Make, String Model, String RegN){        
   Make = "";    
   Model = "";    
   RegN = "";   
} 

Car类构造函数中,Car类的参数和成员变量具有相同的名称。因此,当调用构造函数时,局部变量将更改为空字符串。并且由于局部变量包含来自调用者的引用,因此调用者中的原始变量也会被更改。 同样,因为您没有为类成员引用创建任何实例,所以它仍然保持为null。 如果在构造函数中使用以下代码段,

this.Make = "";    
this.Model = "";    
this.RegN = ""; 
将更改

Car类成员变量而不是来自调用者的变量。