【问题标题】:while + Scanner with System.in + hasNextwhile + 带有 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 看看发生了什么。
  • 显示您在控制台中输入的内容。
  • 随便随便写几个字,没关系,应该万能的。

标签: java input java.util.scanner


【解决方案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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多