2014-03-01 4 views
1

Моя программа требует, чтобы пользователи вводили некоторые данные. Моя проблема заключается в том, что при ее запуске он показывает первый вопрос, а затем сразу переходит к второму вопросу, не дожидаясь ввода пользователя. Мой друг предложил положить sc.nextLine(), он действительно работал впервые, но когда он зациклился, он дал мне дополнительное пространство и фактически сохранил пространство для моего объекта. Для иллюстрации, когда я запускаю его, он показывает:java Программа не ждет ввода пользователем

Оригинал: Введите позицию № 1: Сколько мест (использование может ввести)

С дополнительным sc.nextLine: Введите позицию № 1: (пользователь можно ввести) Сколько мест:

НО второй раз показывает: Введите позицию № 2: (пользователь может ввести) (а затем пространство) , а затем следующий вопрос: Сколько мест:

Ниже мой код в моем основном классе. Заранее спасибо.

package election; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.lang.StringBuilder; 

public class Election { 

    public static void main(String[] args) { 
     int maxpos; 
     int count; 
     int maxcan; 
     int cancount; 
     String name; 
     int num; 
     String position; 
     int posnum; 
     int seat; 
     String party; 
     int vote; 

     Scanner sc = new Scanner(System.in); 
     ArrayList<Candidate> list = new ArrayList<Candidate>(); 
     Candidate c; 

     do{ 
      System.out.print("How many positions for this election: "); 
      maxpos = sc.nextInt(); 
      for(count = 1; count<=maxpos; count++){ 
       System.out.print("Enter position no. " + count + ": "); 

       position = sc.nextLine(); 
       sc.nextLine(); 
       posnum = count; 
       System.out.print("How many seats: "); 
       seat = sc.nextInt(); 
       System.out.print("Enter number of candidates: "); 
       maxcan = sc.nextInt(); 

       for(cancount = 1; cancount<=maxcan; cancount++){ 
        System.out.print("Enter candidate no. " + cancount + " name: "); 
        name = sc.nextLine(); 

        num = cancount; 
        System.out.print("Enter candidate no. " + cancount + " party: "); 
        party = sc.nextLine(); 
        c = new Candidate(name, num, position, posnum, seat, party); 
        list.add(c); 
       } 
      } 
     }while(!(count > maxpos)); 

     for(int i = 0; i<list.size(); i++){ 
      list.get(i).displayInfo(); 
     } 
    } 
} 
+0

possi двойного дубликата [Пропуск nextLine() после использования nextInt()] (http://stackoverflow.com/questions/13102045/skipping-nextline-after-use-nextint) или [Проблема с сканером при использовании nextLine после следующегоXXX] (http: //stackoverflow.com/questions/7056749/scanner-issue-when-using-nextline-after-nextxxx) – Pshemo

ответ

1

Всякий раз, когда вы используете nextInt(), вам нужно поставить nextLine() после него

System.out.print("How many seats: "); 
        seat = sc.nextInt(); 
        sc.nextLine(); 
        System.out.print("Enter number of candidates: "); 
        maxcan = sc.nextInt(); 
        sc.nextLine(); 

Это будет потреблять неповрежденный символ \n из потока

1

Вместо использования сканера, вы можете использовать ReadLine() из DataInputStream

DataInputStream din=new DataInputStream(System.in); 
System.out.print("Enter number of candidates: "); 
int maxcan =Integer.parseInt(din.readLine()); 
Смежные вопросы