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);
         }

}
}
4

2 回答 2

0

可能是因为lineArray长度为零,因为你依赖它得到你的数字范围:

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

的大小lineArray又取决于 的大小lines,所以它也可能是空的。

的大小lines又取决于 的内容Proj5.txt,因此它也可能是空的。

从查看文件开始,然后调试(使用 IDE 的调试器)您的代码。

于 2013-11-04T03:33:59.640 回答
0

初步看来,您的代码是正确的。

数组是空的吗?你试过打印它的长度吗?

您可以简单地将其索引并获取元素,而不是将其转换ArrayList为数组,lines.get(i)从而避免多余的步骤。此外,您可以使用;size()中实际获取元素 ArrayList这可用于设置循环的限制。

于 2013-11-04T03:34:58.177 回答