我在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}}的某些内容?该程序正在编译,所以我不明白。
分配中的一个要求是程序接受这些命令:
另一个要求是测试程序必须识别单词"错误"。 请帮帮我!!!
这是狗类:
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();
}
}
我在每种情况下都得到了这个!!
答案 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();
}
}
}
我不确定,你的意思是什么“另一个要求是测试程序必须识别”错误“这个词。请帮助我!!!”。如果您能提供更多意见,我可以尝试提供帮助。