2017-02-15 3 views
0

Я новичок в Java. Я пытаюсь сделать упражнение.Запросы сканера вводят дважды

P3.3 Написать программу, которая считывает целое число и печатает сколько цифр число имеет, путем проверки, является ли число ≥ 10, ≥ 100, и так дальше. (Предположим, что все целые числа меньше десяти миллиардов.) Если номер отрицательный, сначала умножьте его на -1.

Проблема в следующем: я вижу, что мне нужно ввести дважды ввод, прежде чем я получу выход. Я знаю, что он должен делать с кодом:

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

} 
} 

} 
+2

Маленький трюк для подсчета цифр Int длина = (INT) (Math.log10 (п) +1); – Lemonov

+0

thnx за этот трюк! – Noor

+0

удаленный несвязанный тег, отформатированная цитата –

ответ

0

Обращайтесь к hasNextInt.

public boolean hasNextInt() Возвращает истину, если следующая лексема на входе этого сканера можно интерпретировать как целочисленное значение, по умолчанию, радикса с использованием метода nextInt(). Сканер не продвигается до любого входа.

if(in.hasNextInt()){ условие будет оцениваться true или false, когда будет обеспечен второй вход. И это условие будет истинным только тогда, когда второй ввод можно интерпретировать как значение int.

Поэтому удалите 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."); 
} 

Edit-:int number = in.nextInt(); строка кода был перемещен в if(in.hasNextInt()){ состоянии.

+0

То, что я пытаюсь сделать, это сказать: Если пользователь дал в качестве входных данных: «Привет», он должен дать следующее: else {System.out.println («Onjuiste invoer. Вое-э-э-а-а-а-а. требуется целое число. – Noor

+0

@Noor, я обновил код согласно вашему требованию. 'int number = in.nextInt();' строка кода перемещена внутри 'if (in.hasNextInt()) {' condition. –

0

Вы можете изменить свой код таким образом:

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

В этом случае я не могу использовать отрицательную цифру. – Noor

+0

Хорошо, попробуйте isNumeric = s.matches ("^ -? ([0-9] +) $"); (следует изменить в двух местах) –

Смежные вопросы