while + 带有 System.in 的扫描仪 + hasNext
Posted
技术标签:
【中文标题】while + 带有 System.in 的扫描仪 + hasNext【英文标题】:while + Scanner with System.in + hasNext 【发布时间】:2013-12-19 16:59:27 【问题描述】:我应该编写一个程序来处理用户输入并将其翻译成 Pig Latin 并打印出来。我翻译成猪拉丁语的指令是:
Pig Latin 是英语,首字母移到每个单词的末尾,然后是“ay”。以元音开头的单词只是附加了一个“ay”。例如,短语 最深的蘑菇蓝 在 Pig Latin 中将有以下外观: e-Thay 最重要的一天 ade-shay of-ay ushroom-may ue-blay
所以我写了这个程序:
import java.util.Scanner;
public class Nothing
public static void main(String args[])
System.out.println("Enter sentence that has to be translated into Pig Latin ");
Scanner console = new Scanner(System.in);
String token = console.next();
String translated = processToken(token) + " ";
while(console.hasNext())
token = console.next();
translated = translated + processToken(token) + " ";
System.out.println(translated);
public static String processToken(String token)
String processed = "";
if(!(fC(token) == 'a' || fC(token) == 'e' || fC(token) == 'i' || fC(token) == 'o' || fC(token) == 'u' || fC(token) == 'y'))
if(fC(token) != 't')
processed = token.substring(1) + "-" + token.charAt(0) + "ay";
else
processed = token.substring(2) + "-" + token.substring(0, 2) + "ay";
else
processed = token + "-ay";
return processed;
public static char fC(String token) //returns first character in lowercase
return Character.toLowerCase(token.charAt(0));
它不起作用:(我输入了输入但它没有做任何事情:/我在扫描仪中用一个简单的字符串而不是 System.in 对其进行了测试,它起作用了。请帮助我!
【问题讨论】:
做一些调试。至少你应该考虑在你的代码中添加 println's 看看发生了什么。 显示您在控制台中输入的内容。 随便随便写几个字,没关系,应该万能的。 【参考方案1】:我认为正在等待额外的输入。已发送 EOF 信号,因为您的代码中没有其他终止逻辑。您可以在调试中运行它(在循环中使用断点进行验证,
【讨论】:
+1。我同意。 OP 可能应该使用打印语句来提示输入下一个单词/短语【参考方案2】:您的代码可以工作,但如果您稍微调整一下,它可能会更好地处理并打印输入的每一行。我建议:
使用 while 扫描仪获取每一行,然后是下一行,然后是nextLine()
通过 split 将行拆分为标记
处理和打印每个令牌,带空格
println 在 while 结束时。
添加一些结束条件,以便您的 while 循环知道何时退出,然后程序将知道何时结束。
不要忘记使用equals(...)
或equalsIgnoreCase(...)
进行退出测试,而不是==
。或者你可以使用contains(...)
例如
System.out.println("Enter sentence that has to be translated into Pig Latin ");
Scanner console = new Scanner(System.in);
while (console.hasNextLine())
String line = console.nextLine(); // get whole line
String[] tokens = line.split("\\s+"); // split it on whitespace
for (String token : tokens)
// process and print out each token
System.out.print(processToken(token) + " ");
System.out.println(); // print out new line
// check if line contains "exit"
if (line.toLowerCase().contains(EXIT))
break;
if (console != null)
console.close();
EXIT 是public static String EXIT = "exit";
【讨论】:
以上是关于while + 带有 System.in 的扫描仪 + hasNext的主要内容,如果未能解决你的问题,请参考以下文章
java从键盘接受字符串行BufferedReader(InputStreamReader(System.in))这样用BufferedReader对象读取行