2016-10-03 8 views
-2

Предполагается, что мой while(cur!=head) должен выполнить в node4, так как он запускает в node3, программа выполняет оператор в блоке do хотя бы один раз, тогда он будет читать на узле4, node4 - тот же самый, что и узел node3.Java do while loop поддерживает цикл, даже если он не соответствует условию

Моя программа должна быть возвращена.

Actual output: 3 3 3 3 4 5 1 2 

Expected output: 3 3 3 4 5 1 2 3 

Фактический выход правильно, мой ожидается выход wrong.However, я утра просто интересно, когда дворняжка равно головы, которые не могут претендовать на условия while(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; 
    } 

} 
+0

Я не понимаю, что вы пытаетесь сделать. В 'check', метод будет продолжать цикл до тех пор, пока' cur! = Head'. Это означает, что когда он закончит цикл, у вас будет 'cur == head', потому что' cur == head' - единственный раз, когда он выйдет из цикла. Таким образом, в принципе, 'check' всегда будет возвращать' head' (если он не будет бесконечным или циклическим). – ajb

+0

Do While Blindly Executes Code First Time Он не проверяет наличие каких-либо условий –

+0

И можете ли вы сказать мне, почему функция check() используется? –

ответ

1

Вы сравниваете объекты по ссылке не по значению. Ваша логика правильная. Узел 3 никогда не равен узлу 4, поскольку они являются отдельными объектами, но вы хотите сравнить их значение.

while(cur.val != head.val) 
+1

Да, вы правы. У вас та же идея, что и @ Шанкар Шастри. Linkednode передает по ссылке не значение. Большое вам спасибо за ваш ответ. – OregonDuck

 Смежные вопросы

  • Нет связанных вопросов^_^