简体   繁体   中英

How can I get my program back on track when printing out all student records?

 import java.util.Scanner; public class MainBinaryTreeArray { public static void main(String[] args) { int choice; Scanner scan= new Scanner(System.in); BinaryTreeArray data = new BinaryTreeArray(); Listing l1 = new Listing("Carol", 4354, 3.2); Listing l2 = new Listing("Timothy", 2353, 4.0); Listing l3 = new Listing("Dean", 4544, 2.4); Listing l4 = new Listing("Sue", 3445, 3.0); data.insert(l1); data.insert(l2); data.insert(l3); data.insert(l4); do { // Choose which operation by entering a number System.out.println("*****************(Menu Operations:)******************"); System.out.println(" (Press 1). Insert."); System.out.println(" (Press 2). Fetch."); System.out.println(" (Press 5). Output all student records."); System.out.println(" (Press 6). Exit the program."); System.out.println("Enter your choice: "); choice = scan.nextInt(); switch(choice) { case 1: System.out.println("Are students inserted: " + data.insert(l1)); break; case 2: System.out.println("The student's info that's fetched: "); System.out.print(data.fetch("Timothy")); break; case 5: System.out.print("Output all the student's records: "); data.showAll(); } }while(choice!=6); } } 

 public class BinaryTreeArray { private Listing[] data; private int size; public BinaryTreeArray() { size = 100; data = new Listing[size]; } public void showAll() { for(int i=0; i<size; i++) System.out.print(data[i] + " "); } public boolean insert(Listing newListing) { int i = 0; while(i < size && data[i]!= null) { if(data[i].getKey().compareTo(newListing.getKey()) > 0) i = 2 * i + 1; else i = 2 * i + 2; } if(i >= size) return false; else { data[i] = newListing.deepCopy(); return true; } } public Listing fetch(String targetKey) { int i= 0; while(i< size && data[i]!= null && data[i].getKey()!=targetKey) { if(data[i].getKey().compareTo(targetKey) > 0) i = 2 * i + 1; else i = 2 * i + 2; } if(i >= size || data[i] == null) return null; else return data[i].deepCopy(); } } 

 public class Listing implements Comparable<Listing> { private String name; // key field private int ID; private double GPA; public Listing(String n, int id, double gpa) { name = n; ID = id; GPA = gpa; } public String toString() { return("Name is " + " " + name + "\\nID is" + " " + ID + "\\nGPA is" + " " + GPA + "\\n"); } public Listing deepCopy() { Listing clone = new Listing(name, ID, GPA); return clone; } public int compareTo(Listing other) { return this.name.compareTo(other.getKey()); } public String getKey() { return name; } }// end of class Listing 

Hello All,

My java program compiles fine, but I am having a terrible and miserable time with getting my program to stop printing all those nulls when I output all student records in my BinaryTreeArray. Here is complete program. Any suggestions? Please do give any advice. So to make what I am saying clear, I need help with understanding why when I print out student records it includes a whole bunch of extra nulls that really have no purpose and just make my program look crazy. Any solutions to this problem?

When you initialize the BinaryTreeArray(), you set the field variable "size" to 100 and use this to initialize the data Listing[] array. When you print out the data, the loop uses the same "size" variable so you get all 100 entries, including the null entries. A simple solution would be to filter the data for null when you show all.

public class BinaryTreeArray
{ 

  ...

  public void showAll()
  { 
      for(int i=0; i<size; i++)
      {
          if (data[i] != null)
              System.out.print(data[i] + " "); 
      }
  } 

  ...

}

An alternate solution would be to change your use of size to maxSize and then create a variable size that is incremented as you insert listings.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM