我想从一个arraylist中随机选择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 :(得分:0)
可能是因为lineArray
的长度为零,因为你依赖的是你的数字范围:
int choice = rand.nextInt(lineArray.length); // always 0 if lineArray is empty
lineArray
的大小又取决于lines
的大小,因此也可能是空的。
lines
的大小又取决于Proj5.txt
的内容,因此可能也是空的。
首先查看文件,然后调试(使用IDE的调试器)代码。
答案 1 :(得分:0)
首先,您的代码是正确的。
数组是否为空?你试过打印它的长度吗?
不是将ArrayList
转换为数组,而是简单地对其进行索引并使用lines.get(i)
获取元素,从而避免无关的步骤。此外,您可以使用size()
来获取ArrayList
中实际存在的元素;这可以用来设置循环的限制。