2013-11-04 97 views
0

我想從數組列表中隨機選擇5個元素。出於某種原因,它總是選擇0作爲隨機元素。任何幫助?這是我迄今爲止的代碼。隨機數組元素

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Random; 
import java.util.Scanner; 

public class Rewards { 

public static void main(String[] args) throws FileNotFoundException { 

    String fileName = ("C:/Users/Jordan/Desktop/Proj5.txt"); 
    FileReader fin = new FileReader(fileName); 
    Scanner src = new Scanner(fin); 
    ArrayList<String> lines = new ArrayList<String>(); 
    src.useDelimiter(":"); 

    while (src.hasNext()) { 
     lines.add(src.nextLine()); 
     System.out.println(src.next()); 
     // replace above line with array 
    } 
    String[] lineArray = new String[lines.size()]; 
    lines.toArray(lineArray); 
    Random rand = new Random(); 
     for (int i = 0; i < 5; i++) { 
      int choice = rand.nextInt(lineArray.length); 
      System.out.println("Random Winner is: " + choice); 
     } 

} 
} 

回答

0

大概是因爲lineArray長度爲零,因爲你靠的是你的電話號碼範圍:

int choice = rand.nextInt(lineArray.length); // always 0 if lineArray is empty 

lineArray反過來大小取決於lines大小,因此這可能是空的太。

lines的大小依次取決於Proj5.txt的內容,因此可能也是空的。

從查看文件開始,然後調試(使用IDE的調試器)您的代碼。

0

Prima facie,你的代碼是正確的。

該數組是否爲空?你有沒有嘗試打印它的長度?

而不是將ArrayList轉換爲數組,您可以簡單地索引它並獲取使用lines.get(i)的元素,從而避免無關步驟。另外,您可以使用size()來獲取實際在ArrayList中的元素;這可以用於設置循環的限制。