2012-10-18 37 views
14

thể trùng lặp:
Declaring an array of unknown sizeLàm cách nào để khai báo một chuỗi chuỗi có kích thước không xác định?

Tôi đang làm việc trong Java và tôi đang cố gắng để nhập vào một câu thành một mảng chuỗi. Tôi đang thông báo cho nó và xác định số lượng từ. Tuy nhiên, tôi cần phải thêm từng từ vào một mảng chuỗi để xác định xem có trùng lặp hay không. Tôi không chắc chắn làm thế nào để khởi tạo mảng của tôi nếu tôi không biết đếm từ cho đến sau này trong chương trình.

//Declares variables 
    Scanner scan = new Scanner (System.in); 
    int withoutdup = 0, wordCount = 0; 
    String line, word; 
    StringTokenizer tokenizer; 
    List<String> sentence = ArrayList<String>; 

    //Asks user for input 
    System.out.println ("Please enter text. Enter DONE to finish."); 
    line = scan.next(); 


    //Tokenizes the string and counts the number of character and words 
while (!line.equals("DONE")) 
{ 
    tokenizer = new StringTokenizer (line); 
    while (tokenizer.hasMoreTokens()) 
    { 
     word = tokenizer.nextToken(); 
     wordCount++; 
     sentence += word; 
    } 
    line = scan.next(); 
} 
+0

thì bạn nên sử dụng ArrayList thay vào đó, và cuối cùng bạn vẫn có thể chuyển đổi thành mảng ... – Naytzyrhc

Trả lời

27

Sử dụng một ArrayList thay

List<String> list = new ArrayList<String>(); 

nó phát triển tự động.

Để kiểm tra các bản sao, bạn có thể sử dụng Set (HashSet), nó không cho phép các phần tử trùng lặp.

Cập nhật

tôi nhìn thấy một vài vấn đề trong mã của bạn:

List<String> sentence = ArrayList<String>; 

Bạn đang thiếu new sau =.

sentence += word; 

Điều đó chỉ có tác dụng nếu sentenceString. Đó là một List vì vậy bạn nên sử dụng phương pháp List.add

sentence.add(word); 

Ngoài ra bây giờ là không cần thiết wordCount++;sentence.size() sẽ cho bạn biết có bao nhiêu từ.

+0

Xin lỗi tôi khá mới với điều này nhưng đây là những gì tôi có liên quan đến việc nhập câu: Hệ thống. out.println ("Vui lòng nhập văn bản. Nhập XONG để hoàn thành."); line = scan.next(); trong khi (! Line.equals ("DONE")) { tokenizer = new StringTokenizer (dòng); trong khi (tokenizer.hasMoreTokens()) { word = tokenizer.nextToken(); wordCount ++; } line = scan.next(); } làm cách nào để khai báo danh sách mảng vì Danh sách câu = ArrayList (); không hoạt động? – user1755178

+0

@ user1755178: Bạn có thể tự cập nhật câu hỏi bằng mã không? –

+0

vâng, tôi vừa làm – user1755178

2

Sử dụng cấu trúc động có thể thu nhỏ và phát triển khi cần, ví dụ: ArrayList sẽ là một lựa chọn tốt.

2

Không thể, các mảng có độ dài không đổi. Tốt hơn nên sử dụng triển khai java.util.List như ArrayList,LinkedList v.v ...

Nếu bạn muốn tồn tại với mảng thì bạn có thể sử dụng chức năng này để định lại kích thước mảng nhưng lại tạo mảng mới với kích thước mới và sao chép giá trị mảng trước .

private static Object resizeArray (Object oldArray, int newSize) { 
    int oldSize = java.lang.reflect.Array.getLength(oldArray); 
    Class elementType = oldArray.getClass().getComponentType(); 
    Object newArray = java.lang.reflect.Array.newInstance(
     elementType, newSize); 
    int preserveLength = Math.min(oldSize, newSize); 
    if (preserveLength > 0) 
     System.arraycopy(oldArray, 0, newArray, 0, preserveLength); 
    return newArray; 
} 
6

chỉ xem ví dụ bên dưới, bạn sẽ có ý tưởng về cách khai báo một chuỗi chuỗi có kích thước không xác định.

Trước tiên, hãy sử dụng ArrayList để lưu trữ các chuỗi và mỗi lần gọi phương thức .add kích thước ArrayList tăng bởi một phần tử. Khi bạn đang điền vào ArrayList, sử dụng phương thức ArrayList size() và tạo mảng String của bạn và kích thước nó từ đó. Nhưng hãy đảm bảo rằng mỗi phần tử trong một ArrayList là một đối tượng, đó là lý do tại sao bạn cần phải chuyển đổi từng phần tử thành một Chuỗi.

Ví dụ:

ArrayList list = new ArrayList(); 

for(int i = 0; i < 100; i++) 

list.add("stuff"); 

String[] strArray = new String[ list.size() ]; 

for(int j = 0; j < strArray.length; j++) 

strArray[ j ] = list.get(j).toString(); 

Hy vọng điều này sẽ giúp bạn. Đó chỉ là một cách, nhưng tôi nghĩ rằng có thể có một cách hiệu quả hơn thông qua bạn có thể làm điều tương tự.

Các vấn đề liên quan