我正在努力实施鲜花链接列表。我已经成功地让程序按照我的意愿去做。我可以显示列表的内容,每个节点对象的属性,我可以对列表做其他事情。但是,如果我只想显示每个对象的唯一出现次数和计数怎么办?
例如,假设我将2个Rose对象和1个Daffodil对象添加到列表中。如果我使用当前方法显示内容,它将在控制台中显示每个对象在其自己的行上。但是我想开发一种新的find方法,它显示如下内容:
There are 2 occurrences of Rose!
There are 1 occurrences of Daffodil!
使用我目前的代码,这不会起作用。我明白了:
There is a Rose!
There is a Rose!
There is a Daffodil!
这是我迄今为止所做的实验性find2方法:
public void find2(String searchName){
Node theNode = firstNode;
int occurrences = 0;
if(!isEmpty()){
while (theNode.getItem().getName() != searchName){
if (theNode.getItem().getName().equals(searchName)){
occurrences++;
}
else if (theNode.getNext() == null){
System.out.println("Flower not found!");
return;
}
theNode = theNode.getNext();
}
System.out.println("Found " + occurrences + " occurrences of " + searchName + ".");
}
}
逻辑有问题吗?我试过在其他情况下添加第二个条件。那是:
else if (theNode.getNext() == null && occurrences == 0){
System.out.println("Flower not found!");
return null;
}
然而,这也没有帮助。当我运行该程序时会发生什么,取决于我是如何修改该方法的,我将输入我想要搜索的名称并且它会停止 - 换句话说,控制台让我输入更多的东西,但它没有做任何事情。或者它会给我以下错误:
Exception in thread "main" java.lang.NullPointerException
at LinkedList.find2(LinkedList.java:69)
at FinalProject.searchFlowers(FinalProject.java:81)
at FinalProject.<init>(FinalProject.java:37)
at FinalProject.main(FinalProject.java:10)
如果您想查看所有代码,我可以提供。我感谢任何提示或建议!非常感谢你的时间。
答案 0 :(得分:2)
在测试相等性之前首先测试null!
while (theNode.getItem().getName() != searchName) { // <-- NO!
if (theNode.getItem().getName().equals(searchName)) { // <-- B
occurrences++;
} else if (theNode.getNext() == null){ // <-- A
System.out.println("Flower not found!");
return;
}
theNode = theNode.getNext();
}
我相信你想要这样的东西
while (theNode != null) { // <-- null test.
if (theNode.getItem().getName().equals(searchName)){ // <-- B
occurrences++;
} else { //theNode.getItem().getName() != searchName
break;
}
theNode = theNode.getNext();
}
if (occurrences == 0) { // <-- A
System.out.println("Flower not found!");
return;
}
答案 1 :(得分:0)
试试这个
while(theNode.getNext()!=null)
{
if(theNode.getNext().getName().equals(searchName))
{
occurrences++;
}
}
if(occurences==0)
{
System.out.println("Flower not Found");
}
else
{
System.out.println("Found items "+seachname+""+occurences);
}