我正在尝试输出一系列二进制数字,下一系列二进制数字取决于前一系列的二进制数字。其中一些系列带有一个或多个零。我只能使用int
个变量。
因此,如果程序以0
开头,则下一个输出将是01
,然后是0110
,依此类推。
如果int以零开头,或者我可以采用另一种方法,我是否必须硬编码前导零?
另外,Integer.toBinaryString()
是将数字输出到二进制的唯一方法吗?
答案 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回来,但我做了一个简单的例子,这种方法应该能够执行任何事情。