在Java

时间:2016-04-05 14:58:30

标签: java loops for-loop

我正在编写代码以在链表的末尾插入元素。但是,如果没有在结尾使用分号,我无法正确更新列表,这个分号的意义是什么,这对我的代码有何影响?

public void insertAtEnd() throws IOException {
        LinkedList node=new LinkedList();
        System.out.println("Enter an element");
        int value=Integer.parseInt(br.readLine());
        node.setData(value);
        LinkedList p,q;
        for(p=head; (q=p.getNext())!=null; p=q); 
            p.setNext(node);
    }

5 个答案:

答案 0 :(得分:6)

分号表示下面的语句不会被执行,直到循环退出。你的情况,循环将p带到列表的末尾(最后一个元素),然后下一个语句将其下一个值赋给新元素

答案 1 :(得分:2)

嗯,它现在构造为for(p=head; (q=p.getNext())!=null; p=q);的方式,for循环有一个空体。通过pq分配的变量p.getNext()p=q正在更新。然后它一次执行p.setNext(node);

编辑:至于代码为什么使用分号,这是因为你在列表中推进了变量p和q。虽然空体的for循环很好,但我认为传统上会看到while循环。

p.setNode(node);的缩进使其看起来好像该语句与for循环相关,但实际上并非如此,因为目标是找到链接的结尾通过迭代来列出。

(注意:其他人在我输入这个答案时提出了类似的观点)

答案 2 :(得分:1)

它需要被删除,它导致它在循环中什么都不做。

循环将在循环后执行下一个代码块。一个语句或一个{}代码块。

在这种情况下,你有一个语句;,所以它"执行"什么都不做,然后在循环结束后调用你的p.setNext(node);

public void insertAtEnd() throws IOException {
        LinkedList node=new LinkedList();
        System.out.println("Enter an element");
        int value=Integer.parseInt(br.readLine());
        node.setData(value);
        LinkedList p,q;
        for(p=head; (q=p.getNext())!=null; p=q)
            p.setNext(node);
    }

答案 3 :(得分:1)

分号实际上是因为你的缩进而改变了你想要做的事情:

for(p=head; (q=p.getNext())!=null; p=q)
{
    p.setNext(node);
}

进入以下内容:

for(p=head; (q=p.getNext())!=null; p=q)
{
}
p.setNext(node);

因此,使用分号,循环在每次迭代时都不执行任何操作。然后,在完成执行后,您只需运行p.setNext(node);一次。

通常你可以通过显式编写花括号来避免这个问题,正如我在这两个代码段中所做的那样。目前尚不清楚您正在尝试完成哪个代码段。

答案 4 :(得分:0)

for语句提供了一种迭代一系列值的简洁方法。程序员经常将其称为" for循环"因为它反复循环直到满足特定条件的方式。 for语句的一般形式可表示如下:

for (initialization; termination; increment) {
    //statement(s)
}

使用此版本的for语句时,请记住:

  1. 初始化表达式初始化循环;它被执行了一次, 随着循环的开始
  2. 当终止表达式的计算结果为false时,循环终止。
  3. 每次迭代循环后调用increment表达式;这个表达式增加或减少一个值是完全可以接受的。
  4. 在你的情况下,循环将p带到列表的末尾(最后一个元素),然后下一个语句将其下一个值赋给新元素