如何在 Java 中使用 printf 拆分整数
How to split up integers using printf in Java
大家好,我在使用 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;
}
}
此方法使用子字符串方法,而不是对 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));
}
}
由于@Jerry101 的评论,简化了 printf 语句
首先,为了避免在单独的行上打印,您应该避免在 printf()
.
中使用 %n
格式化字符
现在,如何以正确的顺序打印数字?好吧,由于您只能使用五位数,您可以这样做:
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 /= 10
是 divisor = divisor / 10
的快捷方式,n %= divisor
是 n = 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.
这种递归方法依赖于这样一个事实,即只有在打印完所有其余数字后,您才打印当前数字。所以这会导致它把它打印到其余数字的右边,给你你需要的效果。
除非作业是弄清楚如何按数字拆分数字,否则我认为最简单的方法是使用 Scanner 的 nextLine() 方法获取字符串,或者将您的 int 转换为字符串,然后拆分字符串的字符。
substring() 有点重 - 一种更轻量级的方法是检查字符位置,如下所示:
public void printDigits(String chars) {
for(int i = 0; i < chars.length(); i++) {
System.out.printf("%c ", chars.charAt(i));
}
}
大家好,我在使用 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;
}
}
此方法使用子字符串方法,而不是对 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));
}
}
由于@Jerry101 的评论,简化了 printf 语句
首先,为了避免在单独的行上打印,您应该避免在 printf()
.
%n
格式化字符
现在,如何以正确的顺序打印数字?好吧,由于您只能使用五位数,您可以这样做:
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 /= 10
是 divisor = divisor / 10
的快捷方式,n %= divisor
是 n = 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.
这种递归方法依赖于这样一个事实,即只有在打印完所有其余数字后,您才打印当前数字。所以这会导致它把它打印到其余数字的右边,给你你需要的效果。
除非作业是弄清楚如何按数字拆分数字,否则我认为最简单的方法是使用 Scanner 的 nextLine() 方法获取字符串,或者将您的 int 转换为字符串,然后拆分字符串的字符。
substring() 有点重 - 一种更轻量级的方法是检查字符位置,如下所示:
public void printDigits(String chars) {
for(int i = 0; i < chars.length(); i++) {
System.out.printf("%c ", chars.charAt(i));
}
}