我正在创建一个程序,该程序使用搜索二进制树来跟踪从列表中添加和删除的学生。该程序读取一个文本文件,其中包含某个命令(添加,删除,计算平均值等),后跟学生姓名,年龄和性别。例如,文本文件的第一行是:E Jake 14 M. E代表注册(添加)。
我在概念上和编码方面都有问题。
我有一个队列类,一个实现队列类的queueLL类,我有一个返回名称,年龄和性别的露营者类,并比较每个学生的名字,最后我有我的搜索二进制树类。
问题出在主要课程中:
import java.io.*;
import java.util.Scanner;
// delcaring some variables
public class CampPosanivee {
static String name;
static String age;
static String gender;
static Camper camper = null;
static double numkids;
QueueLL q = new QueueLL();
// creating a method to calculate averages
static double avgkids(Camper[] campers) {
double sum = 0;
for (int i = 0; i < campers.length; i++)
sum += campers[i].getNumKids();
if (campers.length == 0)
return 0;
return sum / campers.length;
}
public static void main(String[] args) throws IOException {
Camper c1 = new Camper("Kanga", "26", "F");
Camper c2 = new Camper("Tigger", "28", "M");
Camper c3 = new Camper("Pooh", "31", "M");
Camper c4 = new Camper("Rabbit", "30", "M");
Camper c5 = new Camper("Eeyore", "36", "M");
Scanner input = new Scanner(System.in);
System.out.print("Enter the name of File:");
String filename = input.next();
System.out.println();
FileReader inFile = new FileReader(filename);
Scanner sFile = new Scanner(inFile);
String lineOfData;
boolean q = true;
while (q && sFile.hasNext()) {
lineOfData = sFile.nextLine();
if (lineOfData.substring(0, 1).equalsIgnoreCase("h")) {
System.out.println("How to use this program:");
System.out.println("Type E to enroll a new camper");
System.out.println("Type W to withdraw a camper");
System.out.println("Type D to display age and gender of camper");
System.out.println("Type A to print average age of campers");
System.out.println("Type L to list all campers name in alphabetical order");
System.out.println("Type S to print the number of boys and girls camper");
System.out.println("Type P to list all camper names in preorder");
System.out.println("Type Q to quit program");
} else if (lineOfData.substring(0, 1).equalsIgnoreCase("e")) {
Scanner file = new Scanner(
new FileReader("data.txt"));
int n;
n = file.nextInt();
BST tree = new BST();
for (int i = 0; n < i; i++) {
Camper x = new Camper(file);
System.out.println(x);
tree.insert(x);
}
}
}
}
我不认为我的实现是正确的,我在试图完成代码方面遇到了障碍。我在Camper
中尝试传递文件参数时遇到错误Camper x = new Camper(file);
值定义为我的Camper类文件中的3个字符串(名称,年龄,性别)。任何帮助将不胜感激!
编辑Camper的代码:
public class Camper implements Comparable<Camper> {
private String name;
private String age;
private String gender;
private double numKids;
public Camper (String n, String a,String g){
name = n;
age = a;
gender = g;
}
public String getName()
{
return name;
}
public String getAge()
{
return age;
}
public String getGender()
{
return gender;
}
public double getnumKids()
{
return numKids;
}
public int compareTo(Camper other)
{
if (getName().compareTo(other.getName()) > 0)
{
return 1;
}
else if (getName().compareTo(other.getName()) < 0 )
{
return -1;
}
else
return 0;
}
}
很抱歉迟到的回复。
答案 0 :(得分:0)
首先,它们被称为二进制搜索树,而不是搜索二叉树。 :P
至于实际的错误,你只在Camper类中有一个构造函数,它需要三个字符串 - 你试图传递一个文件。它无法猜测如何解析该文件并获得正确的三个字符串 - 您需要在调用代码中执行此操作,或者编写另一个可以执行文件处理的构造函数。