Вот второго прохода на повторном факторинг кода.
Итак, теперь в этом рефакторинге мы фиксируем и храним вновь созданные объекты CarOwner и сохраняем их в списке.
Затем мы видим, как пройти через этот Список CarOwner, а затем записать эти объекты в файл с именем carOwners.dat
Обычно, в промышленности, код рефакторинг делается в контексте наличия набора единичные тесты, с помощью которых вы можете убедиться, что рефакторинг не нарушил требуемое поведение кода, но мы просто учимся здесь, поэтому эта работа служит для объяснения некоторых понятий, которые вам не хватает, и в этой первой последующей итерации ниже приведены некоторые проблемы его собственный, поэтому не принимайте это как конечный продукт.
Рефакторинг
- Я создал класс CarOwner.
- Я переименовал булевскую переменную canProceed так, чтобы она читалась более естественно.
- Обновление: Я сделал класс CarOwner Serializable; это позволит нам записать объект в файл.
Обновление: я добавил код, который добавляет новые CarOwners, и добавляет его в список, а затем перебираю список, чтобы записать те объекты CarOwner в FileStream.
упаковка паркинги;
импорт java.io.FileNotFoundException; import java.io.ObjectOutputStream; импорт java.io.IOException; импорт java.util.ArrayList; import java.util.Date; import java.util.List; import java.io.FileOutputStream; импорт java.util.Scanner;
Публичный класс Регистрация { public static void main (String [] args) { Список carOwners = new ArrayList();
Scanner input = new Scanner(System.in);
boolean canProceed = true;
while (canProceed) {
System.out.println("Press Y/y to add a new user");
System.out.println("Press N/n to return to menu");
String optionRequested = input.nextLine();
if (optionRequested.equalsIgnoreCase("Y")) {
CarOwner owner = new CarOwner();
System.out.println("Enter your student ID");
owner.setStudentID(input.nextLine());
System.out.println("Enter your first name");
owner.setFirst(input.nextLine());
System.out.println("Enter your last name");
owner.setLast(input.nextLine());
System.out.println("Enter your car number");
owner.setCarNo(input.nextLine());
System.out.println("Enter your contact number");
owner.setContactNumber(input.nextLine());
System.out.println("Enter your email address");
owner.setEmail(input.nextLine());
owner.setDateReg(new Date().toString());
carOwners.add(owner);
} else if (optionRequested.equals("N") || optionRequested.equals("n")) {
canProceed = false;
}
}
ObjectOutputStream objectWriter = null;
for (CarOwner carOwner : carOwners) {
try {
objectWriter = new ObjectOutputStream(new FileOutputStream("carOwners.dat"));
objectWriter.writeObject(carOwner);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Вот что класс CarOwner теперь выглядит ...
package parkingsystem;
import java.io.Serializable;
public class CarOwner implements Serializable{
private String First;
private String Last;
private String studentID;
private String email;
private String carNo;
private String dateReg;
private String contactNumber;
public CarOwner() {
}
public String getFirst() {
return First;
}
public void setFirst(String first) {
First = first;
}
public String getLast() {
return Last;
}
public void setLast(String last) {
Last = last;
}
public String getStudentID() {
return studentID;
}
public void setStudentID(String studentID) {
this.studentID = studentID;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCarNo() {
return carNo;
}
public void setCarNo(String carNo) {
this.carNo = carNo;
}
public String getDateReg() {
return dateReg;
}
public void setDateReg(String dateReg) {
this.dateReg = dateReg;
}
public void setContactNumber(String contactNumber) {
this.contactNumber = contactNumber;
}
public String getContactNumber() {
return contactNumber;
}
@Override
public String toString() {
return "CarOwner{" +
"First='" + First + '\'' +
", Last='" + Last + '\'' +
", studentID='" + studentID + '\'' +
", email='" + email + '\'' +
", carNo='" + carNo + '\'' +
", dateReg='" + dateReg + '\'' +
", contactNumber='" + contactNumber + '\'' +
'}';
}
}
ИТАК создания класса CarOwner делается, чтобы сделать старт на то, чтобы этот код более объектно-ориентированный.
Во-вторых, код с рефактором демонстрирует правильное использование логической переменной в Java.
Как уже отмечали другие комментаторы, оператор присваивания = легко путать с тестом на булевское равенство. См. Java Operators
Также я переименовал Boolean proceed;
как Boolean canProceed;
Это общая стратегия. Именование булеву переменную для чтения, как вопрос, к которому «ответ» есть, да или нет или Правда или Ложные.
Это значит, что мы можем написать код while(canProceed)
, который читается очень легко. См. Также if statement on the Java tutorial
Надеюсь, это поможет.
Всякий раз, когда вы пишете 'if (boolean = true)' программист Java умирает ... Это операция присваивания, и ** всегда ** возвращает 'true'. Вам нужно 'if (boolean == true)' или, по сути, 'if (boolean)'. –
Это оскорбительная линия, на которую указывает Борис: while (continue2 = true). Вы должны переписать его во время (continue2). Ознакомьтесь с [Учебник по Java] (http://docs.oracle.com/javase/tutorial/essential/io/), если вам нужна помощь в записи в файл. – MarsAtomic
Помимо того, что сказал борис, какая ошибка вы получаете? –