2015-09-16 2 views
0

Так что у меня этот код:сканер пропускает ввод в цикле

public class Subjects { 
    String name; 
    int period; 
    char grade; 

public void period() 
{ 
    System.out.println("I have " + this.name + " during period " + this.period + "."); 
} 

public void study() 
{ 
    if (this.grade == 'B') 
    { 
     System.out.println("I study for " + this.name + ", so I get a B!"); 
    } 
    else if (this.grade == 'A') 
    { 
     System.out.println("I study for " + this.name + ", so I get an A!"); 
    } 
    else 
    { 
     System.out.println("I don't study for " + this.name + ", so I get a " + this.grade +". :("); 
    } 
} 

}

И этот тестовый класс:

import java.util.Scanner; 

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

    System.out.print ("How many classes do you have? "); 
    int x = kboard.nextInt(); 
    int y; 
    classes = new Subjects[x]; 

    for (int b = 0; b < x; b++) 
    { 
     classes[b] = new Subjects(); 
    } 

    for (int a = 0; a < x; a++) 
    { 
     y = a + 1; 
     System.out.println("Period " + y); 

     System.out.println ("Enter the subject name: "); 
     classes[a].name = kboard.nextLine(); 
     System.out.println ("Enter your class period: "); 
     classes[a].period = kboard.nextInt(); 
     System.out.println ("Enter your grade in the class: "); 
     classes[a].grade = kboard.next().charAt(0); 


    } 

    for (int i = 0; i < x; i++) 
    { 
     classes[i].period(); 
     classes[i].study(); 
    } 


} 

}

Что должно произойти, является пользователь вводит количество классов, которые у них есть (например, 8), а затем вводит имя, период и оценку для каждого из них. Затем в конце он печатает 2 оператора для каждого класса.

Однако, когда я запускаю программу (в Eclipse), после того, как она запрашивает How many classes do you have?, и пользователь отвечает, система распечатывает следующие два вопроса, не дожидаясь ответа на первый. Мое сообщение об ошибке выглядит так:

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 
at SubjectsTest.main(SubjectsTest.java:27) 

Зачем это происходит? Как я могу это исправить? Я новичок в Java, поэтому любая помощь будет высоко оценена!

+0

Похоже, он пытается получить 'int' назначить период, но вы не сделали введите 'int'. –

ответ

0

Вы должны положить kboard.nextLine(); после вашего звонка kboard.nextInt();, который получает количество классов.

Это будет прочитано в остальной части линии kboard.nextInt(); и позволит читать в вашем имени темы для правильной работы. В настоящее время ваш kboard.nextLine(); для чтения по названию темы читает в остальной части вашего ввода количество классов. Поэтому, когда вы пытаетесь прочитать в теме, это на самом деле ждет int за период и дает вам это исключение.

EDIT: К сожалению для всех правок, принятый ответ на этот вопрос мог бы сделать немного больше смысла: Using scanner.nextLine()

+0

Спасибо! Работает отлично! – TheFirstQuestion

 Смежные вопросы

  • Нет связанных вопросов^_^