gpt4 book ai didi

java - 再次运行程序时如何让扫描仪暂停以进行输入?

转载 作者:行者123 更新时间:2023-12-01 04:41:11 25 4
gpt4 key购买 nike

因此,作为对自己的一个小挑战,以测试到目前为止我所学到的 Java 知识,我决定制作一个程序,将网络漫画中的角色的写作怪癖(对于那些好奇的人来说,来自 Heartstuck 的 Sol Captor)应用到使用 switch 语句的用户输入。到目前为止,程序运行良好,并且怪癖应用得很好,但是,当我让程序询问用户是否要再次运行该程序时,当用户说"is"时,程序将再次运行,但它没有' t 暂停以允许用户键入另一条语句以应用怪异。我尝试将除 char restart 之外的所有声明放入 while 循环内,并添加行“sol.Next();”在“System.out.println(“正常”);之后。这些都不起作用,我无法在任何地方找到有关如何解决此问题的任何信息。这是我的代码供引用:

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);
}
}
}
}

提前谢谢您。

最佳答案

首先,我认为将 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 没有被消耗有关,因此没有进入你的奇怪循环。

关于java - 再次运行程序时如何让扫描仪暂停以进行输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com