我有一个使用节点的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);
// }
}
}
}
答案 0 :(得分:2)
看起来您需要在循环内读取节点上人员的姓名,而不是读取名字,然后再不再分配该变量。
您还应检查当前节点是否为空,而不是下一个节点。如果您检查下一个,您将错过列表中的姓氏。
另外,确保列表上的指针移动在if之外完成,因为我们要检查下一个节点,无论名称是什么。
除了逻辑之外,看起来你对java有点不舒服。要清理您的示例,您可以使用java功能来对一行进行delare和赋值。
此外,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;
}
}
答案 1 :(得分:0)
对我来说很好,我唯一要改变的是使用equalsIgnoreCase()
而不只是equals()
。哦,将curr = curr.next;
行留在if