2014-10-01 72 views
0

我編寫了一個程序,該程序具有用戶的數組列表,因此它應該創建一個新用戶並將用戶的名稱存儲在數組列表中或從數組列表中選擇一個現有用戶。問題是,當我運行代碼時,我可以選擇一個選項,但是當我想創建一個新用戶時,我無法輸入任何內容。爲什麼會發生這種情況,我該如何解決這個問題?讀取一個字符串並將其添加到ArrayList中

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Scanner; 

public class Main { 

private ArrayList<String> users; 

public static void main(String[] args) { 
    Main m = new Main(); 
    m.menu(); 
} 

public void createNewUser(String name) { 
    users.add(name); 
} 

public boolean search(String username) { 
    if (users.contains(username)) 
     return true; 
    else 
     return false; 
} 

public void displayUsers() { 
    Iterator<String> itr = users.iterator(); 
    while (itr.hasNext()) { 
     String name = itr.next(); 
     System.out.println(name); 
    } 
} 

public void menu() { 
    users = new ArrayList<String>(); 
    int choice = 0; 
    String name; 
    Scanner input = new Scanner(System.in); 

    System.out.println("Choose an option:"); 
    System.out.println("1- Create new user"); 
    System.out.println("2- Select current user"); 

    choice = input.nextInt(); 

    if (choice == 1) { 
     System.out.println("Enter your name: "); 
     name = input.nextLine(); 
     createNewUser(name); 
     displayUsers(); 
    } else { 
     do { 
      displayUsers(); 
      System.out.println("Enter your username: "); 
      name = input.nextLine(); 
      if (search(name)) { 
       System.out.println("User found"); 
       break; 
      } 
      else 
       System.out.println("This username does not exist."); 
     } while (!search(name)); 

    } 

} 
} 
+1

衆所周知的行爲,你必須使用新行[檢查此答案](http://stackoverflow.com/questions/13102045/skipping-nextline-after-use-nextint) – gtgaxiola 2014-10-01 18:14:47

+1

爲什麼使用'if' -'else'在'search()'方法;你只需要'返回users.contains(用戶名)',這就消除了首先從'contains()'中分離出一個方法的需要...... – bcsb1001 2014-10-01 18:17:23

回答

0
System.out.println("Choose an option:"); 
    System.out.println("1- Create new user"); 
    System.out.println("2- Select current user"); 

    choice = input.nextInt(); 
    input.nextLine(); 

嘗試增加input.nextLine();在你選擇之後。

+0

雖然這可能解決問題,但也可以提供解釋爲什麼問題發生了,爲什麼你的解決方案會糾正它,以便OP和其他讀者可以從中學習。 – Pshemo 2014-10-01 18:25:51

+0

我試過這樣做,它不起作用 – 2014-10-01 18:28:00

+0

它應該工作對我有用你有什麼問題?錯誤信息? – brso05 2014-10-01 18:29:52

相關問題