我有一个程序,在其中生成我希望它拥有的随机单词数。我可以选择添加单词或删除单词。每次添加新单词时,必须在新单词旁边放置“*”,但是一旦执行下一个操作,它就会消失。例如:
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 ;
}
答案 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)我认为最简单的那个
不要在单词本身添加星号,只需在输出列表时添加星号。
有几种方法可以做到这一点。最简单的方法是:
通过这样做,您可以轻松识别最后插入的元素,并在那里打印星号。
当您输出列表时,只需检查insertionOrder == object counter
是否在工作后打印星号。
另一个解决方案是保留对最后添加的对象的引用,并在添加新对象时从引用的对象中删除星号,然后更新对新创建的对象的引用。