Java while语句为true时执行代码,当然用户必须键入新的输入

Java while语句为true时执行代码,当然用户必须键入新的输入,java,while-loop,Java,While Loop,您好(我是Java和编程新手)。我正在试着做一个while循环。如果用户输入了整数,请执行代码。如果用户未键入整数,则用户必须键入输入,直到输入为真 我试着这样做: Scanner input = new Scanner(System.in); System.out.println("Wat is jouw gewicht in kg op aarde?"); int gewicht = input.nextInt(); while (inpu

您好(我是Java和编程新手)。我正在试着做一个while循环。如果用户输入了整数,请执行代码。如果用户未键入整数,则用户必须键入输入,直到输入为真

我试着这样做:

 Scanner input = new Scanner(System.in);
        System.out.println("Wat is jouw gewicht in kg op aarde?");
        int gewicht = input.nextInt();

        while (input.hasNextInt ()) {

            System.out.println("Ik heb informatie over de volgende planeten: 1. Venus  2. Mars 3. Jupiter \n 4. Saturn 5. Uranus 6. Neptune");

            //Vraag op welke planeet hij wilt boxen
            System.out.println("Op welk planeet ga je boksen?");
            int planeetnummer = input.nextInt();

            if (planeetnummer == VENUS) {
                System.out.println("Jou gewicht op Venus is: " + gewicht * 0.78 + " kg");
            }

            if (planeetnummer == MARS) {
                System.out.println("Jou gewicht op Mars is: " + gewicht * 0.39 + " kg");
            }

            if (planeetnummer == JUPITER) {
                System.out.println("Jou gewicht op Jupiter is: " + gewicht * 2.65 + " kg");
            }
            if (planeetnummer == SATURN) {
                System.out.println("Jou gewicht op Saturn is: " + gewicht * 1.17 + " kg");
            }
            if (planeetnummer == URANUS) {
                System.out.println("Jou gewicht op Uranus is: " + gewicht * 1.05 + " kg");
            }
            if (planeetnummer == NEPTUNE) {
                System.out.println("Jou gewicht op Neptune is: " + gewicht * 1.23 + " kg");
            }
        }
所以是的,如果用户输入一个整数,它应该执行代码,如果不是,用户必须输入另一个输入,直到输入一个整数。
但是当我运行代码并键入一个整数时,代码没有执行,我不知道为什么?有人能帮我让while循环工作吗?

您必须在写入数字后按“回车”按钮-这就是您通知程序读取输入的方式

编辑 下面是一个代码,如果用户要键入一封信,它将显示一条错误消息

Scanner input = new Scanner(System.in);
    System.out.println("Wat is jouw gewicht in kg op aarde?");
    int gewicht = 0;
    try {
        gewicht = new Integer(input.next());
    } catch (NumberFormatException e) {
        System.out.println("please enter an integer");
    }
    while (input.hasNext()) {
        int planeetnummer = 0;
        try {
            planeetnummer = new Integer(input.next());
        } catch (NumberFormatException e) {
            System.err.println("please enter an integer");
            continue;
        }
        System.out.println("Ik heb informatie over de volgende planeten: 1. Venus  2. Mars 3. Jupiter \n 4. Saturn 5. Uranus 6. Neptune");

        //Vraag op welke planeet hij wilt boxen
        System.out.println("Op welk planeet ga je boksen?");
        switch (planeetnummer) {
        case 1:
            System.out.println("Jou gewicht op Venus is: " + gewicht * 0.78 + " kg");
            break;
        case 2:
            System.out.println("Jou gewicht op Mars is: " + gewicht * 0.39 + " kg");
            break;
        case 3:
            System.out.println("Jou gewicht op Jupiter is: " + gewicht * 2.65 + " kg");
            break;
        case 4:
            System.out.println("Jou gewicht op Saturn is: " + gewicht * 1.17 + " kg");
            break;
        case 5:
            System.out.println("Jou gewicht op Uranus is: " + gewicht * 1.05 + " kg");
            break;
        case 6:
            System.out.println("Jou gewicht op Neptune is: " + gewicht * 1.23 + " kg");
            break;
        }
    }
   input.close();
你可以用回避

public static void main(String[] args) {
    inputNumber();
}

public static void inputNumber() {
    Integer number = null;
    try {
        System.out.println("type number");
        number = new Scanner(System.in).nextInt();
    } catch (Exception e) {
        inputNumber();
    }
    //execute code
}

我在代码中添加了一些注释以便于理解。那么分析一下这个,

Scanner input = new Scanner(System.in);
System.out.println("Wat is jouw gewicht in kg op aarde?");
int gewicht;

//while weight is integer
while (true) {
    try {
        gewicht = Integer.parseInt(input.nextLine());
        break;
    } catch (NumberFormatException nfe) {
        System.out.print("Try again: ");
    }
}

//add break for ending this while loop !!!!!!!!!
while (true) {
    System.out.println("Ik heb informatie over de volgende planeten: 1. Venus  2. Mars 3. Jupiter \n 4. Saturn 5. Uranus 6. Neptune");

    //Vraag op welke planeet hij wilt boxen
    System.out.println("Op welk planeet ga je boksen?");
    int planeetnummer;

    //while input is integer
    while (true) {
        try {
            planeetnummer = Integer.parseInt(input.nextLine());
            break;
        } catch (NumberFormatException nfe) {
            System.out.print("Try again: ");
        }
    }

    if (planeetnummer == VENUS) {
        System.out.println("Jou gewicht op Venus is: " + gewicht * 0.78 + " kg");
    }

    if (planeetnummer == MARS) {
        System.out.println("Jou gewicht op Mars is: " + gewicht * 0.39 + " kg");
    }

    if (planeetnummer == JUPITER) {
        System.out.println("Jou gewicht op Jupiter is: " + gewicht * 2.65 + " kg");
    }
    if (planeetnummer == SATURN) {
        System.out.println("Jou gewicht op Saturn is: " + gewicht * 1.17 + " kg");
    }
    if (planeetnummer == URANUS) {
        System.out.println("Jou gewicht op Uranus is: " + gewicht * 1.05 + " kg");
    }
    if (planeetnummer == NEPTUNE) {
        System.out.println("Jou gewicht op Neptune is: " + gewicht * 1.23 + " kg");
    }
}

您可以使用planets的属性定义一个
Enum

enum Planet {
    VENUS(1, "Venus", 0.78),
    MARS(2, "Mars", 0.39),
    JUPITER(3, "Jupiter", 2.64),
    SATURN(4, "Saturn", 1.17),
    URANUS(5, "Uranus", 1.05),
    NEPTUNE(6, "Neptune", 1.23);

    private final int number;
    private final String name;
    private final double gravity;

    Planet(int number, String name, double gravity) {
        this.number = number;
        this.name = name;
        this.gravity = gravity;
    }

    public String getName() {
        return name;
    }

    public double getGravity() {
        return gravity;
    }

    public static Planet parseNumber(int number) {
        for (Planet planet : values())
            if (planet.number == number)
                return planet;
        throw new EnumConstantNotPresentException(Planet.class, String.valueOf(number));
    }
}
然后,您的客户端代码可能如下所示:

public static void main(String... args) {
    try (Scanner input = new Scanner(System.in)) {
        System.out.println("Wat is jouw gewicht in kg op aarde?");
        int gewicht = input.nextInt();

        while (input.hasNext()) {
            System.out.println("Ik heb informatie over de volgende planeten: 1. Venus  2. Mars 3. Jupiter");
            System.out.println("4. Saturn 5. Uranus 6. Neptune");
            System.out.println("Op welk planeet ga je boksen?");

            Planet planet = Planet.parseNumber(input.nextInt());
            System.out.format("Jou gewicht op %s is: %f kg\n", planet.getName(), gewicht * planet.getGravity());
        }
    }
}

您的代码没有被执行,因为
while(input.hasNextInt())
循环只有在用户键入int时才会执行,否则程序将结束

试着使用下面的代码

Scanner sc = new Scanner(System.in);
while (true) {
  if(sc.hasNextInt()) {
    int input = sc.nextInt();
    // your code goes here
  } else {
    sc.next();
  }
}

什么是金星或其他?Enum或whatelse?这些应该是
int
常量,可以通过
=
进行比较。但是让我们看看OP会说什么,它们是最终的整数,但这并不重要,我只想在用户输入了输入后执行代码。我是说我建议你写一个函数
intgetInput()
或者类似的东西。这将帮助你专注于你想要的单一任务。现在,您可以了解如何检测用户是否键入了有效的数字。我相信frodo希望在应用程序仅处理数字时处理无效的输入,例如字母。如果用户输入错误的输入次数足够多,程序将崩溃。