2014-12-19 72 views
0

所以我有這樣的循環來基本上經歷和字符串的數組列表,然後從中取出的元件停止:刪除索引方法在第一索引(Java字符串數組)

public static void delete(List<String> users) { 
    boolean boucleretrait = true; 
    while (boucleretrait) { 
     System.out.print("del a user(1) or quit(2)?;"); 
     Scanner choice = new Scanner(System.in); 
     int choicedel = choice.nextInt(); 
     if (retraitchoix == 1) { 
      for (int index = 0; index < users.size(); index++) { 
       Scanner element = new Scanner(System.in); 
       System.out.print("enter name to delete \n"); 
       String elementdelete = element.nextLine(); 

       if (users.get(index).equals(elementdelete)) { 
        users.remove(index); 
        System.out.print(users); 
       } else { 
        System.out.print("not present\n"); 
        retrait(users); 
        boucleretrait = false; 
       } 
      } 
     } 
    } 
} 

然而,該方法只是比較在列表中,如果沒有合適的人的第一要素,只是走在別人循環而不檢查others.I不知道如何,如果需要修復that.Heres我的ArrayList:

ArrayList<String> users = new ArrayList<String>(); 
users.add("bob"); 
users.add("matthew"); 
users.add("Albert"); 
usagers.add("Jon"); 

謝謝您。

回答

3

而不是

if(users.get(index).equals(elementdelete)){ 
    users.remove(index); 
    System.out.print(users); 
} 

你想要的東西像

if(users.contains(elementdelete)) { 
    users.remove(elementdelete); 
    System.out.print(users); 
} 

您可能希望使比較包含情況下使用toLowerCase不敏感。對於這一點,你需要在列表中更改的條目

ArrayList<String> users = new ArrayList<String>(); 
users.add("bob"); 
users.add("matthew"); 
users.add("albert"); 
users.add("jon");  

然後用

if(users.contains(elementdelete.toLowerCase())) { 

我不認爲你需要循環的。

+0

感謝您的建議! – 2014-12-19 02:25:58

0

什麼是目前發生的是它進入for循環,檢查用戶第一,獲得虛假的users.get(index).equals(elementdelete)所以它不會進入,如果,進入別人,然後設置boucleretraitfalse,所以退出while循環。因此,在所有用戶都被檢查後,將boucleretrait設置爲false應該會發生。

除此之外,詢問用戶名稱也應該發生在for循環之外,否則每次循環時都會要求一個新名稱以檢查ArrayList中的下一個用戶。

牢記這一點,你可以重寫這部分代碼:

if (retraitchoix == 1) { 
    for (int index = 0; index < users.size(); index++) { 
     Scanner element = new Scanner(System.in); 
     System.out.print("enter name to delete \n"); 
     String elementdelete = element.nextLine(); 

     if (users.get(index).equals(elementdelete)) { 
      users.remove(index); 
      System.out.print(users); 
     } else { 
      System.out.print("not present\n"); 
      retrait(users); 
      boucleretrait = false; 
     } 
    } 
} 

這樣:

Scanner element = new Scanner(System.in); 
System.out.print("enter name to delete \n"); 
String elementdelete = element.nextLine(); 
if (retraitchoix == 1) { 
    for (int index = 0; index < users.size(); index++) { 
     if (users.get(index).equals(elementdelete)) { 
      users.remove(index); 
      System.out.print(users); 
     } 
    } 
    System.out.print("not present\n"); 
    retrait(users); 
    boucleretrait = false; 
} 

我已經刪除了else,而是選擇boucleretraitfalse後才設置users中的每個元素都已檢查並且for循環已退出,並且還要求用戶在for循環之前搜索名稱以便僅搜索在它搜索它們之前。