【问题标题】:selecting certain strings from a linked list从链表中选择某些字符串
【发布时间】:2011-10-14 18:48:40
【问题描述】:

我有一个使用节点的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);
        //  }
              } 

          }
   }

【问题讨论】:

    标签: java linked-list nodes


    【解决方案1】:

    看起来您需要读取循环内节点上的人的姓名,而不是读取名字然后不再分配该变量。

    您还应该检查当前节点是否为空,而不是下一个。如果您检查下一个,您将错过列表中的姓氏。

    此外,请确保列表上的指针移动是在 if 之外完成的,因为我们要检查下一个节点,而不管名称是什么。

    抛开逻辑,看起来你对 java 有点不适应。要清理您的示例,您可以使用 java 功能在一行上进行 deare 和赋值。

    此外,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;
            }
        }
    

    【讨论】:

    • 我一定是做错了什么,因为我的 anny 打印了大约 70 次,哈哈。
    • 我浏览得太快了 - 更正了我的示例。这就是我们不运行您的代码示例所得到的结果。
    • 我将如何检查是否没有名称。 b/c 我想不出办法。如果我使用 print 语句,那么它会在每次循环运行时打印
    • 尝试检查是否为空。如果(名称 == 空)。这实际上取决于您如何设置链表。
    【解决方案2】:

    对我来说看起来不错,我唯一要更改的是使用 equalsIgnoreCase() 而不是仅使用 equals()。哦,将curr = curr.next; 行留在if 之外

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多