我有一个使用节点的linkedList。我已经按字母顺序打印出来了,但现在我要打印出名字以用户要求的某个字母开头的人。例如:打印出所有名字以"A"开头的人。我知道这不是目前为止最好的方法但我只是在尝试不同的方法而且我对链表还是个新手。任何提示、建议或提示都是非常感谢的。
这是我认为可能有用的东西:
public void findSameStartingLetter(BigNode front, String letter) {
BigNode curr;
curr = front;
String name;
name = curr.dataitems;
String d;
// char c;
while (curr.next != null){
d = name.substring(0, 1);
if (d.equals(letter)) {
System.out.println(d);
curr = curr.next;
// for(int i=0; i < 1; i++) {
// c = letter.charAt(i);
// }
}
}
}
看起来您需要在循环中读取节点上的人的姓名,而不是读取名字然后不再分配该变量。
您还应该检查当前节点是否为空,而不是下一个节点。如果你检查下一个,你会错过列表中的最后一个名字。
另外,确保列表上的指针移动是在if之外完成的,因为我们希望检查下一个节点,而不管名称是什么。
除了逻辑之外,看起来您对java有点不舒服。为了使您的示例更清晰,您可以使用java在一行中声明和赋值的能力。
此外,Java的字符串也有一个startWith方法,而不是执行子字符串并比较子字符串。不错的工作!
public void findSameStartingLetter( BigNode front, String letter )
{
BigNode curr = front;
while( curr != null )
{
String name = curr.dataitems;
if( name.startsWith( letter ) )
{
System.out.println( name );
}
curr = curr.next;
}
}
对我来说看起来很好,我唯一要改变的是使用equalsIgnoreCase()
而不是equals()
。哦,把curr = curr.next;
行放在if