2016-06-12 8 views
0

からデータを受信します。クラスのjava - クラスの配列、私はタイプの休日の配列に値を入れしようとしているが、インデックスiは1(ループのために)なると私は値を入れたときに、私はエラー を取得し、ユーザ

これはコンストラクタに値を受け取るための正しい方法は何ですか?

私が取得エラー:

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; 
} 
} 

感謝の

+0

あなたは、入力として何を与えていますか? –

+0

aaa >>>> bbb >>>> 1 >>>> ccc >>>> vvv ---- >>>>エラースタート – liran

+0

これは要素を挿入する良い方法ではありません。あなたはそのように彼らと何かを行う前に周りのものをラップする必要がありますので、スキャナでも何も結果を返さない場合があります – neocorp

答えて

1

がした後next()を使用することを忘れないでください。つかいますd 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(); 
} 

あなたは、これは何が起こるかである、in.next()を使用しない場合は、あなたのエントリが

aaa bbb 1 ccc vvv 

です:

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** 
+0

が、私は問題@liran各エントリ – liran

+0

後にEnterキーを押しますが、あなたは 'in.next()を使用していなかったということである' '後nextInt()'何のため –

+0

:in.next ();のために?私は内書き 'nextInt()' – liran

1

ただin.next()の代わりin.nextLine()を使用しています。 違いを見るにはhereをクリックしてください。

+0

これは問題を解決するものではありません。 –

関連する問題