-3

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

因此,如果程序以 开头0,则下一个输出将是01然后0110,依此类推。如果 int 以零开头,我是否必须硬编码前导零,或者有其他方法可以做到这一点吗?

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

4

4 回答 4

3

只需格式化输出,您的语法没有意义,因为 is 的值011编译器只是将值存储为数字,而不是数字序列。尝试:

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

更准确地说,当您放置前导 0 时,数字文字被解释为八进制(以 8 为基数)。所以01没关系,但08会是非法的(因为 8 不是有效的八进制数字)。这适用于许多编程语言。

在任何情况下都不要将数字文字与数值混淆。编译器将文字转换为一个值,并且该值是在运行时有效使用的值。

于 2012-11-27T18:02:05.037 回答
2

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

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

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

顺便说一句,如果你以 0 开头的数字常量,在 Java 中这意味着你指定了一个八进制数。

推荐阅读:Java 字面量

但是,如果您的问题更严重,例如您应该以给定格式输出数字,那么您绝对应该阅读DecimalFormat

System.out.println(new DecimalFormat("00").format(x)); 
于 2012-11-27T17:59:43.377 回答
1

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

如果要存储前导零,则必须使用不同的方法,例如按照您的建议使用字符串。

于 2012-11-27T18:00:36.933 回答
-6

据我所知,没有,因为 java 试图通过删除不需要的 0 来节省内存使用。最好的方法是将它创建为一个字符串并创建一个方法,该方法可以计时、添加、删除、将字符串整数除以字符串整数(乘以 no,然后将 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,但我将其作为一个快速示例,这种方法应该能够执行任何操作。

于 2012-11-27T18:03:29.427 回答