2013-11-04 100 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中的元素;这可以用于设置循环的限制。