问题解析
想要得到整数的每一位,可以采用 % 10 的方法来获取它的末位数字。加入我们输入 123 , 如果在循环体内加入 % 10 和 / 10 ,我们就能得到逆序的输出:3 2 1。为了让数字正序打印,我们需要让 % 10 的数字分别为 1,12, 123,解决方法为嵌套。
设定一个函数用于打印,设定条件当输入值不为个数时,就把输入值 / 10 作为参数再次传给该函数,这样重复判定直到函数得到的参数为个数时,继续用 % 10 打印参数末位的数字,退出最里层循环后进入两位数参数的循环层,继续打印操作,直到所有循环执行完,每一位就都就输出完毕。
解题思路
main函数
设定输入数为 n ,tmp = n,将两数传入 print 函数中。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
int n = scanner.nextInt();
int tmp = n;
print(n,tmp);
}
print函数
- 首先判断输入参数是否为负数,若为负数使其变为正数并输出一个 负号。
- 递归:判断参数是否为一位数,若不是一位数就 / 10 继续传参给 print 函数,一直到参数为个位数为止,继续下一步骤。
- 打印每一位:使用 % 10 来打印参数的末位数,退出该次循环后将打印上层循环的参数末位一直到最外层循环。
- 因为每一位都需要 逗号 隔开,所以在打印每一位后单独输出 “, ”直到个位,当参数等于用户输入的数字 n 时,就是后面不需要加 逗号 的,这时候 tmp 就派上用场啦。
public static void print (int n, int tmp) {
if(n < 0) {//当输入一个负数时,先把它变成整数。
System.out.println("-");
n = -n;
}
if(n > 9) {
print(n / 10, tmp);//递归
}
System.out.print(n % 10);//打印个位数
if (n != tmp) {
System.out.print(", ");
}
}
用户输入: n = 123; tmp = n = 123;
第一次循环:n == 123 > 9 => n / 10 == 12 成为参数传入 print 函数体
第二次循环:n == 12 > 9 => n / 10 == 1 传入函数
第三次循环:n == 1 < 9 ,继续打印操作
第一次打印个位:n == 1 % 10 == 1
第一次打印逗号:n == 1 != tmp , 输出 “, ”,退出第三次循环,进入第二次循环的打印部分
第二次打印:n == 12 % 10 == 2
第二次打印逗号:n ==12 != tmp , 输出 “, ”,退出第二次循环,进入第一次循环的打印部分
第三次打印:n == 123 % 10 == 3
第三次不打印逗号:n == 123 == tmp , 不打印逗号,退出所有循环
全部代码
public static void print (int n, int tmp) {
if(n < 0) {//当输入一个负数时,先把它变成整数。
System.out.println("-");
n = -n;
}
if(n > 9) {
print(n / 10, tmp);//递归
}
System.out.print(n % 10);//打印个位数
if (n != tmp) {
System.out.print(", ");
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
int n = scanner.nextInt();
int tmp = n;
print(n,tmp);
}