質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

リソースが閉じられません scannerの閉じ方がわかりません

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 10K+

tkokushi

score 5

発生している問題・エラーメッセージ

リソースが閉じられません
scannerの閉じ方がわかりません

該当のソースコード

書いたコード
package janken;
import java.util.InputMismatchException;
import java.util.Scanner;

public class JankenTakahashi {// メインクラス
public static void main(String args[]) throws InputMismatchException {
int loseCount = 0;
int player = 0;// プレイヤーの手
while (3 > loseCount) {
System.out.println("ワイとじゃんけんやで...あなたの手を入力してください ⇒( グー:0 チョキ:1 パー:2 )");
System.out.println("コンピュータに3回/負けたらllゲーム終了です");
try {
player = newjava.util.Scanner(System.in).nextInt(3);// 入力の手
while (true) {
if (player == 0) {
System.out.println("あなたの手はグーです");
break;
} else if (player == 1) {
System.out.println("あなたの手はチョキです");
break;
} else if (player == 2) {
System.out.println("あなたの手はパーです。");
break;
} else {
System.out.println("0. 1 . 2 以外は入力しないでください");
}
break;
}
} catch (InputMismatchException e) {
System.out.println("おい! 0.1.2や ");
}finally{

player.close();

}
Computer computer = new Computer();
int c = computer.getcomputer();
Winlose.winlose(c, player);
}
}
}
class Winlose {// 勝ち負けを判定するクラスprivate static int winCount = 0;// プレイヤーの勝った
private static int loseCount = 0; // プレイヤーの負けた数
private static int winCount = 0;// プレイヤーの勝った]
// private static int playerA = 0;// プレイヤーの手
public static void winlose(int computerA, int playerA) {
switch (computerA) {
// コンピュータの手がグーの場合
case 0:
// 自分の手とコンピューターの手が同じ場合
if (0 == playerA) {
System.out.println("あいこ");
// 自分の手とコンピューターの手が同じではない場合
} else if (1 == playerA) {
// 自分の手が負けた場合
System.out.println("あなたのまけ");
loseCount++;
} else if (2 == playerA) {
System.out.println("あなたの勝ち");
winCount++;
}
break;
// コンピュータの手がチョキ
case 1:
if (1 == playerA) {
System.out.println("あいこ");
} else if (0 == playerA) {
System.out.println("あなたの勝ち");
winCount++;
} else if (2 == playerA) {
System.out.println("あなたの負け");
loseCount++;
}
break;
// コンピュータの手がパー
case 2:
if (2 == playerA) {
System.out.println("あいこ");
} else if (0 == playerA) {
System.out.println("あなたの負け");
loseCount++;
} else if (1 == playerA) {
System.out.println("あなたの勝ち1");
winCount++;
}
break;
}
if (loseCount < 3) {
System.out.println("勝った" + winCount + "回数");
System.out.println("負けた" + loseCount + "回数");
} else {
System.out.println("3回負けたので終わり");
System.exit(0);
}
}
}
class Computer {// コンピュータの手を決めるクラス
public int getcomputer() {
int computer; // コンピューターの手
computer = new java.util.Random().nextInt(3);
int gu = 0; // グー
int choki = 1; // チョキ
int pa = 2; // パー
if (computer == gu) {
System.out.println("コンピューターはグーを出した");
} else if (computer == choki) {
System.out.println("コンピュータはチョキを出した");
} else if (computer == pa) {
System.out.println("コンピュータはパーを出した");
}
return computer;
}
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

int player = 0;// プレイヤーの手
と定義してあるように、playerは数字であってscannerではないのでplayer.close()はコンパイルエラーとなりますので、

Scanner scanner = new Scanner(System.in);
player = scanner.nextInt(3);// 入力の手

と分けて書いてやり、scanner.close()としてやれば閉じることができます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/07 15:18

    回答ありがとうございます。
    エラーは解決できました。

    キャンセル

+1

playerはintの変数だからですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/23 19:29

    回答ありがとうございます。
    この場合はどうすれば良いでしょうか?

    初心者すぎてすいません。
    宜しくお願いします。

    キャンセル

  • 2017/04/23 21:12

    TakeoAsai さんも指摘しているように、player.close() でコンパイルエラーになっていますよね?まずはその現実に対処するのです。

    なぜ int 型の player に対して close() を呼び出そうとしたのですか?きっとどこかから参考になりそうなソースコードを流用したのではないですか?その参考としたコードと自分が今書いているコードをよく比べて、よく内容を理解することがするべき事です。

    キャンセル

  • 2017/05/07 15:22

    ご指摘ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る