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的主要内容,如果未能解决你的问题,请参考以下文章

scanner

java的Scanner类的hasNext()方法问题

java从键盘接受字符串行BufferedReader(InputStreamReader(System.in))这样用BufferedReader对象读取行

Java学习笔记之[ 利用扫描仪Scanner进行数据输入 ]

3 常用API

字节流 system.in