每当我运行此代码时,它运行得非常顺利,直到while循环运行一次。它将返回并再次询问名称,然后跳过String b = sc.nextLine();,然后打印下一行。
static Scanner sc = new Scanner(System.in);
static public void main(String [] argv) {
Name();
}
static public void Name() {
boolean again = false;
do
{
System.out.println("What is your name?");
String b = sc.nextLine();
System.out.println("Ah, so your name is " + b +"?\n" +
"(y//n)");
int a = getYN();
System.out.println(a + "! Good.");
again = askQuestion();
} while(again);
}
static public boolean askQuestion() {
System.out.println("Do you want to try again?");
int answer = sc.nextInt();
if (answer == 1) {
return true;
}
else {
return false;
}
}
static int getYN() {
switch (sc.nextLine().substring(0, 1).toLowerCase()) {
case "y":
return 1;
case "n":
return 0;
default:
return 2;
}
}
}
另外,我正试图创建这个程序,我可以问三个问题(比如某人的姓名,性别和年龄,可能更像是种族和诸如此类的东西),然后将所有这些答案都带回来。就像在最后说的那样,“那么,你的名字是+名字+,你是+性别+,你是+年龄+岁?是/否。”沿着那条线的东西。我知道有办法做到这一点,但我不知道如何在任何地方保存这些响应,我不能抓住它们,因为它们只出现在方法的实例中。
答案 0 :(得分:0)
使用nextInt()和相同的扫描仪后,不要尝试使用nextLine()扫描文本!它可能会导致问题。打开扫描仪方法仅限整数...建议使用。 您总是可以解析扫描仪的String答案。
此外,以这种方式使用扫描仪不是一个好习惯,您可以在数组中组织问题,为这样一个独特的扫描程序实例选择一个循环读取:
public class a {
private static String InputName;
private static String Sex;
private static String Age;
private static String input;
static Scanner sc ;
static public void main(String [] argv) {
Name();
}
static public void Name() {
sc = new Scanner(System.in);
String[] questions = {"Name?","Age","Sex?"};//
int a = 0;
System.out.println(questions[a]);
while (sc.hasNext()) {
input = sc.next();
setVariable(a, input);
if(input.equalsIgnoreCase("no")){
sc.close();
break;
}
else if(a>questions.length -1)
{
a = 0;
}
else{
a++;
}
if(a>questions.length -1){
System.out.println("Fine " + InputName
+ " so you are " + Age + " years old and " + Sex + "." );
Age = null;
Sex = null;
InputName = null;
System.out.println("Loop again?");
}
if(!input.equalsIgnoreCase("no") && a<questions.length){
System.out.println(questions[a]);
}
}
}
static void setVariable(int a, String Field) {
switch (a) {
case 0:
InputName = Field;
return;
case 1:
Age = Field;
return;
case 2:
Sex = Field;
return;
}
}
}
注意全局变量,保存你的信息,直到你将它们设置为空或空......你可以将它们用于最终的肯定。
希望这有帮助! 希望这有帮助!