基于链表数组的实现-不编译的打印方法

Linked List Array Based Implementation- Print Method Not Compiling

对于一项作业,我们之前使用节点 class 实现了基于数组的链表,但是,她要求所有学生在不使用节点 class 的情况下重做此作业。除了我的 printList 方法之外,我的一切都按预期工作 - 你能回顾一下我的 printList 方法并让我知道你的想法吗?下面是 class 和 driver.

链表Class

public class LinkedListArray {

   int size;
   int maxSize;
   int arrayVal[];
   
   public LinkedListArray()
   {
       this.size = 10;
   }
  
   public LinkedListArray(int list)
   {
       if(list < 0)
           maxSize = 20;
       else
           maxSize = list;
       
       size = 0;
       arrayVal = new int[maxSize];
   }
      

   public int size(){
       return size;
   }
   
   public boolean isEmpty() {   
       return (size() == 0);
   }
   
   public boolean isFull(){
       return (size() == maxSize);
   }
  

   public void addHead(int value){
   
       if(! this.isFull()){
           for(int i = size; i > 0; i--)
               arrayVal[i] = arrayVal[i - 1];
           
           arrayVal[0] = value;
           size++;
          
       }else
           System.out.println("The List is Full.");
   }
      

   public void addTail(int value){
       
       if(! this.isFull()){
           arrayVal[size] = value;
           size++;
          
       }else
           System.out.println("The List is Full.");
   }
   
   public int removeHead() {
      
       if(! this.isEmpty())
       {
           int value = arrayVal[0];


           for(int i = 0; i < size -1; i++){
               arrayVal[i] = arrayVal[i+1];
           }
           
           size--;
           return value;
          
       }else 
           System.out.println("The List is Empty.");
       
       return arrayVal[size];
   }


   public int removeTail(){
       
       if(!isEmpty()){ 
           size--; 
          
       }else 
           System.out.println("The List is Empty.");
       
       return arrayVal[size];
   }

  

   public String printList(){
       
       String listString = new String();
       
       if(! this.isEmpty())
           return "The List is Empty.";
   
       for(int i = 0; i < size; i++) {
           listString += arrayVal[i];
               
           if(i < size -1) {
               listString += ", ";
           }
       }  
       return "Elements in the List: " + listString;
   } 
   }

Driver Class

  public class ProgramDriver {

  public static void main(String[] args) {

       LinkedListArray lla = new LinkedListArray(10);
       
       System.out.println("Size of List: " + lla.size());
       System.out.println("Is the list empty?: " + lla.isEmpty());
       System.out.println("Is the list full?: " + lla.isFull());
       
       lla.addHead(4);
       lla.addHead(5);
       lla.addTail(10);
       lla.addTail(9);
       lla.addTail(7);
       lla.addTail(2);
       lla.addHead(8);
       lla.addHead(1);
       lla.addTail(3);
       lla.addTail(6);
       
       lla.printList();
          
       System.out.println("Size of List: " + lla.size());
       System.out.println("Is the list empty?: " + lla.isEmpty());
       System.out.println("Is the list full?: " + lla.isFull());
       
      lla.removeHead();
      lla.removeTail();
      
      System.out.println("Size of List: " + lla.size());
      System.out.println("Is the list empty?: " + lla.isEmpty());
      System.out.println("Is the list full?: " + lla.isFull());
      
      lla.printList();  
  }
 }

首先:Whosebug 不是代码审查网站。不要只是 post 编写代码并询问人们的想法。 (为此查看 https://codereview.stackexchange.com/

因此,在提出这样的问题时,非常有帮助 指明您看到的是什么行为,以及以何种方式不是您所期望的。这样我们就可以帮助您解决您实际遇到的具体问题 运行。

也就是说,这显然是一个问题:

       if(! this.isEmpty())
           return "The List is Empty.";

如果列表不为空,为什么会说“The List is Empty.”?我猜你想删除那里的 !

除此之外,如果您最终在列表中包含很多项目,则循环中的字符串连接会变得昂贵。你应该避免它。查看 String.join()StringBuilder.