为什么我的Java程序中会出现InputMismatchException?

时间:2017-12-04 17:54:13

标签: java eclipse methods switch-statement java.util.scanner

我在Java中创建了一只正在工作的狗var database = firebase.database(); var ref2 = database.ref('information/'); var id; var name; ref2.on("value", function(one) { one.forEach(function(two) { if (typeof two.val().Id !== 'undefined') { id = two.val().Id; function program() { return new Promise(function(resolve, reject) { try { var database = firebase.database(); var ref = database.ref("users/" + id + "/"); ref.on('value', function(user) { resolve(user.val().name); }) } catch (e) { reject(e) } }); } program().then(function(result) { name = result; //I initialize the name variable here and note that if I do alert (result), it does alert a string but it wont change the name variable. }).catch(function(error) { console.log(error) }) } alert(name); //returns undefined. Why? }); }); }; (在eclipse中)。但是当我测试它时,我得到了kennel/pound。 我对InputMismatchException和案件的处理方式有问题吗?或者我{​​{1}}的某些内容?该程序正在编译,所以我不明白。 分配中的一个要求是程序接受这些命令:

  • 注册新狗
  • 增加年龄
  • list dogs
  • 删除狗
  • 出口

另一个要求是测试程序必须识别单词"错误"。 请帮帮我!!!

这是狗类:

switch-statement

这是Main class:

Scanner

问题在于:

import java.util.*;

public class Dog {

    private String dogName;
    private String dogRace;
    private int dogAge;
    private double dogWeight;

    public Dog(String name, String race, int age, double weight){
    this.dogName = name;
    this.dogRace = race;
    this.dogAge = age;
    this.dogWeight = weight;
    }

    public String getDogName (){ 
        return this.dogName;
    }
    public String getDogRace (){
        return this.dogRace;
    }
    public void birthday(){
        dogAge = dogAge+1;
    }
    public int getDogAge(){
        return this.dogAge;
    }
    public double getDogWeight(){
        return this.dogWeight;
    }
    public double getDogTailLength(){
        if (!getDogRace().equalsIgnoreCase("Tax"))
        if(!getDogRace().equalsIgnoreCase("Dachshund")){
            return ((dogAge * dogWeight)/ 10);

        }
        return 3.7;
    }

    public String toString(){
        return "Name: " + getDogName() + ", Race: " + getDogRace() + ", Age: " + getDogAge() + ", Weight: " + 
                getDogWeight() + ", Tail: " + getDogTailLength();

    }
}

我在每种情况下都得到了这个!!

3 个答案:

答案 0 :(得分:0)

您收到InputMismatchException,因为您输入了String作为输入,但int write = scan.nextInt();期待来自int的{​​{1}}值,因此user mismatch。如果您输入选项的编号而不是datatype,您的代码将正常工作,但仍需要为输入string更改

答案 1 :(得分:0)

我最好的猜测是,当VPL测试您的程序时,它会提供无效输入来测试您是否正确处理了无效输入。而且你不是。

如果您已经了解了catch和{{1}}块,那么这将是实现该知识并捕获错误的好时机,以便您可以正确处理它。

答案 2 :(得分:0)

您正在获取InputMismatchException,因为您要求Main类中的用户使用int。检查public static void main(String [] args)

中的以下行
  

int write = scan.nextInt();

如果输入除整数之外的任何内容,则会抛出异常。 您可以添加try catch块来处理不需要的输入。它看起来应该如下所示。这将处理非整数的输入,并为用户提供选择正确输入的选项。

public static void main(String[] args) {
    Main kennel = new Main();
    while (true) {
        try {
            System.out.print(kennel.dogMenu() + "\n");
            int write = scan.nextInt();
            switch (write) {
            case 1:
                kennel.addDog();
                break;
            case 2:
                kennel.ageDog();
                break;
            case 3:
                kennel.dogTail();
                break;
            case 4:
                kennel.deleteDog();
                break;
            case 5:
                kennel.exit();
            default:
                System.out.println(kennel.error());
            }

        } catch (InputMismatchException e) {
            System.out.println(kennel.error());
            scan.nextLine();
        }
    }
}

我不确定,你的意思是什么“另一个要求是测试程序必须识别”错误“这个词。请帮助我!!!”。如果您能提供更多意见,我可以尝试提供帮助。