質問

のようなテキスト入力入力キーボードからJava6.私は新しい言語におよびまた、下記のコードを取得しますこのエラー:

package test1;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
    boolean quit = false;
    while (!quit){
        Scanner keyIn;
        String c = "x";
        while (c != "y" && c != "n") {
            keyIn = new Scanner(System.in);
            c = keyIn.next();
            keyIn.close();
        }
        if (c == "n")
            quit = true;
    }
 }
}


Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:838)
at java.util.Scanner.next(Scanner.java:1347)
at test1.Test.main(Test.java:11)

私誤使用を次のように、next()メソッド?と思っていたのを待つのユーザー入力がうでないときの例外というものを読み取ってくれます。

役に立ちましたか?

解決

例外の理由はkeyIn.close()Scannerを閉じるだけでなく、あなたが一度スキャナを使用した後にSystem.inを呼び出しているということです。非常に次の反復は、あなたはScannerは現在閉鎖されているので、速やかに吹く新しいSystem.inを作成します。これを修正するには、何をやるべきことは、あなたがwhileループに入る前に一度だけスキャナを作成し、あなたがclose()を閉じるにしたくないので、完全にSystem.in呼び出しをスキップされます。

プログラムがまだあるため、あなたが==!=文字列の比較では動作しないことに固定した後。 Javaで文字列を比較するときは、文字列の内容を比較するためにequals()を使用する必要があります。あなたが==を使用して!=するときは、オブジェクト参照を比較しているので、これらの比較は常にあなたのコードではfalseを返します。 常に文字列を比較するためにequals()を使用しています。

while (!quit){
    Scanner keyIn = new Scanner(System.in);
    String c = "x";
    while (!c.equals("y") && !c.equals("n")) {
        c = keyIn.next();
    }
    if (c.equals("n"))
        quit = true;
}

他のヒント

あなたは.equalsを使用する必要があり、文字列を評価するために、

しばらく(!c.equals)( "Y")ものを行う{...

  • を宣言するスキャナを参照外のタイルです。きんいホームページを作成いたします。を閉じたことになりません。

  • 比較文字列テキストの方法 equals, ではなくオペレーター ==.

nextLine()を使用してみてくださいとだけ返される文字列の最初の要素を見ています。

文字や他のプリミティブ型に対して使用された場合、

!=と==のみのみ、C#で動作すること、動作します。あなたは適切な等価性をチェックしていることを確認するために.equalsを使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top