因此,作为对我自己迄今为止所学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);
}
}
}
}
提前谢谢。
答案 0 :(得分:0)
首先,我不认为将System.in.read
与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
没有被消耗有关,因此不会进入你古怪的循环。