

scannerとrandomクラスの組み合わせ方が分からず困っております。

5%の確率でやかんを出してくるドラえもんプログラム  
ひみつ道具の一覧をテキストファイルで作成し、起動時に読み込む。 テキストは一行に一つひみつ道具名を記載する。  
Enter を入力するたび、5%の確率で「やかん」と喋り、95%の確率で一覧のいずれかのひ みつ道具の名称を喋る。  
”end”と入力したらプログラム終了。  
例）「スモールライト～」 （道具名+～)  
「どんぶら粉～」

[code]

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    
    public class Question{
    
        public static void main(String[] args) {
            
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "txt"));         
    
                String line;
                while ((line = br.readLine()) != null) {
                    // process the line.
                }
                br.close();
    
            } catch (IOException e) {
                e.printStackTrace();
            ｝
    
[/code]


CC BY-SA 4.0
2022-05-01T07:23:07.457
88599
2022-05-13T13:55:04.370
2022-05-01T08:29:02.970
19110
52426
question
java
textファイルからランダムで行を表示、5%の確率でtextファイルにない文言を表示するプログラム


一度ファイルから読み取った文字列をListや配列等に格納してください。  
その後、入力毎に乱数で処理してください。  
提示したコードを元にした実装例は以下のようになります。

[code]

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.util.Scanner;
    
    public class Question {
    
    
        public static void main(String[] args) {
            String filePath = "items.txt";
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));         
    
                String line;
                
                //入力を格納するList
                List<String> list = new ArrayList<String>();
                
                while ((line = br.readLine()) != null) {
                    // ファイル内のデータを１行毎にリストへ格納する
                    list.add(line);             
                }
                // 乱数オブジェクトの生成
                Random rnd = new Random();
                // Scannerオブジェクトの生成
                try (Scanner sc = new Scanner(System.in)){
                    while(true) {
                        // 改行(Enterを含んだ文字列を入力する)
                        line = sc.nextLine();
                        if("end".equals(line)) {
                            // endと入力したらプログラムを修了する
                            break;
                        }else {
                            if(rnd.nextInt(20)==0) {
                                // 5%の確率でやかんを表示する
                                System.out.println("やかん");
                            }else {
                                // 95%の確率で一覧のいずれかの名称を表示
                                System.out.println(list.get(rnd.nextInt(list.size())));
                            }
                        }
                    }
                }
                
                
                
                br.close();
    
            } catch (IOException e) {
                e.printStackTrace();
            }   
        }
    }
    
[/code]


CC BY-SA 4.0
2022-05-13T13:55:04.370
88804
2022-05-13T13:55:04.370
52603
88599
answer