所以我正在为学校编程。我遇到了这项任务,需要以下内容:
前:由sc检索的下一行包含一个House的文本表示。
发布:将众议院的文字表示转换为Houseobject。
提示:在地址
中使用thereadmethod
我们还需要用它创建一些JUnit测试。问题是我的测试给了我一个错误,但我不知道我做错了什么。
我认为我的JUnit测试是错误的,因为我只是复制粘贴它从上一个赋值并更改了一些值。它用inputmismatchException说了些什么,所以我注释掉了抛出ioexception但是这仍然没有改变任何东西。我做错了什么?
这是我的阅读之家和tostring方法,请注意我注释掉了我的IOException,因为我认为这是造成它的原因。
public static House read(Scanner sc) { //throws IOException
Address address = Address.read(sc);
int nRooms = sc.nextInt();
int salePrice = sc.nextInt();
House House = new House(address, nRooms, salePrice);
return House;
/**
* String representation of the house
*/
public String toString() {
String address = this.address +"";
String nRooms = this.nRooms + "";
String House = address +", "+ nRooms + ", " + salePrice;
return House;
这是我的地址读取和tostring方法:
public static Address read(Scanner sc) {
Address address = new Address(sc.next(), sc.next(), sc.next(), sc.next());
return address;
}
/**
* String representation of the object Address
*/
public String toString() {
street = street + " ";
number = number +" ";
zipCode = zipCode +" ";
String address = street + number + zipCode + city;
return address;
}
这是我对房子的读取方法的JUnit测试
@Test
//
public void testHouseRead() {
String input = "Janstraat 1 2324VK Leiden, 4, 250000";
Scanner sc = new Scanner(new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8)));
String test = House.read(sc).toString();
assertEquals(input, test);
}
答案 0 :(得分:0)
您收到InputMismatchException
。
Scanner.throwFor()
在调用Scanner.nextInt()
来电Scanner.nextInt()
来电Scanner.next()
来电Scanner.throwFor()
来调用Scanner.nextInt()
。
您的代码调用InputMismatchException
,因此您应该查看JavaDoc文档,看看它是否告诉您在什么情况下抛出public int nextInt()
。
House.java
将输入的下一个标记扫描为int。一个 调用nextInt()形式的这种方法完全符合 与调用nextInt(radix)相同,其中radix是默认值 扫描仪的基数。
<强>返回:强>
从输入中扫描的int
投掷:
InputMismatchException - 如果下一个标记与整数正则表达式不匹配,或者超出范围
NoSuchElementException - 如果输入已用尽
IllegalStateException - 如果此扫描程序已关闭
所以,“下一个标记与整数正则表达式不匹配,或者超出范围”。
Scanner.readInt()
的第79行正在调用Scanner
而Address.read()
未找到整数。
默认情况下,扫描程序使用空格分割输入。 "4,"
消耗前四个令牌。第五个标记是Scanner
。这与MODIS
文档描述的整数模式不匹配。
答案 1 :(得分:0)
查看Javadoc for Scanner。 Scanner
使用空格作为分隔符作为默认值,而输入字符串为Janstraat 1 2324VK Leiden, 4, 250000
。因此,您尝试在int
中读取的其中一个值为4,
,这显然不是数字。