我正在尝试输出一系列二进制数字,下一系列二进制数字取决于前一系列二进制数字。其中一些系列以一个或多个零开头。我只能使用int
变量。
因此,如果程序以 开头0
,则下一个输出将是01
然后0110
,依此类推。如果 int 以零开头,我是否必须硬编码前导零,或者有其他方法可以做到这一点吗?
另外,Integer.toBinaryString()
将数字输出为二进制的唯一方法是什么?
我正在尝试输出一系列二进制数字,下一系列二进制数字取决于前一系列二进制数字。其中一些系列以一个或多个零开头。我只能使用int
变量。
因此,如果程序以 开头0
,则下一个输出将是01
然后0110
,依此类推。如果 int 以零开头,我是否必须硬编码前导零,或者有其他方法可以做到这一点吗?
另外,Integer.toBinaryString()
将数字输出为二进制的唯一方法是什么?
只需格式化输出,您的语法没有意义,因为 is 的值01
,1
编译器只是将值存储为数字,而不是数字序列。尝试:
int x = 1;
System.out.printf("%02d", x);
更准确地说,当您放置前导 0 时,数字文字被解释为八进制(以 8 为基数)。所以01
没关系,但08
会是非法的(因为 8 不是有效的八进制数字)。这适用于许多编程语言。
在任何情况下都不要将数字文字与数值混淆。编译器将文字转换为一个值,并且该值是在运行时有效使用的值。
如果你的问题真的这么简单,那么你应该试试这个:
System.out.print("0"+x);
您可能知道,整数存储值。输出到屏幕的内容被转换为字符串。整数将被转换为没有前导零的字符串。
顺便说一句,如果你以 0 开头的数字常量,在 Java 中这意味着你指定了一个八进制数。
推荐阅读:Java 字面量
但是,如果您的问题更严重,例如您应该以给定格式输出数字,那么您绝对应该阅读DecimalFormat
System.out.println(new DecimalFormat("00").format(x));
该类型int
只存储一个数字整数值,仅此而已。int
变量不存储前导零,也不存储输入数字的基数。在您的情况下,前导零表示八进制文字,无论如何这可能不是您的意思。
如果要存储前导零,则必须使用不同的方法,例如按照您的建议使用字符串。
据我所知,没有,因为 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,但我将其作为一个快速示例,这种方法应该能够执行任何操作。