2013-11-22 150 views
1

多個字符串我必須創建下面的程序:存儲在數組列表

創建一個程序,讓你輸入名字。用戶鍵入並提交的名稱(使用回車鍵)應存儲在數組列表中。數組列表中的名稱應該被打印在屏幕上。

我的問題是,我只能在我的數組列表中只存儲一個名字。

我的代碼:

ArrayList <String> namen = new ArrayList <>();   
System.out.print("Enter a name: ");   
Scanner in = new Scanner(System.in);   
namen.add(in.next());   
for (String naam: namen) { 
    System.out.println(naam); 
} 

的第一個問題是,後一個名字被鍵入並提交,你不能鍵入任何,所以我必須重新輸入像整數值:

if (varOne > varTwo) { 
    System.out.println("Too high!"); 
    varOne = raadGetal.nextInt(); 
} 

varOne = raadGetal.nextInt();行重置輸入,因此您可以再次輸入。但是,如何使用Strings和ArrayList來實現上述代碼的同一功能?

回答

1

之後你總是聲明ArrayList<String> namen = new ArrayList<>();它是一個空的列表。嘗試是這樣的:

public class MyClass { 
    private ArrayList<String> namen = new ArrayList<>(); 

    public void addName(){ 
     System.out.print("Enter a name: "); 
     Scanner in = new Scanner(System.in); 
     namen.add(in.next()); 

     for(String naam: namen){ 
      System.out.println(naam); 
     } 
    } 
} 
+0

OP程序中的ArrayList定義是正確的。他正在使用Java 7引入的右側的菱形運算符('<>')。 – helpermethod

+0

但是之後該列表是空的,因此它只包含一個名稱,OP希望它中包含更多名稱。 – hbsrud

0

比較運算符>不受String支持。使用compareTo方法來比較String值。

if(varOne.compareTo(varTwo)>0) { 
System.out.println("Too high!"); 
varOne = raadGetal.nextInt(); 
} 
+0

'varOne'被讀爲int'作爲OP提到:'的Varone = raadGetal.nextInt(); '在他的問題中 – Sage

0

這個問題不是你的ArrayList,它是掃描儀的用法。如果您想要求多個名稱,請使用循環。

for(int i = 0; i < NUMBER_OF_NAMES_TO_GET; i++){ 
    namen.add(in.next()); 
} 
+0

非常感謝!這段代碼完成了這項工作!只有一個小問題,我如何讓用戶輸入無限的名字?據我所知,while循環用於在不知道何時應該停止循環的情況下運行代碼。你能幫我解決這個問題嗎? – user2793161

+0

@ user2793161你完全正確地使用while循環。你可以說'while(!namen.contains(「exit」))'而不是for循環。一旦有人輸入「退出」,這將退出,請記住,您應該從'namen'列表中刪除退出名稱。 – Ron

+0

好的,非常感謝羅恩!它現在完美。分配是當用戶輸入一個空字符串時,循環應該停止並且空字符串之前的最後輸入值應該被刪除。 – user2793161

0

你可以問用戶第一次他想給

int noOfNames = in.nextInt(); 

,然後在此基礎上名字的數量,您可以創建一個循環來存儲所有的名字

for(int i = 0; i <noOfNames ; i++){ 
    names.add(in.next()); 
} 
0

嘗試在循環中調用它。它只是執行一次。請嘗試以下操作: -

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

公共類addName {

private void name() { 
    ArrayList<String> namen = new ArrayList<String>(); 

    int count = 1; 

while(count>0){ 
    System.out.print("Enter a name: "); 
    Scanner in = new Scanner(System.in); 
    String a = in.next(); 
    namen.add(a); 
    if (a.equals("exit")) { 
     System.out.println("Exiting"); 
     System.exit(0); 
    } 
    else{ 
     for (String naam : namen) { 
       System.out.println(naam); 
    } 
    } 
    count++; 
} 
} 

public static void main(String[] args) { 
    addName addNames = new addName(); 
    addNames.name(); 
} 

}

0

盧茨,你可以寫/修改您的代碼如下:
請注意,你應該總是使用String.equals()方法檢查兩個字符串的平等。

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

public class AddNames { 

public static void main(String[] args) { 

    ArrayList<String> namen = new ArrayList<String>(); 
    System.out.print("Enter a name(or write exit to close the program) : "); 
    Scanner in = new Scanner(System.in); 
    String name = in.next(); 
    while (!name.equals("exit")) { 

     namen.add(name); 
     name = in.next(); 
    } 
    if (name.equals("exit")) { 
     System.out 
       .println("Exiting the program. The names you have entered are:"); 
     for (String naam : namen) { 
      System.out.println(naam); 
     } 
    } 
} 
} 
+0

感謝您的片段! – user2793161