1

因此,作为对我自己的一个小挑战,以测试我到目前为止对 Java 的了解,我决定制作一个程序,将网络漫画中一个角色的写作怪癖(来自 Heartstuck 的 Sol Captor,对于那些好奇的人)应用到用户的输入中,使用一个 switch 语句。到目前为止,该程序运行良好,并且应用正常,但是,当我让程序询问用户是否要再次运行该程序时,当说是时,该程序将再次运行,除非它没有t 暂停以允许用户键入另一个语句以应用该怪癖。我尝试将所有声明(除了 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 回答