Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java do while循环保持循环,即使它不满足条件_Java_Do While - Fatal编程技术网

Java do while循环保持循环,即使它不满足条件

Java do while循环保持循环,即使它不满足条件,java,do-while,Java,Do While,我的while(cur!=head)应该在node4执行,因为它启动了 在node3,程序至少执行一次do块中的语句,然后在node4读取,node4与作为node3的头节点相同 我的程序应该会回来 Actual output: 3 3 3 3 4 5 1 2 Expected output: 3 3 3 4 5 1 2 3 实际输出是正确的,我的预期输出是错误的 我只是想知道,当cur等于head时,哪个不符合 条件虽然(cur!=head),但它可以继续运行吗?为什么? class

我的
while(cur!=head)
应该在node4执行,因为它启动了 在node3,程序至少执行一次
do
块中的语句,然后在node4读取,node4与作为node3的头节点相同

我的程序应该会回来

 Actual output: 3 3 3 3 4 5 1 2 

 Expected output: 3 3 3 4 5 1 2 3
实际输出是正确的,我的预期输出是错误的 我只是想知道,当cur等于head时,哪个不符合 条件
虽然(cur!=head)
,但它可以继续运行吗?为什么?

class LinkedNode
{
    int val;
    LinkedNode next;
    LinkedNode (int x)
    {
        val = x;
        next = null;
    }
}



class Solution
{

    public static void main(String[] args)
    {
        LinkedNode node1 = new LinkedNode(1);
        LinkedNode node2 = new LinkedNode(2);
        LinkedNode node3 = new LinkedNode(3);
        LinkedNode node4 = new LinkedNode(3);
        LinkedNode node5 = new LinkedNode(3);
        LinkedNode node6 = new LinkedNode(3);
        LinkedNode node7 = new LinkedNode(4);
        LinkedNode node8 = new LinkedNode(5);

        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node7;
        node7.next = node8;
        node8.next = node1;

        LinkedNode after = check(node3);
        print_list(after);
    }


    public static void print_list(LinkedNode head)
    {   
        LinkedNode cur = head;
        do
        {
            System.out.print(head.val + " ");
            head = head.next;
        }
        while (cur!= head);//same question as the below
    }

    public static LinkedNode check(LinkedNode head)
    {   

        LinkedNode cur = head;
        do
        {   
            cur = cur.next;
        }   
        while(cur!=head);// this line is supposed to execute and exit at node4,since node4 is equal to node3(head)

        return cur;
    }

}

您正在通过引用而不是值来比较对象。你的逻辑是正确的。节点3永远不等于节点4,因为它们是独立的对象,但您需要的是比较它们的值

while(cur.val != head.val)

我不清楚你想做什么。在
check
中,只要
cur!=头部
。这意味着当它完成循环时,您将有
cur==head
,因为
cur==head
是它唯一退出循环的时间。所以基本上,
check
将始终返回
head
(如果它没有无限循环或崩溃)。当第一次盲目执行代码时,它不会检查任何条件,你能告诉我为什么使用check()函数吗?“因为node4等于node3(head)”,你在比较引用,而不是LinkedListYes的值,你是对的。你的想法和Shankar Shastri一样。Linkednode按引用而不是值传递。非常感谢你的回答。