我正在编写一个代码,用于将数字转换为二进制表示。这是我的代码。它没有给出正确的答案,但我无法弄清楚我在哪里犯了错误。如果有人能够指出我的错误以及如何纠正错误,我将不胜感激。
public class ConvertBinary{
public static String convertBinary(int n){
String s="";
while(n>0){
s+=(n%2);
n=n/2;
}
int len=s.length();
String[] binary=s.split("");
String[] binaryCopy=new String[s.length()];
for(int i=0;i<len;i++){
binaryCopy[i]=binary[len-i-1];
s+=binaryCopy[i];
}
return s;
}
public static void main (String args[]){
System.out.println(convertBinary(19));
}
}
答案 0 :(得分:1)
如果你在实施中看错误,你宁可放:
s = (n % 2) + s;
不是
s+=(n%2);
所以代码将是
// n should be positive
public static String convertBinary(int n){
if (n == 0)
return "0";
String s = "";
// for is more compact than while here
for (; n > 0; n /= 2)
s = (n % 2) + s;
return s;
}
然而在现实生活中
Integer.toString(n, 2);
更方便
答案 1 :(得分:1)
public static String convertBinary(int n){
String s="";
while(n>0){
s+=(n%2);
n=n/2;
}
return (new StringBuffer(s).reverse().toString());
}
答案 2 :(得分:1)
除了所有这些答案之外,您的代码的问题在于您在撤消之前没有清除字符串。所以在for循环之前只需要放置s = ""
,你的代码应该正常工作.. :))
根据评论
public class ConvertBinary {
public static String convertBinary(int n) {
String s = "";
while (n > 0) {
s += (n % 2);
n = n / 2;
}
int len = s.length();
String[] binary = s.split("");
String[] binaryCopy = new String[s.length()];
s = "";
for (int i = 0; i < len; i++) {
binaryCopy[i] = binary[len - i - 1];
s += binaryCopy[i];
}
return s;
}
public static void main(String args[]) {
int num = 4;
System.out.println(convertBinary(num));
System.out.println(Integer.toBinaryString(num));
}
}
答案 3 :(得分:0)
使用Java标准库:http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toString%28int,%20int%29
public class ConvertBinary{
public static String convertBinary(int n){
return Integer.toString(n, 2);
}
public static void main (String args[]){
System.out.println(ConveryBinary.convertBinary(19));
}
}
编辑:正如@Holger所说,还有一个toBinaryString:http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toBinaryString%28int%29
public static String convertBinary(int n){
return Integer.toBinaryString(n);
}