我的for循环有什么问题?

beg*_*123 2 java for-loop

我试图打印整数的每个数字,然后像这样打印每个数字的总和.循环有问题,但我似乎无法弄明白.我希望它是这样的:

Please enter a number: 194
1 * 100 = 100
9 * 10 = 90
4 * 1 = 4
Run Code Online (Sandbox Code Playgroud)
import java.util.Scanner;
public class PrintEachDigits {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter the number: ");
        int num = scan.nextInt();
        String s = ""+num;
        double d = 0; 
        for(int i = 0; i < s.length(); i++) { 
            for(int j = s.length()-1; j >= 0; j--) { 
                d = Math.pow(10,j); 
                System.out.println(s.charAt(i) + " * " + d
                                   + " = " + (s.charAt(i)*d)); 
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码的输出:

Enter the number: 194
1 * 100.0 = 4900.0
1 * 10.0 = 490.0
1 * 1.0 = 49.0
9 * 100.0 = 5700.0
9 * 10.0 = 570.0
9 * 1.0 = 57.0
4 * 100.0 = 5200.0
4 * 10.0 = 520.0
4 * 1.0 = 52.0
Run Code Online (Sandbox Code Playgroud)

res*_*man 7

您的代码存在一些问题.

第一个问题是你不需要两个循环,你只需要一个循环.

第二个问题是令人困惑的chars和ints.'0'是不一样的0; 相反,'0'是一个表示该字符编码的数值(结果是48).因此,为了获得您想要的正确值,您应该在进行数学运算之前'0'从中减去char.

for(int i = 0; i < s.length(); i++) { 
    d = Math.pow(10, s.length() - i - 1); 
    int value = s.charAt(i) - '0';
    System.out.println(value + " * " + d
                       + " = " + (value*d)); 
}
Run Code Online (Sandbox Code Playgroud)

这将使它接近您想要的输出.它仍然显示.0在最后,因为ddouble.让它int来解决这个问题.

//This can be scoped to inside the loop, so you don't need to declare it beforehand
int d = (int)Math.pow(10,j); 
Run Code Online (Sandbox Code Playgroud)