我是Java的新手,无法弄清楚我的代码出错了。程序应该用逗号作为单个字符串输入几个单词,并将它们打印为两个单独的单词而不用逗号。如果没有逗号,则应该打印出错误消息。输入“q”将退出该程序。当输入“q”时,它完美地工作。它也可以在没有逗号的情况下工作,但是在输出后它会添加以下错误消息:
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 :(得分:0)
您不需要while循环:
while (!noComma) {
它将是无限的,因为除非输入中没有逗号,否则不会设置noComma。之后的if语句以我认为你想要的方式处理这个条件:
if (userInput.indexOf(',') < 0) {
答案 1 :(得分: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;
}
当我输入没有逗号时它来到第一个其他并且由于条件匹配它在循环中输入noComma并且打印消息它设置noComma标志现在它不能作为第一个条件为false而在else中输入所以它现在永远不会进入其他条件所以现在只是检查这个条件
while (!inputDone) {userInput = scnr.nextLine();
if (userInput.equals("q")) {
System.out.println(" Exiting.");
inputDone = true;
}
有一个无限的while循环,它接受输入但只是搜索“q”所以当你通过Ctrl + c终止这个程序时,它将以该异常结束。
如果我在任何地方都错了,请纠正我。