1

我尝试将值打印到文件中,但是当超过 4 位时,我的结果会被剪切:

import java.io.FileNotFoundException;
import java.math.BigInteger;

public class create_referencevalues {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Long[] list = { 10L, 40L, 90L, 160L, 250L, 350L, 500L, 650L, 800L,
                1000L };

        try {
            java.io.PrintStream p = new java.io.PrintStream(
                    new java.io.BufferedOutputStream(
                            new java.io.FileOutputStream(new java.io.File(
                                    "C:/users/djdeejay/listall.csv"), false)));
            for (long i = 0; i < 1024; i++) {
                //p.print(Long.toBinaryString(i));
                Long sum1 = 0L;
                for (int j = 0; j < 10; j++) {
                    if (BigInteger.valueOf(i).testBit(j)) {
                        sum1 += (list[j]);
                    }
                }

                p.println( i + ";"+sum1);

            }

            p.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

以下是最后打印的 5 个值:

1018;3750
1019;3760
1020;3800
1021;3810
1022;3840
1023;3850

最后应该是:38500

我在这里想念什么???

4

2 回答 2

2

最后一个实际上应该是 3850 而不是 38500。当 i = 1023 时,所有位都已设置,最后一行将与将 list[] 中的所有数字加在一起时相同。

1000+650+800+500+350+250+160+90+40+10 = 3850

于 2013-08-22T19:18:18.847 回答
2

没有任何问题println。您的代码完全符合我的预期。考虑您声称不正确的最后一行:

1023;3850

十进制10231111111111二进制的。因此,当 时i=1023,程序的内部循环将简单地计算 中所有数字的总和list。这些数字加起来3850就是打印出来的。

于 2013-08-22T19:19:11.137 回答