我的for循环有什么问题?

时间:2015-10-31 23:13:44

标签: java for-loop

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

List
    List<Double> list = new ArrayList<Double>();

    valueToInsert = (double) Math.round(valueToInsert * 100d) / 100d;

    list.add(valueToInsert);

这是我的代码的输出:

    valueRetreived = list.get(index);

    valueRetreived = (double) Math.round(valueRetreived * 100d) / 100d;

    System.out.println(valueRetreived);

2 个答案:

答案 0 :(得分:7)

您的代码存在一些问题。

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

第二个问题是让charint混淆。 '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)); 
}

这将使它接近您想要的输出。尽管如此,它仍然显示.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); 

答案 1 :(得分:0)

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;
        int len = s.length() - 1;
        long d = 0;
        if (len < 2) {
            d = 1;//For single digit
        } else {
            d = (long)Math.pow(10, len);
        }

        for (int i = 0; i < s.length(); i++) {
            System.out.println(s.charAt(i) + " * " + d + " = "
                    + ((s.charAt(i) - '0') * d));
            d = d / 10;
        }
    }
}