java - 对我的 if 循环没有运行感到有点困惑?

标签 java loops if-statement

我对编程和这个网站都很陌生,所以如果这个解释很笨拙,请耐心等待。

我正在自学 Java 编程,目前我只是编写一些通用的小代码来练习类和方法的使用。这是一个简单的代码,只需要输入姓名和年龄,以及是否有宠物即可练习。

当被问到这个人是否有宠物时,我有一个 if 循环,如果他们说是,它应该做一件事,而不是另一件事,对于其他任何事情,它应该或多或少地说“嘿,我不明白”那',然后继续。

但是,当我问“你有宠物吗”时,它甚至没有机会在直接进入循环的“其他”部分之前输入信息,我不确定为什么。

我对编程很陌生,所以我不知道该做什么或尝试什么。我知道我错过了一些愚蠢的东西,但我不知道是什么。

package practice;

import java.util.Scanner;

class Person {

    String name;
    int age;

    void sayInfo() {

        System.out.println("Hey, my name is " + name + " and I'm " + age + " years old!");

    }

}

class Pet {
    String name;
    String type;
    int age;
}

public class Methods {
    public static void main(String args[]) {

        Scanner input = new Scanner(System.in);
        Person person1 = new Person();
        String answer2;

        do {

            System.out.println("Please state your name:");
            person1.name = input.nextLine();
            System.out.println("Please state your age:");
            person1.age = input.nextInt();

            System.out.println("Do you have a pet?");
            String answer = input.nextLine();

            if (answer.equals("yes") || answer.equals("Yes")) {

                Pet pet1 = new Pet();

                System.out.println("What kind of pet?");
                pet1.type = input.nextLine();
                System.out.println("What is their name?");
                pet1.name = input.nextLine();
                System.out.println("How old are they?");
                pet1.age = input.nextInt();

                System.out.println(
                        "okay, so your name is " + person1.name + ", you're " + person1.age + "years old, and");
                System.out.println(
                        "You have a " + pet1.type + " named " + pet1.name + " who is " + pet1.age + "years old.");

            }

            else if (answer.equals("no") || answer.equals("No")) {

                System.out.println("okay, so your name is " + person1.name + ", you're " + person1.age
                        + "years old, and you have no pet.");
            }

            else {

                System.out.println("Sorry, I didn't understand your input there.");
            }

            System.out.println("Is your information correct?");
            answer2 = input.nextLine();

        } while (answer2.equals("no") || answer2.equals("No"));

        System.out.println("Thank you for your information and time.");
    }

}

当我运行该程序时,它会询问姓名和年龄,但是当它询问“你有宠物吗”时,它只是不允许我输入并直接转到该程序的其他部分循环,“抱歉,我不明白你的输入”,但程序的其余部分,询问信息是否正确,如果不正确则重新运行似乎工作正常,只是这一部分让我难住了。

最佳答案

这是因为 nextInt() 仅返回 int,但不会将扫描器前进到下一行,因此当您之后调用 nextLine() 时,它会返回数字后面的空字符串,但不返回问题的答案(是/否)。

试试这个:

System.out.println("Please state your name:");
person1.name = input.nextLine();

System.out.println("Please state your age:");
person1.age = input.nextInt();
input.nextLine();    // Advance to the next line

System.out.println("Do you have a pet?");
String answer = input.nextLine();

或者在读取行时使用input.next()而不是.nextLine()

关于java - 对我的 if 循环没有运行感到有点困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57194053/

相关文章:

java - 在 Java 中寻找无限循环的替代方法

javascript - Jquery,检查数组中是否存在一个值

java - 如何在For循环中创建 sleep 线程?

if-statement - armv8 NEON 如果条件

java - JPanel 不添加按钮和文本字段

java - 如何将java类型转换为java string[]?

java - LibGdx - 平铺游戏碰撞检测

Java 初学者程序帮助(if、else 问题)

jquery - If/else 语句 - 使 "else"与之前的状态相同

java - 泛型是否始终提供类型安全以及在哪些最佳用例下