Jestem początkującym w Javie. Próbuję wykonać ćwiczenie.

P3.3 Napisz program, który odczytuje liczbę całkowitą i wydrukuje, ile cyfr ma numer, sprawdzając, czy liczba ma ≥ 10, ≥ 100 i tak dalej. (Załóżmy, że wszystkie liczby całkowite są mniej niż dziesięć miliardów.) Jeśli liczba jest ujemna, najpierw pomnóż go za pomocą -1.

Problemem jest: widzę, że muszę wprowadzić dwa razy wchodząc przed wyjściem. Wiem, że ma to związek z kodem:

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

Ale co powinienem zmienić w tym przypadku, aby mieć jedno wejście zamiast 2? Z góry dziękuję.

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

}
}

}
0
Noor 15 luty 2017, 14:56

2 odpowiedzi

Najlepsza odpowiedź

Prosimy odnoszą się do Hasnextint .

public boolean hasNextInt() zwraca prawdę, jeśli następny token w tym Wejście skanera można interpretować jako wartość INT w domyślnym Radix za pomocą metody NESTINT (). Skaner nie przechodzi obok dowolne wejście.

{{X0} i ten warunek będzie prawdziwy tylko wtedy, gdy drugi wejście można interpretować jako wartość INT.

Więc usuń if(in.hasNextInt()){ z kodu, a następnie zostanie ustawiony.

skorygowany kod jest podany poniżej -:

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

Edycja -: int number = in.nextInt(); Linia kodu została przeniesiona do wewnątrz {X1}}.

0
Ashish Kumar 15 luty 2017, 16:08

Możesz zmienić swój kod w taki sposób:

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

    }
0
Pavlo Plynko 15 luty 2017, 12:46