2017-10-09 96 views
0

我是Java新手,无法弄清楚我的代码出错了。该程序应该用逗号将单个字符串作为单个字符输入,并将它们打印为两个不带逗号的单独单词。如果没有逗号,它应该打印出错误信息。输入“q”将退出程序。当输入“q”时,它可以很好地工作。它也可以在没有逗号,但输出后增加了以下错误信息:Java没有这样的元素异常

Exception in thread "main" java.util.NoSuchElementException: No line found 
at java.util.Scanner.nextLine(Scanner.java:1540) 
at ParseStrings.main(ParseStrings.java:16) 

而且,当有一个逗号输入该程序将无法正常工作,但是当我注释掉部分关于代码中的逗号,它工作但给出了上述错误信息。任何帮助显示我的错误将不胜感激。下面是代码:

import java.util.Scanner; 

public class ParseStrings { 
public static void main(String[] args) { 
     Scanner scnr = new Scanner(System.in); 
     String userInput = ""; 
     String firstWord = ""; 
     String secondWord = ""; 
     boolean inputDone = false; 
     boolean noComma = false; 

     System.out.println("Enter input string or q to quit: "); 

     while (!inputDone) { 

     userInput = scnr.nextLine(); 

     if (userInput.equals("q")) { 
      System.out.println(" Exiting."); 

      inputDone = true; 
     } 
     else { 
      while (!noComma) { 
       if (userInput.indexOf(',') < 0) { 
        System.out.println("Error: No comma in string"); 

        noComma = true; 
       } 
       else { 
        firstWord = userInput.substring(0, userInput.indexOf(',')); 
        firstWord = firstWord.trim(); 

        secondWord = userInput.substring(userInput.indexOf(',') + 1, userInput.length()); 
        secondWord = secondWord.trim(); 

        System.out.println("First word: " + firstWord); 
        System.out.println("Second word: " + secondWord); 
        System.out.println(); 
       } 
      } 
     } 

     } 

     return; 
    } 
} 
+0

您是否尝试过使用您的调试程序逐步调试代码以在发生错误时评估程序状态? – dave

+0

当我运行这段代码时,我没有得到你描述的错误信息 - 我只是得到一个无限循环。 –

+0

戴夫,我没有通过代码。这可能应该是我第一个故障排除步骤。我从现在开始。谢谢! – TedC

回答

0

你不需要while循环:

  while (!noComma) { 

这将是无限的,因为noComma将不能设置,除非有输入没有逗号。你有处理这一情况后,if语句我想你想要的方式:

  if (userInput.indexOf(',') < 0) { 
+0

谢谢!这工作 – TedC

0

在你的代码,如果我输入一个字符串,没有逗号输出是正确的,但如果我再次输入带有逗号或不带逗号它卡在无限循环中,如果我终止程序,它会发出异常。它是由各种访问器方法抛出的,以指示请求的元素不存在。现在让我来显示错误代码中的

while (!inputDone) {userInput = scnr.nextLine(); 

    if (userInput.equals("q")) { 
     System.out.println(" Exiting."); 

     inputDone = true; 
    } 
    else { 
     while (!noComma) { 
      if (userInput.indexOf(',') < 0) { 
       System.out.println("Error: No comma in string"); 

       noComma = true; 
      } 

当我输入没有它来到了第一个else逗号和由于条件匹配它noComma进入while循环,并打印消息现在设置noComma标志,可以在其他未进入的第一个,而条件是假的,因此现在将永远不会到别的条件所以现在它只是检查这个条件

while (!inputDone) {userInput = scnr.nextLine(); 

    if (userInput.equals("q")) { 
     System.out.println(" Exiting."); 

     inputDone = true; 
    } 

具有无限while循环,其走的是投入,但只是搜索“q”,所以当你通过Ctrl + c终止这个程序时,它将以该异常结束。

请纠正我如果我错了任何地方。

+0

谢谢!我正在参加一个在线的java课程,但我没有很明白这个教训,但是你解释它的方式清除了它。再次感谢! – TedC

相关问题