2013-02-18 140 views
-2

嗨,大家好我尝试退出与此位的代码的循环,但之前结束它仍然打印出来,我不想行:Java循环还没有结束正确

do { 
     System.out.println("Would you like to change one of the numbers (y/n)?"); 
     choice = kb.next().charAt(0); 
     System.out.println("Please enter the index of the number you want to change:"); 
     indexChange = kb.nextInt(); 
     System.out.println("Please enter the number you want to change:"); 
     changedIndex = kb.nextInt(); 
     elements[indexChange - 1] = changedIndex; 
     for (int i = 0; i < elements.length; i++) 
      System.out.println(index[i] + elements[i]); 

    } while (choice != 'n'); 

这两条线还是打印出来在循环结束之前:“请输入您要更改的号码:”&“请输入您要更改的号码:”。你们能协助解决这个问题吗?

+1

使用调试器! – 2013-02-18 22:38:13

+1

这是一个逻辑问题,调试器不会有太大的帮助。铅笔和纸张会更快。 – 2013-02-18 22:38:46

+0

@ A - C那么,像Eclipse和NetBeans中提供的一个好的调试器会向您显示每行每个变量的实际值。您可以使用此信息在同时测试代码的同时查找逻辑错误。 – 2013-02-18 22:39:56

回答

3

您需要使用您的break循环。在这种情况下,不需要在循环的每次迭代开始或结束时检查choice,因此您只需使用while (true)即可循环,直至达到break

while (true) { 
     System.out.println("Would you like to change one of the numbers (y/n)?"); 
     choice = kb.next().charAt(0); 
     if (choice == 'n') 
      break; 
     System.out.println("Please enter the index of the number you want to change:"); 
     indexChange = kb.nextInt(); 
     System.out.println("Please enter the number you want to change:"); 
     changedIndex = kb.nextInt(); 
     elements[indexChange - 1] = changedIndex; 
     for (int i = 0; i < elements.length; i++) 
      System.out.println(index[i] + elements[i]); 

    } 

不过要小心。意外写入无限循环很容易!

+0

这将很好地解释为什么从“do-while”循环到“while”循环的变化。尽管如此,我发现这个解决方案比双重检查或双重检查break-condition的if-else更好。 – 2013-02-18 22:43:25

1

您需要检查处理剩余输入之前退出条件...

do { 
    System.out.println("Would you like to change one of the numbers (y/n)?"); 
    choice = kb.next().charAt(0); 
    if (choice != 'n' && choice != 'N') { 
     System.out.println("Please enter the index of the number you want to change:"); 
     indexChange = kb.nextInt(); 
     System.out.println("Please enter the number you want to change:"); 
     changedIndex = kb.nextInt(); 
     elements[indexChange - 1] = changedIndex; 
     for (int i = 0; i < elements.length; i++) { 
      System.out.println(index[i] + elements[i]); 
     } 
    } 

} while (choice != 'n' && choice != 'N'); 

您也应该检查资金字符...

+0

这工作但结束程序没有继续下一阶段的代码,尽管下面的while语句完成了工作。感谢您的提示。 – user1766709 2013-02-18 22:54:10

0

此检查

while (choice != 'n'); 

只有每do循环迭代出现一次。因此,在你的循环中,你问你是否要更改其中一个数字,然后询问其他问题,然后检查他们输入的值是否为第一个问题。

您可以使用关键字“break”在得到选择后跳出循环.eg。

if (choice == 'n') 
{ 
    break; 
} 
0

的Try ...

while(!'n'.equals(choice.toLowerCase())){...