繁体   English   中英

扫描仪要求输入两次

[英]Scanner requests input twice

我是Java的初学者。 我正在尝试锻炼。

P3.3通过检查数字是否≥10,≥100等来编写一个程序,该程序读取整数并打印数字具有的位数。 (假设所有整数都小于100亿。)如果数字为负数,请先将其乘以–1。

问题是:我看到我必须输入两次enter才能得到输出。 我知道这与代码有关:

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

但是在这种情况下,我应该更改为仅输入一个而不是2个呢? 提前致谢。

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.");

}
}

}

请参考hasNextInt

public boolean hasNextInt()如果可以使用nextInt()方法将此扫描器输入中的下一个标记解释为默认基数中的int值,则返回true。 扫描仪不会前进超过任何输入。

if(in.hasNextInt()){条件将被计算truefalse时将提供第二输入 仅当第二个输入可以解释为int值时,此条件才成立。

因此,将if(in.hasNextInt()){从您的代码中删除if(in.hasNextInt()){所有设置。

更正后的代码如下:

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.");
}

编辑-: int number = in.nextInt(); 这行代码已移至if(in.hasNextInt()){条件中。

您可以通过以下方式更改代码:

    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