从列表

时间:2015-09-28 05:33:54

标签: java string

我有一个程序,在其中生成我希望它拥有的随机单词数。我可以选择添加单词或删除单词。每次添加新单词时,必须在新单词旁边放置“*”,但是一旦执行下一个操作,它就会消失。例如:

  

dasaf egsdf bgftht

     

然后我添加一个单词

     

asfww * dasaf egsdf bgftht

     

然后我添加了另一个词

     

asfww bfehw * dasaf egsdf bgftht

     

然后我删除了一个单词

     

asfww bfehw egsdf bgftht

我的问题是我似乎无法弄清楚如何让星号消失。所以我的问题是这种情况发生了:

  

asfww * dasaf egsdf bgftht

     

然后我添加一个单词

     

asfww * bfehw * dasaf egsdf bgftht

这是我添加单词的代码

if (answer.equalsIgnoreCase("a"))
    {

         L1.addInOrder(RandomStringUtils.randomAlphabetic(5).toLowerCase()+"*");
        L1.display();
    }

这是我的addInOrder方法

public void addInOrder(String word)
   {
           Node temp = new Node(word);
           Node current = head;
           Node prev = head;
           while (current != null && temp.getData().compareTo(current.getData())>0)
           {
                   prev = current;
                   current = current.getNext();
           }
           if (head==null)
           {
                   head = temp;
           }
           else if (current==null)
           {
                   prev.setNext(temp);
           }
           else if (head.getNext()!=null && temp.getData().compareTo(head.getData())>0)
           {
                   temp.setNext(prev.getNext());
                   prev.setNext(temp);
           }
           else if (temp.getData().compareTo(head.getData())<=0)
           {
                   temp.setNext(head);
                   head = temp;
           }
   }

我的删除方法

public boolean delete(String x)
   {
       Node find = search(x);
       if (find!=null)
       {
           if (find.equals(head))
           {
               head = find.getNext();
               return true;
           }
           Node word = head;

           while(word!=null)
           {
               if (find.equals(word.getNext()))
               {
                   word.setNext(find.getNext());
                   return true;
               }
               word = word.getNext();
           }
       }
       System.out.println("That word is not in this list!\n");
       return false ;
   }

2 个答案:

答案 0 :(得分:0)

如评论部分所述,您应该设置指向最后插入元素的快速链接。第二步是创建从String中删除'*'的方法。应在列表上的每次计算之前调用此方法。

private Node last = null;

private void preprocess() {
    if (last != null) {
        last.value = last.value.substring(0, last.value.length() - 1);
    }
}

public void addInOrder(String word) {
    preprocess();
    Node temp = new Node(word);
    last = temp;
    Node current = head;
    Node prev = head;
    //...
}

答案 1 :(得分:0)

这里有两个简单的解决方案:

1)我认为最简单的那个

不要在单词本身添加星号,只需在输出列表时添加星号。

有几种方法可以做到这一点。最简单的方法是:

  1. 将insertOrder字段添加到Node类
  2. 保留一个在addInOrder中递增的对象计数器,并在删除时减少。
  3. 通过这样做,您可以轻松识别最后插入的元素,并在那里打印星号。

    当您输出列表时,只需检查insertionOrder == object counter是否在工作后打印星号。

    另一个解决方案是保留对最后添加的对象的引用,并在添加新对象时从引用的对象中删除星号,然后更新对新创建的对象的引用。