简体   繁体   English

扫描仪要求输入两次

[英]Scanner requests input twice

I'm a beginner in Java. 我是Java的初学者。 I'm trying to make an exercise. 我正在尝试锻炼。

P3.3 Write a program that reads an integer and prints how many digits the number has, by checking whether the number is ≥ 10, ≥ 100, and so on. P3.3通过检查数字是否≥10,≥100等来编写一个程序,该程序读取整数并打印数字具有的位数。 (Assume that all integers are less than ten billion.) If the number is negative, first multiply it with –1. (假设所有整数都小于100亿。)如果数字为负数,请先将其乘以–1。

The problem is : I see that I have to enter twice an enter before I get the output. 问题是:我看到我必须输入两次enter才能得到输出。 I know that it has to do with the code: 我知道这与代码有关:

if(in.hasNextInt()){
    int number = in.nextInt();
}

But what should I change in this case to just have one input instead of 2? 但是在这种情况下,我应该更改为仅输入一个而不是2个呢? Thanks in advance. 提前致谢。

package week2;

import java.util.Scanner;

public class P3_3_Digits {

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    System.out.print("Voer een getal in: ");
    int number = in.nextInt();


    if(in.hasNextInt()){

        in.close();

    if(number < 0){
        number = number * -1;

        if(number >= 10 && number < 100){
            System.out.println("Het getal -" + number + " heeft 2 digits.");
            }

        else if(number >= 100 && number < 1000){
                System.out.println("Het getal -" + number + " heeft 3 digits.");
        }
        else if(number >= 1000 && number < 10000){
            System.out.println("Het getal -" + number + " heeft 4 digits.");
    }
        else if(number >= 10000 && number < 100000){
            System.out.println("Het getal -" + number + " heeft 5 digits.");
    }
        else if(number >= 100000 && number < 1000000){
            System.out.println("Het getal -" + number + " heeft 6 digits.");
    }
        else if(number >= 1000000 && number < 10000000){
            System.out.println("Het getal -" + number + " heeft 7 digits.");
    }
        else if(number >= 10000000 && number < 100000000){
            System.out.println("Het getal -" + number + " heeft 8 digits.");

    }





    }

    else {
        if(number >= 10 && number < 100){
            System.out.println("Het getal " + number + " heeft 2 digits.");
            }

        else if(number >= 100 && number < 1000){
                System.out.println("Het getal " + number + " heeft 3 digits.");
        }
        else if(number >= 1000 && number < 10000){
            System.out.println("Het getal " + number + " heeft 4 digits.");
    }
        else if(number >= 10000 && number < 100000){
            System.out.println("Het getal " + number + " heeft 5 digits.");
    }
        else if(number >= 100000 && number < 1000000){
            System.out.println("Het getal " + number + " heeft 6 digits.");
    }
        else if(number >= 1000000 && number < 10000000){
            System.out.println("Het getal " + number + " heeft 7 digits.");
    }
        else if(number >= 10000000 && number < 100000000){
            System.out.println("Het getal " + number + " heeft 8 digits.");
    }

    }
    }
    else { System.out.println(" Onjuiste invoer. Voer een getal in.");

}
}

}

Kindly refer to the hasNextInt . 请参考hasNextInt

public boolean hasNextInt() Returns true if the next token in this scanner's input can be interpreted as an int value in the default radix using the nextInt() method. public boolean hasNextInt()如果可以使用nextInt()方法将此扫描器输入中的下一个标记解释为默认基数中的int值,则返回true。 The scanner does not advance past any input. 扫描仪不会前进超过任何输入。

if(in.hasNextInt()){ condition will be evaluated true or false when second input will be provided. if(in.hasNextInt()){条件将被计算truefalse时将提供第二输入 And this condition will be true only when second input can be interpreted as an int value. 仅当第二个输入可以解释为int值时,此条件才成立。

So remove if(in.hasNextInt()){ from your code then it will be all set. 因此,将if(in.hasNextInt()){从您的代码中删除if(in.hasNextInt()){所有设置。

Corrected code is given below-: 更正后的代码如下:

Scanner in = new Scanner(System.in);
System.out.print("Voer een getal in: ");

if (in.hasNextInt()) {
    int number = in.nextInt();
    in.close();
    if (number < 0) {
    number = number * -1;

    if (number >= 10 && number < 100) {
        System.out.println("Het getal -" + number + " heeft 2 digits.");
    }

    else if (number >= 100 && number < 1000) {
        System.out.println("Het getal -" + number + " heeft 3 digits.");
    } else if (number >= 1000 && number < 10000) {
        System.out.println("Het getal -" + number + " heeft 4 digits.");
    } else if (number >= 10000 && number < 100000) {
        System.out.println("Het getal -" + number + " heeft 5 digits.");
    } else if (number >= 100000 && number < 1000000) {
        System.out.println("Het getal -" + number + " heeft 6 digits.");
    } else if (number >= 1000000 && number < 10000000) {
        System.out.println("Het getal -" + number + " heeft 7 digits.");
    } else if (number >= 10000000 && number < 100000000) {
        System.out.println("Het getal -" + number + " heeft 8 digits.");

    }

    } else {
    if (number >= 10 && number < 100) {
        System.out.println("Het getal " + number + " heeft 2 digits.");
    }

    else if (number >= 100 && number < 1000) {
        System.out.println("Het getal " + number + " heeft 3 digits.");
    } else if (number >= 1000 && number < 10000) {
        System.out.println("Het getal " + number + " heeft 4 digits.");
    } else if (number >= 10000 && number < 100000) {
        System.out.println("Het getal " + number + " heeft 5 digits.");
    } else if (number >= 100000 && number < 1000000) {
        System.out.println("Het getal " + number + " heeft 6 digits.");
    } else if (number >= 1000000 && number < 10000000) {
        System.out.println("Het getal " + number + " heeft 7 digits.");
    } else if (number >= 10000000 && number < 100000000) {
        System.out.println("Het getal " + number + " heeft 8 digits.");
    }

    }
} else {
     System.out.println(" Onjuiste invoer. Voer een getal in.");
}

Edit-: int number = in.nextInt(); 编辑-: int number = in.nextInt(); line of code has been moved to inside if(in.hasNextInt()){ condition. 这行代码已移至if(in.hasNextInt()){条件中。

You can change your code in such way: 您可以通过以下方式更改代码:

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        System.out.print("Voer een getal in: ");

        String s = in.nextLine();
        boolean isNumeric = s.chars().allMatch( Character::isDigit );

        while (!isNumeric) {
            System.out.println(" Onjuiste invoer. Voer een getal in.");
            s = in.nextLine();
            isNumeric = s.chars().allMatch( Character::isDigit );
        }

        int number = Integer.parseInt(s);
        in.close();

//        if (number < 0) {      ...

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM