ここから本文です

javaのプログラミングについての質問です。

ebe********さん

2019/3/722:48:00

javaのプログラミングについての質問です。

最近プログラミングを勉強し始めたばかりの初心者なのですが、

「リソースリークがこのロケーションで閉じられていません」

という警告が出て困っています。


処理としては、キーボードから0以上の数字を入力して、入力した数字を呼び出し元に返したいです。
コードは大体以下の通りです↓



public int inputCount(){

while ( true) {

System.out.print( "1以上の整数を入力してください :");

Scanner scan = new Scanner( System.in); ←(警告1)

int count = scan.nextInt();

if ( count <= 0) {
System.out.println( "数字が1以上の整数でないためやり直しです");
}
else {
return count; ←警告が出ます(警告2)
}
}
}



警告の内容は

警告1……"scan"は閉じられることはありません
警告2……"scan"がこのロケーションで閉じられていません

の2つです。
どうすればこれらの警告を消すことができますか?

閲覧数:
179
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

mdw********さん

2019/3/723:22:15

Scannerがcloseメソッドで閉じられていないため、入力ストリームが開きっぱなしなってしまう事を警告しています。

ですが System.in の場合は閉じてしまうとプログラムの中で標準入力が使えなくなってしまうので、閉じません。

気になる場合は以下のようにアノテーションを付けて警告がでないようにします。

@SuppressWarnings("resource")
public int inputCount(){


mainメソッドの中で使い、閉じた後にプログラムが終了するのであればcloseしてもかまいませんし、入力ストリームがファイルやソケットの場合はクローズする必要があります。

その場合は通常try-with-resources 文を使って閉じます。

try-with-resources 文
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/language/...

コードはこんな感じになります。

public int inputCount() {
System.out.print("1以上の整数を入力してください :");
try (Scanner scan = new Scanner(System.in)) {
while (true) {

int count = scan.nextInt();

if (count <= 0) {
System.out.println("数字が1以上の整数でないためやり直しです");
} else {
return count;
}
}
}
}

  • 質問者

    ebe********さん

    2019/3/800:23:16

    懇切丁寧に教えていただき、誠にありがとうございます。

    このメソッドの他にも入力処理は利用したいのですが、そのような場合は「System.in」を閉じるわけにはいかないので、アノテーションを付けて警告が出ないようにする。

    mainメソッドの中で使い、閉じた後にプログラムが終了するなどの場合は「try-with-resources 文」を使う。

    という認識で合っているでしょうか?
    なにぶん初心者ですので、教えていただいたことが理解できていると良いのですが…

  • その他の返信(3件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/3/11 00:45:55


追記していただいた内容も含め、大変分かりやすかったです!
勉強させていただきました、ありがとうございます!

ベストアンサー以外の回答

1〜1件/1件中

わんこさん

2019/3/722:49:26

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる