2016-06-12 5 views
0

Ich versuche, Werte in ein Array von Typ Urlaub setzen, aber ich bekomme Fehler , wenn ich die Werte Wenn der Index i wird 1 (in der for-Schleife) .Klasse Java - Array der Klasse, Empfangen von Daten vom Benutzer

Ist dies der richtige Weg, um die Werte in den Konstruktor zu erhalten?

Der Fehler, den ich bekommen:

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) 

Der Haupt:

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

Die Klasse:

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

danken der

+0

Was geben Sie als Eingabe? –

+0

aaa >>>> bbb >>>> 1 >>>> ccc >>>> vvv ---- >>>> hier der Fehler Start – liran

+0

Dies ist keine gute Möglichkeit zum Einfügen von Elementen, Ihre Scanner könnte nicht einmal Ergebnisse zurückgeben, also sollten Sie Dinge umschließen, bevor Sie irgendetwas mit ihnen machen wie folgt: while (in.hasNext()) {} – neocorp

Antwort

1

Vergessen Sie nicht next() nach verwenden benutzen d nextInt(), um den Rest der ungelesenen Zeichen zu verbrauchen.

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

Hier Ihr Eintrag ist

aaa bbb 1 ccc vvv 

Wenn Sie in.next() nicht verwenden, ist es das, was passieren wird:

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

aber ich drücke die Enter nach jedem Eintrag – liran

+0

@liran Das Problem ist, dass Sie nicht 'in.next()' nach 'nextInt()' –

+0

für das, was: in.next(); in der für? – liran

1

Nur in.next() anstelle von in.nextLine(). Klicken Sie auf here, um den Unterschied zu sehen.

+0

Dies ist nicht, was das Problem beheben wird. –