Iyarr
@Iyarr

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

javaの繰り返し処理の中に入力処理を入れたときにException in thread "main" java.util.NoSuchElementExceptionが出てくる件について

解決したいこと

for文の中にキーボードの入力処理を入れたい
そこでこのようなソースコードを書きました

public class test {
	public static void main(String[] args) {
		String input = "None" ;
		while( input != "" ) {
			Scanner in = new Scanner(System.in);
			String anecdote = in.next();
			input = anecdote;
			System.out.println(anecdote);
			in.close();
		}
	}
}

発生している問題・エラー

適当な値を入力するとこのエラーが発生

Exception in thread "main" java.util.NoSuchElementException

自分で試したこと

inとcloseが対になっている必要があって繰り返すことでそこに不整合が生じると思いfor文の外に持っていくとコンパイルすらできなくなります
ネットではそもそも入力処理を繰り返し処理の中でしているものがなく、何を調べればよいのかわからない状況です

知りたいこと

そもそも呪文みたいな感じで使っているこの入力関数はどういう仕組みなのかと、pythonやc言語などのほかの言語の違いを知りたいです。

0

1Answer

突っ込みどころは多いのですが…

System.incloseした場合,そのプロセスでは再度開けなくなります.
inのオープンとクローズのみwhileの外に出してください.

Scanner in = new Scanner(System.in);

while() { /* ... */ }

in.close();

それから,以下のwhile条件がfalseになることはありません.

while( input != "" ) {

Stringは一般に演算子==で比較できません.代わりにString.equals()を使用します.

String anecdote = in.next();

Scanner.next()改行文字を排除しません.このため入力結果が空文字列になることはありません(シェルによって強制的にストリームを終了することができますが,例外が発生します).
代わりにScanner.nextLine()を使用して改行を取り除いてください.

while(!input.equals("")){
    String anecdote = in.nextLine();
    /*...*/
}
2Like

Your answer might help someone💌