繁体   English   中英

而+扫描仪与System.in + hasNext

[英]while + Scanner with System.in + hasNext

我应该写一个程序来处理用户输入,并将其翻译成Pig Latin,然后打印出来。 我翻译成猪拉丁文的指示是:

猪拉丁语是英语,最初的辅音移到每个单词的末尾,后跟“ ay”。以元音开头的单词仅附加了“ ay”。 例如,短语“蘑菇蓝色的最深阴影”在“猪拉丁”中将具有以下外观:e-Thay最深的一天ade-shay的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在Scanner中测试了它,它起作用了。请帮帮我!

我认为正在等待其他输入。 已发送EOF信号,因为代码中没有其他终止逻辑。 您可以在调试中运行它(在循环中使用断点进行验证,

您的代码可以工作,但是如果稍加调整,可能会更好地工作,以便在输入时完全处理并打印每一行。 我建议:

  • 使用while扫描仪获取每一行都有下一行,然后是nextLine()
  • 通过split将行拆分为令牌
  • 处理并打印每个令牌,并留一个空格
  • println在这时结束。
  • 添加一些结束条件,以便您的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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM