再次运行程序时,如何让扫描仪暂停输入?

时间:2013-05-11 21:20:44

标签: java user-input

因此,作为对我自己迄今为止所学Java知识的一点挑战,我决定制作一个程序,将一个角色的写作怪癖应用于webcomic(来自Heartstuck的Sol Captor,对于那些好奇的人)到用户使用switch语句的输入。到目前为止,该程序工作正常并且应用程序很好,但是,当我去制作程序时询问用户是否要再次运行程序,然后说是,程序将再次运行,除了它没有' t暂停以允许用户键入另一个语句以应用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);
            }
        }
    }
}

提前谢谢。

1 个答案:

答案 0 :(得分:0)

首先,我不认为将System.in.readScanner混合是一个好主意。这似乎导致了谁在消费输入的字符时出现某种问题。

说,替换你的代码的这部分

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没有被消耗有关,因此不会进入你古怪的循环。