繁体   English   中英

打印所有学生记录时,如何使我的程序恢复正常?

[英]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 

大家好,

我的java程序可以很好地编译,但是当我在BinaryTreeArray中输出所有学生记录时,让程序停止打印所有这些null时,我经历了一个可怕而痛苦的时刻 这是完整的程序。 有什么建议么? 请提供任何建议。 因此,为了使我的发言更清楚,我需要帮助理解为什么在打印学生记录时,它会包含一堆额外的空值,这些空值实际上是没有目的的,只会使我的程序看起来很疯狂。 这个问题有解决方案吗?

初始化BinaryTreeArray()时,将字段变量“ size”设置为100,然后使用它来初始化数据Listing []数组。 当您打印出数据时,循环使用相同的“ size”变量,因此您将获得所有100个条目,包括空条目。 一种简单的解决方案是在显示全部内容时将数据过滤为空。

public class BinaryTreeArray
{ 

  ...

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

  ...

}

另一种解决方案是将size的使用更改为maxSize,然后创建一个可变大小,该大小在插入列表时会增加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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