Scannerクラスで入力されたストリーム(ここではSystem.in)をEclipse(Version: Neon.3 Release (4.6.3))で使おうとすると警告が出てしまいます。
『リソース・リーク : 'scan' が閉じられることはありません』 という警告が...。
警告を出ないようにするにはなかなか面倒くさい感じになっちゃいました。
package training03; import java.util.InputMismatchException; import java.util.Random; import java.util.Scanner; public class List3_6 { public static void main(String[] args) { // System.out.println("【数あてゲーム】"); // ランダムな整数を生成(0~9まで) int ans = new Random().nextInt(9); // 入力値格納用 int input_num; // 入力回数 int input_count = 0; // 表示メッセージ格納用 String message; // アタリはずれ判定のフラグ boolean correct_flug = false; // 繰り返し(5回) for(int i = 0; i < 5; i++) { // アタリが出たか、入力回数が5回に達したら、 if(correct_flug || input_count == 5) { // for文を抜ける break; } System.out.println("0~9の数字を入力してください"); // System.inでEclipseが警告を出さないようにtry-with-resource文 try(Scanner scan = new Scanner(System.in)) { // whileで囲まないとNoSuchElementExceptionエラー while(true) { // 入力回数が5回に達したら、 if(input_count == 5) { scan.close(); break; } // キーボードでの入力値を格納 input_num = scan.nextInt(); // 入力値がランダムな整数と等しければ、 if(input_num == ans) { message = "アタリ!"; correct_flug = true; scan.close(); } else { message = "違います"; } System.out.println(message); // whileを抜けるかどうか if(message.equals("アタリ!")) { break; } input_count++; } } catch(InputMismatchException e) { System.out.println("0~9までの数値を入力してください"); break; } } System.out.println("ゲームを終了します"); } }
なんでも、ファイルの内容などをストリームで取得するさいは、openしたあとcloseしてリソースを閉じないといけないらしいのですが、ScannerでSystem.inの場合は、別にcloseする必要はないようです。(その場合は警告が表示されるけど無視して構わないと講師の方が仰っていました。)
全然スッキリしないけど、大丈夫なのだろうか...。幸先不安ですわ~。
・eclipseで「リソース・リーク:’stdIn’閉じられることはありま... - Yahoo!知恵袋