前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1594) at java.base/java.util.Scanner.nextInt(Scanner.java:2258) at java.base/java.util.Scanner.nextInt(Scanner.java:2212) at casino.GameManager.start(GameManager.java:75) at casino.Main.main(Main.java:6)
該当のソースコード
JAVA
1package casino; 2 3import java.util.Scanner; 4 5public class GameManager { 6 7 private int coin; 8 9 public GameManager() { 10 11 } 12 13 public void start() throws Exception{ 14 String name; 15 int selectA; 16 boolean more = true; 17 18 Scanner scanA = new Scanner(System.in); 19 BlackJack BJ = new BlackJack(); 20 21 charA("あなたの名前を入力してください",50); 22 System.out.println(""); 23 name = scanA.nextLine(); 24 25 if(coin == 0) { 26 charA("新規ボーナス!コイン100枚ゲット!!",50); 27 coin = 100; 28 System.out.println(""); 29 } 30 31 Player player = new Player(name,coin); 32 33 Thread.sleep(2000); 34 charA(player.GetName() + "さん、CatCasinoへようこそ!!",50); 35 System.out.println(""); 36 Thread.sleep(2000); 37 38 while(true) { 39 selectA = 1; 40 41 try { 42 charA("メニューを選んでください",50); 43 System.out.println(""); 44 Thread.sleep(2000); 45 System.out.println("--------------------"); 46 System.out.println("名前:" + player.GetName()); 47 System.out.println("コイン:" + player.GetCoin()); 48 System.out.println("--------------------"); 49 System.out.println("1.BLACKJACK"); 50 System.out.println("2.BACCARAT"); 51 System.out.println("3.POKER"); 52 System.out.println("--------------------"); 53 System.out.println("0.やめる"); 54 55 selectA = scanA.nextInt(); 56 57 switch(selectA) { 58 case 1: 59 charA("ブラックジャックを起動します",50); 60 System.out.println(""); 61 Thread.sleep(2000); 62 player = BJ.start(player); 63 more = true; 64 break; 65 case 2: 66 charA("バカラを起動します",50); 67 System.out.println(""); 68 Thread.sleep(2000); 69 more = true; 70 break; 71 case 3: 72 charA("ポーカーを起動します",50); 73 System.out.println(""); 74 Thread.sleep(2000); 75 more = true; 76 break; 77 case 0: 78 charA("またお会いしましょう!!",50); 79 System.out.println(""); 80 Thread.sleep(2000); 81 charA("シャットダウンします……",50); 82 more = false; 83 break; 84 default: 85 charA("表示されている選択肢で答えてください",50); 86 System.out.println(""); 87 Thread.sleep(2000); 88 more = true; 89 } 90 }catch(Exception e) { 91 charA("問題が発生しました、プログラムを終了します",50); 92 more = false; 93 } 94 95 if(player.GetCoin() == 0) { 96 charA("コインがなくなったのですね!!新たに100枚差し上げます!!",50); 97 System.out.println(""); 98 player.SetCoin(100); 99 Thread.sleep(2000); 100 } 101 102 if(more == false) { 103 break; 104 } 105 } 106 107 scanA.close(); 108 } 109 110 public void charA (String text,int sleep) throws Exception { 111 char[] work = new char[text.length()]; 112 113 for(int i = 0; i < text.length(); i++){ 114 work[i] = text.charAt(i); 115 116 //切り出した文字列を一文字ずつ出力 117 Thread.sleep(sleep); 118 System.out.print(work[i]); 119 } 120 } 121}
試したこと
BJを選択した後、BJを起動して、この画面に戻ってくるとこのエラーが出ます
現状はNoSuchElementalはエラーで吐き出してるので、問題が発生して終了するようになってます
補足情報(FW/ツールのバージョンなど)
エラー構文は見当たりませんでした、また、一回目だけはちゃんと入力することができます
エラーは可能な限り略さず訳さずそのまま
https://teratail.com/help/question-tips#questionTips3-4-2
多分入力を閉じてるんでしょうね。
もし BlackJack.start() が GameManager.start() と同じ構造とすれば、そういうことになりそうですね。
エラー追記しました
折角追記頂きましたが、at から始まっているということは、エラー(例外)の表示の途中からではありませんか?
もっと前(というか上というか)があるはずですが、表示領域が小さい等で見えなくなっていませんか。
すいません、追加しました
なお、このエラーは真ん中のほうのトライキャッチ外したときのエラー(実質通る場所は変わらない)です
再編集ありがとうございます。これで
> 現状はNoSuchElementalはエラーで吐き出してるので
という文との整合性が取れます。
ありがとうございます
一応、エラー内容は調べたのですが、基本的に
「そのscanのあとに文章ないよ」ってエラーだと確認しました
しかし、無限ループ以外は文章あるので、あれってなりました
確認ですが、ご提示の GameMaster の 75 行目は nextInt ではありません。
これはご提示のコードは多少(コンストラクタ内等)省略されているということでしょうか。
今ほかのシステム作り始めたのでずれたのかもしれません……が、たしかにエラー箇所はNextintでした
開発中ですとVCSを使うなどしないと難しいかと思いますが、ご提示頂くコードとその結果とが一致するようにしてください。
そうでないと何が起きているのか把握するのが難しくなり、結果、回答が難しくなります。また、回答しても「その部分は変わっちゃってます」と最初からやり直しとなる可能性が出てきますので、回答が付き難くなるのではないでしょうか。
回答2件
あなたの回答
tips
プレビュー