为什么只有我的 .txt 文件的最后一条记录被插入到我的 AVL 树中,而我可以通过命令行插入记录?
Why is only the last record of my .txt file being inserted into my AVL Tree while I can insert records via command line?
我正在开发一个项目,该项目采用 .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);
}
我正在开发一个项目,该项目采用 .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);
}