簡體   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