2014-11-18 2 views
1
public class Valtiotesti 
{ 
    public static void main(String[] args) 
    { 
     Scanner lukija = new Scanner(System.in); 
     String nimi, pääkaupunki; 
     int asukasluku; 

     ArrayList<Valtio> valtiot = new ArrayList<Valtio>();  

     do{ 
      System.out.println("Anna valtion nimi: "); 
      nimi = lukija.nextLine(); 

      if(nimi.length()>0){ 
       System.out.println("Anna ko. valtion pääkaupunki: "); 
       pääkaupunki = lukija.nextLine(); 
       System.out.println("Anna ko. valtion asukasluku: "); 
       asukasluku = lukija.nextInt(); 
       Valtio valtio = new Valtio(nimi, pääkaupunki, asukasluku); 
       valtiot.add(valtio); 
      } 
     } 
     while(nimi.length()>0); 
    } 
} 

У меня есть эта проблема с моим кодом: я хочу прочитать страны в ArrayList, содержащий название страны (НИМИ), капитал (pääkaupunki) и население (asukasluku), до тех пор, пока пользователь не введет пустым string как имя страны (просто нажмите клавишу ввода).Do-то время проблема петли

Однако, когда код входит в следующий раунд, netbeans просто печатает вопрос: «Anna valtion nimi:» (укажите название страны) и заканчивает программу (BUILD SUCCESSFUL), не давая возможности войти в новую страну .. .

ответ

4

Вы должны добавить nextLine после вашего nextInt потреблять остальную часть линии, которая содержала что int:

if(nimi.length()>0){ 
     System.out.println("Anna ko. valtion pääkaupunki: "); 
     pääkaupunki = lukija.nextLine(); 
     System.out.println("Anna ko. valtion asukasluku: "); 
     asukasluku = lukija.nextInt(); 
     Valtio valtio = new Valtio(nimi, pääkaupunki, asukasluku); 
     valtiot.add(valtio); 
     lukija.nextLine(); 
    } 
+0

Пожалуйста, объясните мне. Спасибо –

+1

@dovy 'lukija.nextInt()' читает часть строки (новая строка не читается). Поэтому в следующей итерации цикла 'nimi = lukija.nextLine();' получает эту новую строку вместо следующей строки, поэтому 'nimi.length' равно 0 (новые строковые символы усекаются) и цикл выйдет. – Eran

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