Я пишу код для преобразования числа в двоичное представление. Вот мой код. Он не дает правильного ответа, но я не могу понять, где я делаю ошибку. Если кто-то может указать, где моя ошибка и как ее исправить. поправьте буду признателен.

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));
    }
}
1
sam_rox 14 Май 2014 в 18:19

4 ответа

Лучший ответ

Помимо всех этих ответов проблема с вашим кодом заключалась в том, что вы не очищали строку перед ее изменением. Поэтому перед циклом 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));
    }
}
1
Syam S 14 Май 2014 в 14:56
public static String convertBinary(int n){
        String s="";
        while(n>0){
            s+=(n%2);

            n=n/2;
        }



    return (new StringBuffer(s).reverse().toString());
}
1
pratim_b 14 Май 2014 в 14:32

Если вы ищете ошибку в своей реализации , вам лучше указать:

  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
Dmitry Bychenko 14 Май 2014 в 14:36

Используйте стандартную библиотеку 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);
}
0
AntonH 14 Май 2014 в 14:24