我目前正在使用继承,正如你在下面看到的,我有两个类,人和乘客。在 person 中,我有主要的 toString() 方法,在乘客中,我调用 super.toString() 并添加新信息、优先预订/noOfBags 和 ID。我遇到的问题是,当用户向数组添加新乘客时,当您打印数组时,数据的格式与输入的格式不同。我非常确定我已经正确调用了所有内容,但我不能 100% 确定为什么只是 toString 的名称方面会出现问题(请注意,DOB/ID/noOfBags 和优先预订的格式均正确)。如果有人能指出我为什么只是名字打印不正确,我将不胜感激。
代码 这是主类Person中的构造函数
public Person()
{
name = new Name();
dateOfBirth = new Date();
}
public Person(String titleIn, String firstNameIn, String surNameIn, int day, int month, int year)
{
name = new Name(titleIn, firstNameIn, surNameIn);
dateOfBirth = new Date(day, month, year);
}
这是我用来获取新乘客的姓名和出生日期详细信息的方法
public void read()
{
try
{
Scanner kbInt = new Scanner(System.in);
Scanner kbString = new Scanner(System.in);
System.out.println("***Passenger Details: ***");
System.out.print("Title : ");titleRead=kbInt.nextLine();
System.out.print("First Name : ");FNameRead=kbString.nextLine();
System.out.print("Surname : ");SNameRead=kbString.nextLine();
name = new Name(titleRead, FNameRead, SNameRead);
System.out.println("\n");
System.out.println("***Date of Birth: ***");
System.out.print("Day : ");dayRead=kbInt.nextInt();
System.out.print("Month : ");monthRead=kbInt.nextInt();
System.out.print("Year : ");yearRead=kbString.nextInt();
dateOfBirth = new Date(dayRead, monthRead, yearRead);
}
catch (InputMismatchException e)
{
System.out.print("Incorrect input, please input data in the correct format!");
}
}
最后,对于 person 类,这里是 toString
public String toString()
{
String nameAndAge = "Name = " + name + ", DOB = " + dateOfBirth;
return nameAndAge;
}
在继承自Person的passenger类中,这里是正在创建的数组列表和构造函数
private ArrayList<Passenger> passengers = new ArrayList<Passenger>();
//Constructor
public Passenger()
{
noOfBags = 0;
priorityBoarding = false;
id = nextid++;
}
//Initiliaze constructor
public Passenger(String titleIn, String firstNameIn, String surnameIn, int day, int month, int year, int bag, boolean pb)
{
super(titleIn, firstNameIn, surnameIn, day, month, year);
noOfBags = bag;
priorityBoarding = pb;
}
这里我添加了noOfBags和优先登机的读取,亲自添加到read方法中
public void bagsPriorityRead()
{
Scanner kbInt = new Scanner(System.in);
Scanner kbString = new Scanner(System.in);
super.read();
System.out.print("Number of bags : ");bagsRead=kbString.nextInt();
System.out.print("Priority boarding (Y/N) : ");priorityRead=kbString.next().charAt(0);
}
最后,这是passenger中的toString方法
//ToString Method
public String toString()
{
return " ID: " +id + " - " + super.toString() + " \tNo of Bags: " +bagsRead + "\tDo they have priority boarding? : " +priorityRead;
}
//添加了添加操作的图像以及打印时格式不正确的方式
//打印时格式不正确
如上所述,如果有人能指出我出错的地方/如何修复我的错误,我们将不胜感激。如果可能需要更多代码来查找问题根源,请告诉我。
提前致谢, 杰森
最佳答案
看起来问题(如果有)出现在 Name::toString() 中,或者 new Name(x, y, z)
中的参数顺序错误
String nameAndAge = "Name = " + name + ", DOB = " + dateOfBirth;
但是您还没有发布 Name 类。
关于java - 将信息读入数组时的格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084803/