当前位置: 首页 > 知识库问答 >
问题:

当扫描仪带系统时。在hasNext中

赫连实
2023-03-14

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

Pig Latin是英语,每个单词的开头辅音都移到末尾,后跟“ay”。以元音开头的单词只需附加“ay”即可。例如,在Pig Latin中,短语“蘑菇蓝的最深阴影”会出现如下:e-Thay eepest day 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在扫描仪中测试了它,它起作用了。请帮帮我!

共有2个答案

令狐功
2023-03-14

您的代码可以工作,但如果您稍微调整它,使其在输入每一行时都能完全处理和打印,则可能会工作得更好。我建议:

    < li >使用while扫描仪获取每一行,然后< code>nextLine() < li >通过拆分将行拆分为令牌 < li >用空格处理和打印每个令牌 < li >在结束时打印。 < li >添加一些结束条件,以便while循环知道何时退出,然后程序将知道何时结束。 < li >不要忘记使用< code>equals(...)或< code>equalsIgnoreCase(...)进行退出测试,而不是< code>==。或者您可以使用<代码>包含(...)

例如

  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是公共静态字符串EXIT="export";

胡泓
2023-03-14

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

 类似资料:
  • 我必须创建一个java类,我可以从标准控制台读取一些命令。这就像模拟网格中的运动。我很难完全创建我想要的东西。假设我有这样的命令: 从X、Y、方向开始 步子 “X”和“Y”是矩阵6x6的坐标。“方向”可以是“上”、“下”、“左”、“右”。如果我写“步骤”,我会做一步。 程序应该丢弃STEP命令,直到有效的START命令被执行。之后,我可以使用STEP或另一个有效的START命令,它将使用新的坐标将

  • 我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。

  • 我写了这个正则表达式

  • 问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和

  • 问题内容: 使用Scanner类中的useDelimiter时遇到一些问题。 如果我有这个输入 美国广播公司 输出将是 AB 然后等到我键入另一个“-”以打印出最后一个字符 但是,如果我没有用户输入数据,而是将字符串插入到Scanner中,则代码将起作用。原因是什么?如何解决?我不想使用StringTokenzier 问题答案: 如果没有等待您输入另一个,则将错误地假定您已完成输入。 我的意思是,

  • 我做了一个程序,要求3个整数来输出三角形的类型。所有内容都成功运行和编译,但是,在要求用户查看是否要再次循环的部分,联机编译器会输出错误: 异常线程"main"java.util.NoSuchElement异常在java.util.Scanner.throwFor(Scanner.java:838)在java.util.Scanner.next(Scanner.java:1347)在Assignm