java打印到文件剪切数字的最后一位

java打印到文件剪切数字的最后一位,java,digits,Java,Digits,我尝试将值打印到文件中,但当长度超过4位数时,我的结果会被剪切: import java.io.FileNotFoundException; import java.math.BigInteger; public class create_referencevalues { /** * @param args */ public static void main(String[] args) { Long[] list = { 10L, 4

我尝试将值打印到文件中,但当长度超过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();
        }
    }

}
最后一个应该是:
38500


我在这里错过了什么?

最后一个应该是3850,而不是38500。当i=1023时,设置所有位,最后一行将与将列表[]中的所有数字相加相同


1000+650+800+500+350+250+160+90+40+10=3850。当i=1023时,设置所有位,最后一行将与将列表[]中的所有数字相加相同


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

打印LN没有问题。你的代码正是我所期望的。考虑最后一行,你声称是不正确的:

1023;3850

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

打印ln
没有问题。你的代码正是我所期望的。考虑最后一行,你声称是不正确的:

1023;3850

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

这听起来是学习使用调试器的绝佳机会。在检查程序状态的同时逐步检查代码,并指出其行为与您的期望有何差异。@djdeejay:是的。例如,如果使用Eclipse,请设置断点并使用调试模式。您可以一次一行地遍历代码,并查看每行每个变量中存储的内容。这样,您就可以看到错误/错误发生的位置并进行修复。您为什么说最后的结果应该是
38500
<代码>10+40+90160+250+350+500+650+800+1000是
3850
,正如打印的那样。for(整数i=1023;i>=0;i--){//p.print(Long.toBinaryString(i));Long sum1=0L;for(整数j=0;j<10;j++){if(biginger.valueOf(i).testBit(j)){sum1+=(列表[j]);}sum1*=Integer.bitCount(i);p.println(i+“;”+sum1);System.out.println(sum1);}这听起来是学习使用调试器的好机会。在检查程序状态的同时逐步检查代码,并指出其行为与您的期望有何差异。@djdeejay:是的。例如,如果使用Eclipse,请设置断点并使用调试模式。您可以一次一行地遍历代码,并查看每行每个变量中存储的内容。这样,您就可以看到错误/错误发生的位置并进行修复。您为什么说最后的结果应该是
38500
<代码>10+40+90160+250+350+500+650+800+1000是
3850
,正如打印的那样。for(整数i=1023;i>=0;i--){//p.print(Long.toBinaryString(i));Long sum1=0L;for(整数j=0;j<10;j++){if(biginger.valueOf(i).testBit(j)){sum1+=(列表[j]);}sum1*=整数.bitCount(i);p.println(i+“;”+sum1);System.out.println(sum1);}