我需要编写一个Java程序,它接收一行文本作为输入,然后反向输出这行文本。程序重复,当用户为文本行输入“完成”、“完成”或“d”时结束。
例如,如果输入为:
Hello there
Hey
done
输出应为:
ereht olleH
yeH
enod
以下是我的当前代码:
import java.util.Scanner;
public class LabProgram
{
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
String userInput;
int numCharacter;
int i;
userInput = scnr.nextLine();
while((!userInput.equals("Done")) &&
(!userInput.equals("done")) && (!userInput.equals("d")))
{
numCharacter=userInput.length();
for (i=numCharacter; i>0; --i)
{
System.out.print(userInput.charAt(i-1));
}
}
System.out.println();
userInput = scnr.nextLine();
}
}
我得到这个错误:
Program generated too much output.
Output restricted to 50000 characters.
Check program for any unterminated loops generating output.
2条答案
按热度按时间gzszwxb41#
我建议你读一些关于Java中的scanner类的文章。https://www.w3schools.com/java/java_user_input。
有些事情需要考虑。
首先,你可能希望nextLine在循环中:)。目前你没有抓住新的用户输入。从那里开始
每次在终端中输入新字符串并希望输入时,都需要调用nextLine。这可以通过在用户按下回车键时检入while循环来完成。
祝你好运
lnlaulya2#
简短的回答是,在你第一次阅读
userInput
之后,你并没有阅读更多的userInput
。你需要这样做,否则你的程序将永远循环。但是,我会 * 简化 * 代码。首先编写一个方法来测试
String
是否与done的定义匹配。比如接下来,Java提供了
StringBuilder
来创建 * 可变的 * 字符序列(和它有一个reverse()
方法)。因此,main
可以简单为最后,我们可以使用赋值的副作用来简化为您可能认为具有的形式
现在我们不需要复制
userInput = scnr.nextLine()