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

挂起的未捕获异常线程[main](挂起(未捕获异常输入不匹配异常))

阎晗日
2023-03-14

我只是在练习java,目前我正在试验getter/setter方法和构造函数。java程序的工作原理是,我能够将用户输入存储到对象中,但当我将字符串“Dice and rollers”输入到gametype字符串变量中时,会出现一个挂起的未捕获异常InputMismatch错误。

有人能给我解释一下这是为什么吗?

另外,我在下面分享了我的源代码。

    package test;

import java.util.Scanner;

public class Test8a {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        System.out.println("Please enter the following information: Boardgame name, Alternative Name, Game Type, Year Released, Price and Maximum amount of Players");
        String name = in.next();
        String secondaryname = in.next();
        String type = in.next();
        int date = in.nextInt();
        double price = in.nextDouble();
        int player = in.nextInt();
        System.out.println();
        
        new Test8b(name, secondaryname, type, date, price, player);
    }
}

上面的是超类,下面的源代码是构造函数和getter/setter java文件。

package test;

public class Test8b {
    private String boardname;
    private String secondaryname;
    private String gametype;
    private int date;
    private double price;
    private int numberofPlayers;
    
    public Test8b(String boardname, String secondaryname, String gametype, int date, double price, int players) {
        setBoardname(boardname);
        setSecondaryname(secondaryname);
        setGametype(gametype);
        setDate(date);
        setPrice(price);
        setNumberofPlayers(players);
        
        this.printDetails();
    }

    public String getBoardname() {
        return boardname;
    }
    
    public String getSecondaryname() {
        return secondaryname;
    }

    public String getGametype() {
        return gametype;
    }

    public int getDate() {
        return date;
    }

    public double getPrice() {
        return price;
    }
    
    public int getNumberofPlayers() {
        return numberofPlayers;
    }

    public void setBoardname(String boardname) {
        if (boardname.length() >= 15) {
            System.out.println("There is no boardgame with this name length! Please enter a valid name!");
        } else this.boardname = boardname;
    }
    
    public void setSecondaryname (String secondaryname) {
        if (secondaryname.length() >= 15) {
            System.out.println("There is no boardgame with this name length! Please enter a valid name!");
        } else this.secondaryname = secondaryname;
    }

    public void setGametype(String gametype) {
        this.gametype = gametype;
    }

    public void setDate(int date) {
        if (date > 2021) {
            System.out.println("This game haven't been invented yet or are you a time traveller?");
        } else this.date = date;
    }

    public void setPrice(double price) {
        if (price <= 0) {
            System.out.println("Can't give away free games!");
        } else this.price = price;
    }

    public void setNumberofPlayers(int numberofPlayers) {
        if (numberofPlayers <= 0) {
            System.out.println("Need someone to play the game!");
        } else this.numberofPlayers = numberofPlayers;
    }
    
    public void printDetails() {
        System.out.print(
                "Board Game: " + this.getBoardname() + "\n" +
                "Alternative Title: " + this.getSecondaryname() + "\n" +
                "Game Type: " + this.getGametype() + "\n" +
                "Year Released: " + this.getDate() + "\n" +
                "Price: " + this.getPrice() + "\n" +
                "Maximum # of Players: " + this.getNumberofPlayers() + "\n"
                );
    }
}

共有1个答案

云育
2023-03-14

Scanner对象的next()方法引发异常,因为在输入带空格的字符串时输入的内容与用于扫描的扫描仪的默认分隔符模式不匹配。当您输入带空格的字符串时,扫描仪会看到一行字符,而不仅仅是一个输入字。换句话说,它区分单个单词和由空格分隔的一行单词。

java。util。扫描仪。nextLine()方法使扫描器前进超过当前行,并返回跳过的输入,这是您应该用来扫描游戏类型的方法。修改代码以使用扫描仪。nextLine()用于游戏类型和可能包含多个单词的任何其他类型。

 类似资料:
  • 对GUI非常陌生。试图使我的代码在用户将textfield留空或用户未输入整数时捕获异常。当我使用InputMismatchException时,GUI窗口将继续工作,但NetBeans上的输出窗口将出现大量错误。 当我将catch块切换到NumberFormationException时,输出窗口上没有任何内容,但是GUI窗口停止工作,因为我不能输入任何内容、更改任何内容,甚至在不强制停止运行的

  • 问题内容: 为什么Java中的某些异常未被捕获?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。 我得到一个 但这有效 我懂了 我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常? 问题答案: 因为某些异常不是源自-例如和。 基本上,类型层次结构是: 只能抛出派生类,因此,如果您抓住,那实际上就可以抓住一切。 ,以及任何异常,从获得 其他 比那些源自数作为 检查的异常 -他们

  • 我对Java线程、Runnable等相当陌生。因此,我想知道为什么下面的代码没有捕获异常? 阅读有没有一种方法可以使Runnable的run()引发异常,我收集到: "...如果您的run()方法确实是Thread的目标,则抛出异常是没有意义的,因为它是不可观察的;抛出异常与不抛出异常(无)具有相同的效果。"(@erickson) 我应该检查Runnable.run()方法中的异常。 为什么会这样

  • 为什么Java中的一些异常不被捕获?这是完全失败的代码,有一个未处理的异常。(Java版本1.4)。 我在线程“main”java中得到了一个 但这行得通 我在java中没有发现任何方法错误。lang.NoSuchMethodError: 我以为捕获异常会捕获所有异常?如何捕获java中的所有异常?

  • 我的用它的作用域启动coroutine 我的只处理一些逻辑,在本例中是某种验证器 然后我的只处理网络层/本地层 以下是我得到的错误日志: 错误直接指向显式的语句。

  • Twilio新手使用测试帐户。我按照这里列出的安装Twilio PHP的说明进行了安装:https://www.Twilio.com/docs/quickstart/php/sms 因为我得到了一个证书错误,所以我的主机提供程序建议我更改CURLOPT_SSL_VERIFYPEER=>false(从true改为true)。但现在我得到了这个错误。如何修复?:致命错误:未捕获异常“services_