输出前导零和int变量

时间:2012-11-27 17:58:19

标签: java

我正在尝试输出一系列二进制数字,下一系列二进制数字取决于前一系列的二进制数字。其中一些系列带有一个或多个零。我只能使用int个变量。

因此,如果程序以0开头,则下一个输出将是01,然后是0110,依此类推。 如果int以零开头,或者我可以采用另一种方法,我是否必须硬编码前导零?

另外,Integer.toBinaryString()是将数字输出到二进制的唯一方法吗?

4 个答案:

答案 0 :(得分:3)

输出只是format,你的语法没有意义,因为01的值是1,编译器只是将值存储为数字,而不是数字序列。试试:

int x = 1;
System.out.printf("%02d", x);

为了更精确地放置前导0,数字文字被解释为八进制(基数为8)。所以对01来说没问题,但08是非法的(因为8不是有效的八进制数字)。对于许多编程语言来说都是如此。

在任何情况下,请勿将数字 literal 与数字混淆。编译器将文字转换为值,只是值是在运行时有效使用的值。

答案 1 :(得分:1)

如果您的问题真的很简单,那么您应该尝试这个:

System.out.print("0"+x);

您可能知道,整数存储值。输出到屏幕的内容将转换为字符串。一个整数将被转换为一个没有前导零的tring。

顺便说一句,如果你用0开始一个数字常量,那么在Java中就意味着你要指定一个八进制数。

推荐阅读:Java literals

如果你的问题更深入,就像你应该输出给定格式的数字一样,你一定应该阅读DecimalFormat

System.out.println(new DecimalFormat("00").format(x)); 

答案 2 :(得分:1)

类型int只存储一个数字整数值,仅此而已。 int变量不存储前导零,也不存储输入数字的基数。在你的情况下,前导零表示八进制文字,这可能不是你的意思。

如果你想使用不同的方法存储前导零,例如使用你建议的字符串。

答案 3 :(得分:-6)

据我所知,不是因为java试图通过删除不需要的0来节省ram的使用。最好的方法是将它创建为一个字符串并创建一个方法,该方法可以对字符串整数进行计时,添加,删除,将字符串整数表示出来(没有时间,然后将0读取到开头)。

修改

public String addStringInteger(String x1, Integer i){
    String leading0 = "";
    String nol = "";
    boolean onLeading = true;
    for(char c : x1.toCharArray()){
        String l = Character.toString(c);
        if(onLeading && l.equals("0")){
            leading0 += "0";
        }else{
            onLeading = false;
            nol += l;
        }
    }
    int intO = Integer.parseInt(nol) + i; //you can change + to x, -, / etc
    return leading0 + ""+ intO;
}

这个例子允许你做addStringInteger(“001”,20),你会得到0021,这个方法可以编辑,所以你得到021回来,但我做了一个简单的例子,这种方法应该能够执行任何事情。