我认为我的代码存在一些基本问题。我不太熟悉java语法,所以我不太确定我哪里出错了。任何帮助将不胜感激。
我试图在中间使用构造函数,并在底部使用一些访问器,但我认为我已经为自己过度复杂了。
import java.util.Scanner;
public class FerryBooking {
public static void main(String args[]){
class VehicleBooking {
private String booking_ID = new String("");
private String registration = new String("");
private String make_model = new String("");
private int number_passengers = 1;
private boolean insurance_choice = false;
private boolean insurance_flag = false;
public static final int booking_fee= 100;
public static final int extra_passenger = 50;
public static final int insurance_fee = 50;
VehicleBooking() {
Scanner input = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.print("Enter booking ID");
booking_ID = input.next();
System.out.print("Enter registration number");
registration = input.next();
System.out.print("Enter vehicle make/model");
make_model = input.next();
System.out.print("Enter number of passengers");
number_passengers = scan.nextInt();
}
public String getBookingID(){
return booking_ID;
}
public String getRegistration(){
return registration;
}
public String getMakeModel(){
return make_model;
}
public int getPassengers(){
return number_passengers;
}
public boolean getInsurance(){
return insurance_choice;
}
public boolean addInsurance(){
insurance_choice = true;
if (insurance_flag = false) {
insurance_flag = true;
return true;
} else if (insurance_flag = true) {
return false;
}
return true;
}
public double getBookingFee(){
int final_cost = booking_fee + (getPassengers()*extra_passenger);
if (insurance_choice = true){
final_cost = final_cost + insurance_fee;
}
return final_cost;
}
}
}
}
- 编辑 -
我重写了很多代码,并将其调整到我的重大问题的位置;构造函数。但是我收到了与构造函数相关的错误以及提供给我的代码。
import java.util.Scanner;
public class VehicleBooking {
private String booking_ID = "";
private String registration = "";
private String make_model = "";
private int number_passengers = 1;
private boolean insurance_choice = false;
public static final int BOOKING_FEE= 100;
public static final int EXTRA_PASSENGER = 50;
public static final int INSURANCE_FEE = 50;
public VehicleBooking(String booking_ID1, String registration1, String make_model1, int number_passengers1) {
/** Initialise the variables **/
booking_ID = booking_ID1;
registration = registration1;
make_model = make_model1;
number_passengers = number_passengers1;
}
public static void main(String args[]) {
VehicleBooking vb = new VehicleBooking(booking_ID1, registration1, make_model1, number_passengers1);
}
}
答案 0 :(得分:6)
首先不要像下面那样初始化一个String: -
private String booking_ID = new String("");
而是使用String.valueOf()
或仅将空字符串分配给变量: -
private String booking_ID = "";
其次,养成用CONSTANTS
字母声明UPPER_CASE
的习惯: -
public static final int BOOKING_FEE = 100;
第三,看看你的构造函数: -
VehicleBooking() {
Scanner input = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.print("Enter booking ID");
booking_ID = input.next();
System.out.print("Enter registration number");
registration = input.next();
System.out.print("Enter vehicle make/model");
make_model = input.next();
System.out.print("Enter number of passengers");
number_passengers = scan.nextInt();
}
您永远不应该在构造函数中执行I/O
操作。Constructors
用于初始化对象的状态。它的唯一目的是initialize
。
对于I / O目的,请创建不同的方法readInput()
并在创建对象后调用它。
另一件事: - 这是你用过的if-else-if
块。
if (insurance_flag = false) {
insurance_flag = true;
return true;
} else if (insurance_flag = true) {
return false;
}
在此代码中,您的if
始终为false
,而您的else if
始终为true
。因为您实际上已将这些values
分配给{ {1}} ..您应该使用insurance_flag
进行比较..
所以,使用 ==
..实际上你不需要与布尔文字进行比较......
只需使用: - if (insurance_flag == false)
..它们是等效的。
理想情况下,您应该将包含上述内容的方法更改为以下方法: -
if (!insurance_flag)
因为这是你的方法正在做的事情,但是以一种奇怪的方式......
您还可以使用以下代码替换 public boolean addInsurance(){
boolean returnValue = !insurance_flag;
insurance_flag = true;
return returnValue;
}
: -
final_cost = final_cost + insurance_fee;
通过这种方式使用,final_cost += insurance_fee;
将不会被评估final_cost
..
编辑**: -
您的twice
应如下所示: -
constructor
因此,您实际上是将您读取的值传递给构造函数作为参数,并使用这些参数初始化您的实例属性。
我认为这会清除你的怀疑......
答案 1 :(得分:0)
首先,不要使用
private String booking_ID = new String("");
您正在创建一个新的空不可变项。你应该至少让JVM实习生成为空白字符串!
if (insurance_flag = false)
这是分配,而不是评估,使用==,更好的还是(!insurance_flag)
public boolean addInsurance(){
insurance_choice = true;
if (insurance_flag = false) {
insurance_flag = true;
return true;
} else if (insurance_flag = true) {
return false;
}
return true;
}
这整个功能没有多大意义,你已经用圆圈编码了。只需将Insurance标志设置为true即可。除了返回之外,Insurance_flag不会在任何地方使用...为什么要仅在第一次设置标志时返回true?只是让它无效。用于“设置”动作。
另外,你将制作和模型混合成一个字符串,而不是真正构建项目的OO方式。理想情况下,您应该将Vehicle对象附加到VehicleBooking而不是Vehicle本身的属性。
抛弃内部类,不要在构造函数中执行输入。构造FROM输入(即传入)或使用构建器。