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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

4780閲覧

Javaのscannerでエラーが出てしまいます。

kourinkabosu

総合スコア10

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/04/16 09:45

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)Javaでファイル操作を関数に分け、書き込みを行いたいのですが、一度目はうまくいくのですがファイルに書き込んだ後にエラーが発生しました。

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

Exception in thread "main" java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1478) at Hello.main(Hello.java:26)

該当のソースコード

Java

1import java.io.File; 2import java.io.IOException; 3import java.io.FileNotFoundException; 4import java.io.FileWriter; 5import java.io.FileReader; 6import java.io.BufferedWriter; 7import java.io.BufferedReader; 8import java.util.Scanner; 9import java.util.InputMismatchException; 10 11class Hello{ 12 public static void main(String[] args){ 13 try{ 14 15 FILE file=new FILE();//FILEクラスをfileと宣言。 16 String file_name="test.txt"; 17 String str1; 18 19 20 while(true) 21 { 22 23 Scanner scan =new Scanner(System.in); 24 25 System.out.println("何か入力してください。"); 26 str1=scan.next(); 27 System.out.println("何をしますか?書き込みならw,読み込みならr,ファイルの中身をリセットするならR,\n終わる場合はその他を押してください。"); 28 str1=scan.next(); 29 30 if(str1.equals("w"))file.Write(file_name); 31 else if(str1.equals("r"))file.Read(file_name); 32 else if(str1.equals("R"))file.Reset(file_name); 33 else break; 34 35 scan.close(); 36 } 37 38 }catch(InputMismatchException e) 39 { 40 System.out.println("エラーが発生しました。"); 41 } 42 } 43} 44 45class FILE 46{ 47 void Read(String file_name) 48 { 49 try{ 50 File file=new File(file_name); 51 BufferedReader br=new BufferedReader(new FileReader(file)); 52 53 br.close(); 54 }catch(IOException e) 55 { 56 System.out.println("ファイルが見つかりませんでした。"); 57 } 58 } 59 60 void Write(String file_name) 61 { 62 try{ 63 File file=new File(file_name); 64 String str; 65 BufferedWriter bw=new BufferedWriter(new FileWriter(file,true)); 66 Scanner scan=new Scanner(System.in); 67 68 System.out.println("入力してください。"); 69 str=scan.nextLine(); 70 71 bw.write(str); 72 bw.write("\n"); 73 74 bw.close(); 75 scan.close(); 76 77 }catch(FileNotFoundException e) 78 { 79 System.out.println(e); 80 } 81 catch(IOException e) 82 { 83 System.out.println("ファイルが見つかりませんでした。"); 84 }catch(InputMismatchException e) 85 { 86 System.out.println("エラーが発生しました。"); 87 } 88 System.out.println("書き込みました。"); 89 } 90 91 void Reset(String file_name) 92 { 93 try{ 94 File file=new File(file_name); 95 BufferedWriter bw=new BufferedWriter(new FileWriter(file)); 96 97 bw.write(""); 98 bw.close(); 99 }catch(FileNotFoundException e) 100 { 101 System.out.println(e); 102 } 103 catch(IOException e) 104 { 105 System.out.println("エラーが発生しました。"); 106 } 107 } 108}

試したこと

Scannerの宣言位置を入れ替えたり、scan.close()の位置を変えたりしたのですが、変わりませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/04/16 09:54

エラー詳細とったほうがいいです。 NoSuchElementExceptionをキャッチしてprintStackTraceした結果を追記してください。
kourinkabosu

2021/04/16 10:12

java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1478) at Hello.main(Hello.java:27) 上のようなエラーメッセージが出ました。
m.ts10806

2021/04/16 21:14

その対応したコードを提示してください。
guest

回答1

0

ベストアンサー

Scanner scan = new Scanner(System.in); のあと scan.close() すると、
System.in までクロースされてしまうので、
次の new Scanner(System.in) がエラーになります。

Scanner scan = new Scanner(System.in); は main の先頭で 1回だけ実行し、
Write には scan を引数で渡しましょう。

scan.close() は main の最後に実行するか、なくても構いません。

投稿2021/04/16 17:04

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kourinkabosu

2021/04/16 22:47

プログラムを書き換えたところうまく動きました。 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問