类java - 类的数组,从用户

时间:2016-06-12 09:34:33

标签: java class

我试图将值放入类型为假日的数组中,但是我得到了错误 当我把值放在索引i变为1时(在for循环中)。

这是将值接收到构造函数中的正确方法吗?

我得到的错误:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at ExamQ1.main.main(main.java:13) 

主要:

import java.util.Scanner;

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

    Holiday[] h = new Holiday[4];

    for (int i = 0; i < h.length; i++) {
        System.out.println(i);
        h[i] = new Holiday(in.nextLine(), in.nextLine(), in.nextInt());
    }
}
}

班级:

public class Holiday {
private String name;
private String hebrewMonth;

private int vacationDays;

public Holiday(String name, String hebrewMonth, int vacationDays) {
    this.name = name;
    this.hebrewMonth = hebrewMonth;
    this.setVacationDays(vacationDays);
}

public void setName(String name) {

    this.name = name;
}
public String getName() {
    return this.name;
}
public void sethebrewMonth(String hebrewMonth) {
    this.hebrewMonth = hebrewMonth;
}
public String getHebrewMonth() {
    return this.hebrewMonth;
}

public void setVacationDays(int vacationDays) {
    this.vacationDays = vacationDays;
}

public int getVacationDays() {
    return this.vacationDays;
}

public String toString() {
    String str = "name: " + this.name + ",hebrew Month: "
            + this.hebrewMonth + ",vaction days: " + this.vacationDays;
    return str;
}
}

感谢&#39; S

2 个答案:

答案 0 :(得分:1)

在使用next()消耗剩余的未读字符后,请不要忘记使用nextInt()

for (int i = 0; i < h.length; i++) {
    System.out.println(i);
    h[i] = new Holiday(in.nextLine(), in.nextLine(), in.nextInt());
    in.next();
}

这是您的参赛作品

aaa bbb 1 ccc vvv

如果您不使用in.next(),则会发生这种情况:

LOOP 1 :

in.nextLine()    ->    aaa
in.nextLine()    ->    bbb
in.nextInt()     ->    1

//This looks OK.

LOOP 2 :

in.nextLine()    ->    **UNREAD CHARACTER LEFT AFTER in.nextInt()**
in.nextLine()    ->    ccc
in.nextInt()     ->    vvv **INPUT MISMATCH BECAUSE IT IS NOT AN INT**

答案 1 :(得分:1)

只需使用in.next()代替in.nextLine()。 点击here查看差异。