如何解决为什么我可以通过命令行插入记录时,为什么仅将.txt文件的最后一条记录插入到AVL树中?
我正在一个需要一个.txt文件并读取记录列表并将其插入AVL树的项目中。似乎可以从文件中读取记录,但是只能将文件中的最后一条记录插入树中。还有一个命令行界面,允许用户将记录添加到树中。该接口可以正常工作并插入其他记录。这是.txt文件和代码的示例。
.txt file:
# Names for database
# Don't modify this file
# These are comments
# File description:
# ID,FirstName LastName Age
1 Aeris Lopez 18
2 Sofia Yeong 33
读取.txt文件并将其插入树中的方法:
public static void readRecords() throws FileNotFoundException {
int idNumber = 0;
String fName = "";
String lName = "";
String age = "";
String line = "";
Scanner inFile = new Scanner(new FileReader("test.txt"));
inFile.nextLine();
inFile.nextLine();
inFile.nextLine();
inFile.nextLine();
inFile.nextLine();
while (inFile.hasNext()) {
idNumber = inFile.nextInt();
record.setIdNumber(idNumber);
fName = inFile.next();
record.setfName(fName);
lName = inFile.next();
record.setlName(lName);
if (inFile.hasNext())
age = inFile.next();
else
age = "";
record.setAge(age);
tree.insert(record);
System.out.println(record);
}
inFile.close();
}
命令行用户界面方法:
public static void commands() {
// commandList();
Scanner console = new Scanner(System.in);
Record record = new Record();
int choice = console.nextInt();
int idNumber;
String age;
int count = 0;
String lName = "";
String fName = "";
switch (choice) {
case 1: //Allows user to search for record by last name.
System.out.println("Enter the last name to search for.\n");
findLName = console.next();
// AVLTree.findLastName(record);
commands();
break;
case 2: //Allows user to search for record by first and last name.
System.out.println("Enter the first and last name to search for.\n");
findFName = console.next();
findLName = console.next();
commands();
break;
case 3: //Allows user to add a new record.
System.out.println("Enter the id number,first name,last name,and age" +
"of the record to be added.\n");
idNumber = console.nextInt();
record.setIdNumber(idNumber);
fName = console.next();
record.setfName(fName);
lName = console.next();
record.setlName(lName);
age = console.next();
record.setAge(age);
RecordUtils.tree.insert(record);
System.out.println("Record #" + idNumber + " has been added.\n\n\n");
RecordUtils.tree.printTree(AVLTree.root);
commands();
break;
case 4: //Prints out the total number of records in the AVL tree.
System.out.println("There are " + RecordUtils.tree.countNodes() + " records in The Amazo Name " +
"Storage Program Shadow Magic 2000 System\n\n\n");
commands();
break;
case 5: //Prints out the user command list.
commandList();
commands();
break;
case 6: //Prints out the author of the code.
System.out.println("This code was created by Toby Myers.\n\n\n");
commands();
break;
case 7: //Allows the user to exit the program.
System.out.println("Exiting The Amazo Name Storage Program " +
"Shadow Magic 2000 System.");
System.exit(0);
break;
default: //Notifies user if invalid input is entered.
System.out.println("Invalid Input");
commands();
}
}
我很乐意提供更多其他信息。
谢谢!
解决方法
您的静态方法readRecords将信息添加到Record
对象中,但是由于该对象不是在方法中创建的,因此您将在同一实例中为每一行覆盖信息。
解决方案是为每一行创建一个新对象
while (inFile.hasNext()) {
Record record = new Record(); //<-- This is needed
idNumber = inFile.nextInt();
record.setIdNumber(idNumber);
fName = inFile.next();
record.setfName(fName);
lName = inFile.next();
record.setlName(lName);
if (inFile.hasNext())
age = inFile.next();
else
age = "";
record.setAge(age);
tree.insert(record);
System.out.println(record);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。