2016-10-09 4 views
1

У меня есть метод, который должен выбрать случайное слово из txt-файла, но он работает только некоторое время.Как выбрать случайное слово из txt-файла?

Содержание файла выглядит следующим образом:

Broccoli 
Tomato 
Kiwi 
Kale 
Tomatillo 

Мой код:

import java.util.Random; 
import java.util.Scanner; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 

public String getRandomItem(){ 
    Scanner fileIn = null; 

    String temp = ""; 
    int r = randomGenerator.nextInt(5) + 1; 
    byte i = 0; 

    try { 
     fileIn = new Scanner(new FileInputStream("bundles.txt")); 
    } catch (FileNotFoundException e) { 
     System.out.println("File not found."); 
     System.exit(0); 
    } 

    while(i <= 5){ 
     temp = fileIn.nextLine(); 

     if(i == r){ 
      break; 
     } 

     i++; 
    } 

    fileIn.close(); 

    return temp; 
} 

Может кто-то пожалуйста, скажите мне, где я неправильно?

+1

Запустите это в отладчике и убедитесь сами, почему он не всегда работает. –

+0

Откуда вы знаете, что это случайность только в некоторые моменты? Выполните, по крайней мере, 1000 раз и проанализируйте результат, чтобы увидеть фактическую случайность. –

+0

Я не имею в виду, что это не всегда случайный, я имею в виду, что я получаю сообщение об ошибке: Исключение в потоке «main» java.util.NoSuchElementException: Не найдено ни одной строки – ccless1

ответ

2

Я бы использовал Files.readAllLines(Path), чтобы прочитать все строки один раз, а затем получить одно случайное слово из этого. Что-то вроде,

private static List<String> lines = null; 
static { 
    try { 
     lines = Files.readAllLines(new File("bundles.txt").toPath()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
private Random rand = new Random(); 

public String getRandomItem() { 
    return lines.get(rand.nextInt(lines.size())); 
}