1

そこで、Java についてこれまでに学んだことをテストするためのちょっとした挑戦として、Web コミック (好奇心旺盛な人のために Heartstuck の Sol Captor) のキャラクターの書き癖をユーザーの入力に適用するプログラムを作成することにしました。 switch ステートメント。これまでのところ、プログラムは正常に動作し、Quirk は正常に適用されていますが、プログラムを再度実行するかどうかをユーザーに尋ねようとしたときに、はいと言ったときに、実行されなかった場合を除いて、プログラムは再び実行されました。一時停止して、ユーザーが別のステートメントを入力して、癖を適用できるようにします。char restart を除くすべての宣言を while ループ内に配置し、「sol.Next();」という行を追加しようとしました。「System.out.println("Normal");.」の後 これらはどちらも機能せず、これを修正する方法に関する情報がどこにも見つかりません。

import java.io.IOException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SolQuirk {

    public static void main(String[] args) {
        char restart = 'y';
        Scanner sol = new Scanner(System.in).useDelimiter("");
        String input = "";
        while(restart == 'y' | restart == 'n'){
            System.out.println("Normal:");
            while(!sol.hasNext("\n")){
                char ch = sol.next().charAt(0);
                switch(ch){
                    case 's': case 'S':
                        input += '2';
                        break;
                    case ' ':
                        input += ch;
                        ch = sol.next().charAt(0);
                        if(ch == 't' || ch == 'T'){
                            ch = sol.next().charAt(0);
                            if(ch == 'o' || ch == 'O'){
                                ch = sol.next().charAt(0);
                                if(ch == 'o' || ch == 'O'){
                                    ch = sol.next().charAt(0);
                                    if(ch == ' ' || ch == '.'){
                                        input += "two";
                                        input += ch;
                                        break;
                                    }
                                    else{
                                        input += "too";
                                        input += ch;
                                        break;
                                    }
                                }
                                else if(ch == ' ' || ch == '.'){
                                    input += "two";
                                    input += ch;
                                    break;
                                }
                                else{
                                    input += "to";
                                    input += ch;
                                    break;
                                }
                            }
                            else{
                                input += "t";
                                input += ch;
                                break;
                            }
                        }
                    default:
                        input += ch;
                        break;
                }
            }
            String solQuirk = input.toLowerCase();
            System.out.println("Sol:");
            System.out.println(solQuirk);
            System.out.println("Would you like to go again? y/n");
            try {
                restart = (char) System.in.read();
            } catch (IOException ex) {
                Logger.getLogger(SolQuirk.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

前もって感謝します。

4

1 に答える 1

0

System.in.readまず、 aとScannerの混合は良い考えではないと思います。入力された文字を誰が消費しているかという問題が発生しているようです。

つまり、コードのこの部分を置き換える

try {
     restart = (char) System.in.read();
} catch (IOException ex) {
     Logger.getLogger(SolQuirk.class.getName()).log(Level.SEVERE, null, ex);
}

// remove the last \n 
sol.nextLine();
// get the user response and consume the whole line
restart = sol.nextLine().charAt(0);

問題を解決します。

あなたのコードのエラーがどこにあるかはよくわかりませ\nんが、消費されていないため、風変わりなループに入らないことに関係しています。

于 2013-05-11T21:45:49.993 に答える