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 に答える