短信缩写解码器:NoSuchElementException

问题描述 投票:0回答:2

我需要帮助开发我正在尝试组装的短信缩写解码器。程序的第一部分应该这样做:“如果用户的输入字符串与已知的文本消息缩写匹配,则输出未缩写的形式,否则输出:未知。支持两种缩写:LOL - 大声笑,和 IDK - 我不知道不知道。”然后:“扩展以解码这些缩写。BFF - 永远最好的朋友,恕我直言 - 以我的愚见和 TMI - 太多信息。

这是我到目前为止的代码:

import java.util.Scanner;

public class TextMsgAbbreviation {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        String textMsg = "";
        {
            String BFF = "best friends forever";
            String IMHO = "in my humble opinion";
            String TMI = "too much information";
            String LOL = "laughing out loud";
            String IDK = "i don't care";

            System.out.println("Input an abbreviation:" + " ");

            textMsg = input.next();

            if (textMsg.compareTo("LOL") == 0) {
                System.out.println(LOL);
            } else if (textMsg.compareTo("IDK") == 0) {
                System.out.println(IDK);
            } else if (textMsg.compareTo("BFF") == 0) {
                System.out.println(BFF);
            } else if (textMsg.compareTo("IMHO") == 0) {
            }
        }
    }
}

这是我得到的输出:

Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Scanner.java:862)
        at java.util.Scanner.next(Scanner.java:1371)
        at TextMsgAbbreviation.main(TextMsgAbbreviation.java:17)

我做错了什么?

java java.util.scanner nosuchelementexception
2个回答
0
投票

根据 Java API 文档,当没有更多令牌可供读取时,

next()
方法会抛出
NoSuchElementException
。因此,建议在调用
hasNext()
类中的
next()
方法之前先调用
Scanner
方法,以确保有令牌可供读取。所以,尝试如下所示:

if(input.hasNext()) {
    textMsg = input.next();
}

顺便说一句,从 Java 7 开始,

switch
语句可以接受
String
输入,因此您可以尝试在代码中使用它。在我个人看来,它比使用多个 if-else 循环更具可读性。 一个例子:

    switch(textMsg) {
        case "LOL" : System.out.println(LOL);
                     break;
        case "IDK" : System.out.println(IDK);
                     break;
        case "BFF" : System.out.println(BFF);
                     break;
        case "IMHO": System.out.println(IMHO);
                      break;
        default    : System.out.println("Unknown");
   }

0
投票

需要在输入框中输入显示的值 862 1371 17。下面是该问题的工作代码。

    import java.util.Scanner;

    public class TextMsgDecoder {
    public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);

     String userInput;
    System.out.println("Enter text:");
    userInput = scnr.nextLine();
    System.out.println("You entered: " + userInput);
    if(userInput.indexOf("BFF") != -1) {
        System.out.println("BFF: best friend forever");
    }
    if(userInput.indexOf("IDK") != -1) {
        System.out.println("IDK: I don't know");
    }
    if(userInput.indexOf("JK") != -1) {
        System.out.println("JK: just kidding");
    }
   if(userInput.indexOf("TMI") != -1) {
        System.out.println("TMI: too much information");
   }
  if(userInput.indexOf("TTYL") != -1) {
        System.out.println("TTYL: talk to you later");
   }

} }

© www.soinside.com 2019 - 2024. All rights reserved.