Поэтому в моем классе мы делаем простые программы, и мы вводим наследование. Я получил все, чтобы работать правильно, но я не могу заставить этот бит вывода работать правильно. Это когда я прошу ввода, но он пропускает один из моих входов и переходит к запросу для второго. Когда я прокомментирую все другие вещи, прежде чем это не понадобится, он не пропустит первый вход. Я не понимаю, почему это так, и если кто-то может помочь мне понять, почему это было бы очень полезно. Спасибо заранее, и вот мои два класса, за которыми следует тестер:
Класс личности:
public class Person{
private String name, address, phoneNumber;
public Person(){
name="none";
address="none";
phoneNumber="none";
}
public Person(String inName, String inAddress, String inPhoneNumber){
name=inName;
address=inAddress;
phoneNumber=inPhoneNumber;
}
public String getName(){
return name;
}
public void setName(String newName){
name = newName;
}
public String getAddress(){
return address;
}
public void setAddress(String newAddress){
address = newAddress;
}
public String getPhoneNumber(){
return phoneNumber;
}
public void setPhoneNumber(String newPhoneNumber){
phoneNumber = newPhoneNumber;
}
public String toString(){
return String.format("Name: " + name + "\nAddress: " + address + "\nPhone Number: " + phoneNumber);
}
public void clearPerson(){
name="none";
address="none";
phoneNumber="none";
}
}
Класс клиента:
public class Customer extends Person{
private int customerNumber;
private boolean mailingList;
public Customer(){
customerNumber=0;
mailingList=false;
}
public Customer(int inCustomerNumber, boolean inMailingList){
customerNumber=inCustomerNumber;
mailingList=inMailingList;
}
public int getCustomerNumber(){
return customerNumber;
}
public void setCustomerNumber(int newCustomerNumber){
customerNumber=newCustomerNumber;
}
public boolean getMailingList(){
return mailingList;
}
public void setMailingList(boolean newMailingList){
mailingList=newMailingList;
}
public String toString(){
return "Customer Number: "+customerNumber+"\nMailing List: "+mailingList+"\n";
}
public void clearCustomer(){
customerNumber=0;
mailingList=false;
}
}
Класс тестера:
import java.util.*;
public class CustomerPersonTester{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
Person testP1 = new Person();
Customer testC1 = new Customer();
System.out.println("Empty paramaters constructed on Person and Customer. Results: ");
System.out.println(testP1.toString());
System.out.println(testC1.toString());
/*System.out.println(testP1.getName());
System.out.println(testP1.getAddress());
System.out.println(testP1.getPhoneNumber());
System.out.println(testC1.getCustomerNumber());
System.out.println(testC1.getMailingList());*/
System.out.println("Expected: none x3, 0, false.\n");
System.out.print("Enter a new name: ");
String newName = in.nextLine();
System.out.print("Enter a new address: ");
String newAddress = in.nextLine();
System.out.print("Enter a new phone number: ");
String newPhoneNumber = in.nextLine();
System.out.print("Enter a new customer number: ");
int newCustomerNumber = in.nextInt();
System.out.print("Enter a new true/false for mailing list: ");
boolean newMailingList = in.nextBoolean();
testP1.setName(newName);
testP1.setAddress(newAddress);
testP1.setPhoneNumber(newPhoneNumber);
testC1.setCustomerNumber(newCustomerNumber);
testC1.setMailingList(newMailingList);
System.out.println(testP1.toString());
System.out.println(testC1.toString());
/*System.out.println(testP1.getName());
System.out.println(testP1.getAddress());
System.out.println(testP1.getPhoneNumber());
System.out.println(testC1.getCustomerNumber());
System.out.println(testC1.getMailingList());*/
System.out.println("Expected: given name/address/phone number/customer number/boolean.\n");
testP1.clearPerson();
testC1.clearCustomer();
System.out.println("\nTest 1 Complete. Values are reset. Please continue.\n");
System.out.print("Enter a name: ");
String inName = in.nextLine();
System.out.print("Enter an address: ");
String inAddress = in.nextLine();
System.out.print("Enter a phone number: ");
String inPhoneNumber = in.nextLine();
System.out.print("Enter a customer number: ");
int inCustomerNumber = in.nextInt();
System.out.print("Enter true/false for mailing list: ");
boolean inMailingList = in.nextBoolean();
Person testP2 = new Person(inName, inAddress, inPhoneNumber);
Customer testC2 = new Customer(inCustomerNumber, inMailingList);
System.out.println(testP2.toString());
System.out.println(testC2.toString());
/*System.out.println(testP2.getName());
System.out.println(testP2.getAddress());
System.out.println(testP2.getPhoneNumber());
System.out.println(testC2.getCustomerNumber());
System.out.println(testC2.getMailingList());*/
System.out.println("Expected: given name/address/phone number/customer number/boolean.\n");
System.out.println("Program complete. Terminating...");
in.close();
}
}
Мой вывод выглядит следующим образом:
Empty paramaters constructed on Person and Customer. Results:
Name: none
Address: none
Phone Number: none
Customer Number: 0
Mailing List: false
Expected: none x3, 0, false.
Enter a new name: Bob
Enter a new address: 123 Happy Lane
Enter a new phone number: 123-456-7890
Enter a new customer number: 12
Enter a new true/false for mailing list: true
Name: Bob
Address: 123 Happy Lane
Phone Number: 123-456-7890
Customer Number: 12
Mailing List: true
Expected: given name/address/phone number/customer number/boolean.
Test 1 Complete. Values are reset. Please continue.
Enter a name: Enter an address: Problem starts here...
Вызов nextBoolean()
не использует символ новой строки, который следует за вашим true
или false
вводом. В результате этот символ новой строки по-прежнему находится во входном буфере при следующем вызове nextLine()
, который немедленно потребляет оставшийся символ новой строки, а затем переходит.
Чтобы получить ожидаемое поведение, просто добавьте еще один вызов nextLine()
сразу после вызова nextBoolean()
. Вы также должны заметить, что это произошло бы, если nextInt()
был последним вызовом в этой последовательности.
Вы также можете подумать о том, чтобы поместить части этого кода в какую-то форму цикла (возможно while
цикл while?), Чтобы у вас не было большой части дублированного кода.