LinkedList没有输入

时间:2016-05-26 18:43:01

标签: java linked-list

我似乎在将值插入链接列表时遇到了一些问题。我正在尝试为Josephus问题创建一个程序,我想从用户那里获取3个数字。第一个数字是有多少“人”,说它有4个你会有1,2,3,4的列表。这是我被困的地方。每当我输入3个整数时,我的程序返回说List是空的,我无法弄清楚原因。如果有人能帮忙解释一下会非常感谢,谢谢!

主要

public static void main(String[] args)
         {
            Scanner input = new Scanner(System.in);
            long[] numbers = new long[3];
            LinkedList circle = new LinkedList();

            System.out.println("Please enter 3 numbers");

             for (int i = 0; i < 3; i++)
               {
                  numbers[i] = input.nextLong();
               }
             for (int i = 0; i < numbers[0]; i++)
               {
                  circle.insertLink();
                  circle.move();
               }

             circle.getCurrent();
         }

链接

 class Link
   {
      public long dData;
      public Link next;

      public Link(long dd)
         {
            dData = dd;
         }

      public Link(int d, Link n)
         {
            this(d);
            next = n;
         }

      public void displayLink()
         {
            System.out.print(dData + " ");
         }        
   }

关联列表

class LinkedList
   {
      private Link current;
      private int id;

      public LinkedList()
      {
         current = null;
         id = 1;
      }

      public void move()
      {
         current = current.next;
      }

      public boolean isEmpty()
      {
         if(current == null)
         System.out.println("The List is empty");
         return current == null;
      }

      public Link getCurrent()
      {
         return current;
      }

      public void setCurrent(int id)
      {
         while(current.dData != id)
            move();
      }

      public Link getNext()
      {
         return current.next;
      }   

      public void insertLink()
      {
         if(!isEmpty())
            {
            Link newlink = new Link(id++, current.next);
            current.next = newlink;
            } 
            else 
            {
            Link newlink = new Link(id++);
            newlink.next = newlink;
            current = newlink;
            }
       }

       public Link deleteLink()
       {
         Link temp = current.next;
         if(current != current.next)
            current.next = current.next.next;
         else
            current = null;

         return temp; 
       }    
   }

2 个答案:

答案 0 :(得分:0)

当您第一次拨打insertLink()方法时,您将始终打印The List is empty。因为在初始化时,链表类的current变量为null。只需从代码中删除System.out.println("The List is empty");即可。

public boolean isEmpty()
  {
     return current == null;
  }

覆盖toString()方法以查看您的列表

答案 1 :(得分:0)

您正在从用户那里获取三个输入并使用数字数组的第一个元素进行迭代,我认为它应该是

for (int i = 0; i < numbers.length; i++)
          {
             circle.insertLink();
             circle.move();
          }

当您第一次插入链接时,isEmpty()方法会检查您的current变量是否为null,如果是,则打印"The list is empty"。所以只需删除该行。

System.out.println("The List is empty");