简体   繁体   中英

Scanner requests input twice

I'm a beginner in 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. (Assume that all integers are less than ten billion.) If the number is negative, first multiply it with –1.

The problem is : I see that I have to enter twice an enter before I get the output. 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? 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 .

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. The scanner does not advance past any input.

if(in.hasNextInt()){ condition will be evaluated true or false when second input will be provided. And this condition will be true only when second input can be interpreted as an int value.

So remove if(in.hasNextInt()){ from your code then it will be all set.

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(); line of code has been moved to inside if(in.hasNextInt()){ condition.

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) {      ...

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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