如何在Java中使用printf拆分整数

时间:2015-01-26 22:10:31

标签: java integer printf java.util.scanner modulus

大家好我在使用printf拆分用户输入号时遇到了一些问题(我必须使用printf)。我的问题是,当我输入数字12345时,它将在五个单独的行上打印整数,并且它们也以相反的顺序排列。所以当我输入整数12345时它会看起来像这样:

5

4

3

2

1

但是没有空格(我也需要那些空间)。我希望它像这样打印:1 2 3 4 5。 这是我到目前为止的代码:

public static void main(String[]args){
    Scanner input = new Scanner(System.in);

    int one;

    System.out.print("Enter the five digit integer you would like to be split up:");
    one = input.nextInt();

    while (one > 0){
        System.out.printf("%d%n", one % 10);
        one = one /10;
}
}

3 个答案:

答案 0 :(得分:2)

首先,为了避免在单独的行上打印,您应该避免在%n中使用printf()格式字符。

现在,您如何以正确的顺序打印数字?好吧,因为你只限于五位数字,你可以这样做:

    for ( int divisor = 10000; divisor >= 1; divisor /= 10 ) {
        System.out.printf( "%d ", n / divisor);
        n %= divisor;
    }
    System.out.printf( "%n" ); // Just to complete the line

divisor /= 10divisor = divisor / 10的快捷方式,n %= divisorn = n % divisor的快捷方式。

所以你首先将数字除以10000.这将给你右边的第五个数字。然后你取余数并把它放在n中。这将为您提供剩余的四位数字。然后循环将你的除数减少到1000,这将取右边的第四个数字,你继续这样做,直到你达到1的除数。

另一种不需要知道数字是5位数但需要递归的方法就是写一个这样的方法:

public static void printSplitNumber( int n ) {

    if ( n == 0 ) {
        return;
    }
    printSplitNumber( n / 10 );
    System.out.printf( "%d ", n % 10);
}

从您的主要电话:

    printSplitNumber(n);
    System.out.printf("%n"); // Again, just completing the line.

这种递归方法依赖于以下事实:只有在打印完所有其余数字后才打印当前数字。因此,这会将其打印到其余数字的右侧,从而为您提供所需的效果。

答案 1 :(得分:1)

除非分配是要弄清楚如何以数字方式分割数字,我认为最简单的方法是使用Scanner的nextLine()方法获取String,或将int转换为String,以及然后拆分String的字符。

substring()有点重 - 一个更轻量级的方法是检查角色位置,如下所示:

  public void printDigits(String chars) {
    for(int i = 0; i < chars.length(); i++) {
         System.out.printf("%c ", chars.charAt(i));
    }
  }

答案 2 :(得分:0)

此方法使用substring方法,而不是数学操作int值。

int one;

System.out.print("Enter the five digit integer you would like to be split up:");
one = input.nextInt();

String x = Integer.toString(one);
for(int i = 0; i < x.length() - 1; i++)
{ 
  // On last digit in number
  if(i + 1 == x.length())
  {
    System.out.printf("%s ", x.substring(x.length()));
  }
  else
  {
    System.out.printf("%s ", x.substring(i, i + 1));
   }
}

简化的printf状态归功于@Jerry101的评论