2016-12-19 8 views
-1

2つのテキストファイルを読み込むプログラムを作成しようとしていますが、両方とも数千語の単語が含まれています。私は、各ファイルから無作為に10語を選択し、4つの文字列リストの配列に格納する必要があります。これまでに以下のコードを作成しましたが、これは各ファイルから1つの単語しか選択するのではなく、10を選択します。これはどのようにして行うことができますか?ランダムにテキストファイルから10ワードを選択してください

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Random; 
import java.util.Scanner; 

public class RandomWordGenerator { 

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

public class RandomWordGenerator { 
public static void main(String[] args) throws IOException { 
    Path outputFile = Paths.get("output.txt"); 
    ArrayList<String> randomWords1 = randomWordsFromFile("textfile1.txt", 10); 
    ArrayList<String> randomWords2 = randomWordsFromFile("textfile2.txt", 10); 
    OutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(outputFile, CREATE)); 
    System.out.println(randomWords1); 
    System.out.println(randomWords2); 
    outputStream.flush(); 
    for (int i = 0; i < randomWords1.size(); i++) { 
     outputStream.write(randomWords1.get(i).getBytes()); 
    } 
    for (int i = 0; i < randomWords2.size(); i++) { 
     outputStream.write(randomWords2.get(i).getBytes()); 
    } 
    outputStream.close(); 
} 

private static ArrayList<String> randomFromFile(String fileName, int count) throws FileNotFoundException { 
    Scanner scanner = new Scanner(new File(fileName)); 
    ArrayList<String> words = new ArrayList<>(); 
    while (scanner.hasNext()) { 
     words.add(scanner.next()); 
    } 
    return randomFromWords(words, count); 
} 

static private ArrayList<String> randomFromWords(ArrayList<String> words, int count) { 
    ArrayList<String> randomWords = new ArrayList<>(); 
    for (int i = 0; i < count;) { 
     int random = new Random().nextInt(words.size()); 
     if (randomWords.add(words.get(random))) { 
      i++; 
     } 
    } 
    return randomWords; 
    } 
} 

答えて

0
import java.io.*; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.Random; 
import java.util.Scanner; 

import static java.nio.file.StandardOpenOption.CREATE; 

public class RandomWordGenerator { 
    public static void main(String[] args) throws IOException { 
     Path outputFile = Paths.get("output.txt"); 
     ArrayList<String> randomWords1 = randomWordsFromFile("input1.txt", 10); 
     ArrayList<String> randomWords2 = randomWordsFromFile("input2.txt", 10); 
     OutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(outputFile, CREATE)); 
     System.out.println(randomWords1); 
     System.out.println(randomWords2); 
     outputStream.flush(); 
     for (int i = 0; i < randomWords1.size(); i++) { 
      outputStream.write(randomWords1.get(i).getBytes()); 
     } 
     for (int i = 0; i < randomWords2.size(); i++) { 
      outputStream.write(randomWords2.get(i).getBytes()); 
     } 
     outputStream.close(); 
    } 

    private static ArrayList<String> randomWordsFromFile(String fileName, int count) throws FileNotFoundException { 
     Scanner scanner = new Scanner(new File(fileName)); 
     ArrayList<String> words = new ArrayList<>(); 
     while (scanner.hasNext()) { 
      words.add(scanner.next()); 
     } 
     return randomFromWords(words, count); 
    } 

    static private ArrayList<String> randomFromWords(ArrayList<String>  words, int count) { 
     ArrayList<String> randomWords = new ArrayList<>(); 
     for (int i = 0; i < count;) { 
      int random = new Random().nextInt(words.size()); 
      if (randomWords.add(words.get(random))) { 
       i++; 
      } 
     } 
     return randomWords; 
    } 
    } 
+0

上記のコードの代わりにこれがありますか?コード上の – NoahSM1993

+0

はランダムな文字列を与えておらず、正確なカウント数を与えていませんでした。私が投稿したコードは両方とも実行します –

+0

バイナリファイルで2つのリストをどのようにシリアライズしますか?上のプログラムはランダムに10単語を選んで印刷しますが、実際には単語を格納しません。 – NoahSM1993

1

数字のあなたの配列のサイズによって10のランダムMath.random()を使用して数字や時間、それらを生成する(彼らは0と1の間の値であるため)とあなたの配列から項目を選択するために、これらの番号を使用します。たとえば、これを10回繰り返してみてください:Array[Math.random()*sizeOfArray]

+0

これは、同じ単語を複数回選択することがあります。それがOKかどうかわからない。解決策は次のとおりです。(1)既に選択されている単語がある場合は、もう一度試してください(2)リストをシャッフルして、最初の10個のエントリを取ります。 –

+1

要素をリストから削除して、要素を選択することもできます。String newPick = arrayList.remove(Math.random()* arrayList.size());だから、もう一度ピックされません。 – FeinesFabi

+0

リストをシャッフルして、その最初の10個の要素を選択してください – ivanivan

関連する問題