尝试创建一个使用搜索二叉树来跟踪学生Java的程序

时间:2016-03-21 09:13:03

标签: java queue binary-search-tree

我正在创建一个程序,该程序使用搜索二进制树来跟踪从列表中添加和删除的学生。该程序读取一个文本文件,其中包含某个命令(添加,删除,计算平均值等),后跟学生姓名,年龄和性别。例如,文本文件的第一行是: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; 
}



}

很抱歉迟到的回复。

1 个答案:

答案 0 :(得分:0)

首先,它们被称为二进制搜索树,而不是搜索二叉树。 :P

至于实际的错误,你只在Camper类中有一个构造函数,它需要三个字符串 - 你试图传递一个文件。它无法猜测如何解析该文件并获得正确的三个字符串 - 您需要在调用代码中执行此操作,或者编写另一个可以执行文件处理的构造函数。