2017-02-15 65 views
0

我是Java初学者。我正在试着做一个练习。扫描器请求输入两次

P3.3编写一个程序,读取的整数,并且打印的数量多少位 具有通过检查的数量是否≥10,≥100,并在如此 。 (假设所有整数小于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(N)+1)。 – Lemonov

+0

thnx这个把戏! – Noor

+0

删除无关标签,格式化引用 –

回答

0

请参阅hasNextInt。如果在此 扫描器输入的下一个标记可以解释为在使用nextInt()方法的默认 基数int值

public boolean hasNextInt()返回true。扫描仪不会超过 任何输入。

if(in.hasNextInt()){条件将被评估truefalse时将被提供第二输入只有当第二个输入可以被解释为一个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."); 
} 

编辑 - :int number = in.nextInt();行代码已被移动到内侧if(in.hasNextInt()){条件。

+0

我想要做的是说: 如果用户输入:“你好”,它应该给出以下内容: 其他{System.out.println(“Onjuiste invoer。 Voer een getal in。“); 需要整数。 – 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] +)$”); (应在两处更换) –