Java - Konversi desimal ke biner - Integer - Fungsi rekursif

Hai, saya benar-benar mencoba mengubah int desimal menjadi int biner, tetapi tidak berhasil.

Tolong bantu aku.

Dan saya tidak ingin menjadikannya 'System.out.println()' karena saya sudah melakukannya.

TERIMA KASIH!

`Saya memerlukan fungsi rekursif yang mendapatkan int desimal dan mengembalikan int biner

public static void decToBin(int number) {
    if(number == 0)
        return ;
    decToBin(number / 2);
    System.out.print(number % 2);
}

Itu yang telah saya lakukan...

Saat saya mencoba mendapatkan string:

public static String decToBin(int number) {
    if(number == 0)
        return "";
    return new Integer(number % 2).toString() + new Integer(decToBin(number / 2)).toString();
}

Kesalahan...


person user3648450    schedule 25.05.2014    source sumber
comment
Tolong tunjukkan kepada kami apa yang telah Anda coba.   -  person PakkuDon    schedule 25.05.2014
comment
Dan apa masalahnya dengan kode Anda? Apakah Anda mendapatkan beberapa kesalahan/hasil yang salah? Atau apakah Anda hanya meminta kami untuk menulis ulang menjadi sesuatu yang lain yang tidak menggunakan System.out.println?   -  person Pshemo    schedule 25.05.2014
comment
Ya, saya ingin menjadi string atau int... Tolong lihat hasil edit saya lagi.   -  person user3648450    schedule 25.05.2014
comment
Mengapa Anda memerlukan rekursi?   -  person rpax    schedule 25.05.2014
comment
Apakah Anda harus menggunakan String sebagai hasilnya? StringBuilder akan lebih mudah untuk dikerjakan.   -  person Pshemo    schedule 25.05.2014


Jawaban (4)


public static String decToBin(int number) {
    if(number == 0)
        return "";
    return new Integer(number % 2).toString() + new Integer(decToBin(number / 2)).toString();
}

Pendekatan ini memiliki sedikit kelemahan.

  • Pertama, Anda tidak dapat menggunakan "" sebagai argumen new Integer("") karena "" tidak memiliki nilai, sehingga Anda akan melihat NumberFormatException.

  • Masalah lainnya adalah urutan menghasilkan hasil. number % 2 harus ditempatkan setelah hasil decToBin(number / 2), seperti yang Anda lakukan pada contoh pertama, di mana Anda mencetaknya setelah panggilan decToBin rekursif

    decToBin(number / 2);
    System.out.print(number % 2);
    
  • Terakhir dalam pernyataan return Anda membuat string baru, jadi untuk menghasilkan "100101" Anda akan menghasilkan "" "1" "01" "101" 0101" "00101" dan terakhir "100101". Untuk menghindarinya gunakan StringBuilder dan metode append-nya.

person Pshemo    schedule 25.05.2014
comment
Ini mengubah bilangan bulat biner, bukan bilangan desimal. - person user207421; 17.06.2017
comment
@EJP Halo. Bisakah Anda memperjelas komentar Anda? Saya tidak mengatakan Anda salah tetapi saya tidak yakin apa yang Anda maksud. Dari apa yang saya lihat, pertanyaannya adalah tentang membuat representasi biner dari integer yang disediakan dalam sistem desimal (saya tidak yakin apakah OP ingin mengembalikan String atau int di sini jadi tidak fokus pada itu). Juga jawaban ini tidak dimaksudkan untuk memberikan solusi yang berfungsi (karena ini jelas merupakan pertanyaan pekerjaan rumah tentang rekursi) tetapi untuk menunjukkan beberapa kesalahan yang dilakukan OP dalam kodenya. - person Pshemo; 17.06.2017

Ini agak lama, tapi demi referensi dan memberikan jawaban yang benar, inilah yang perlu Anda lakukan:

public static String dec2Bin(int num) {

    String result = ((num % 2 == 0) ? "0" : "1");

    if (num == 0 || num == 1) {
        return result;
    }

    return dec2Bin(num/2) + result;
}
person Hatem Jaber    schedule 04.11.2016
comment
Ini mengubah bilangan bulat biner, bukan bilangan desimal. - person user207421; 17.06.2017

person    schedule
comment
Ini mengubah bilangan bulat biner, bukan bilangan desimal. - person user207421; 17.06.2017

person    schedule
comment
Contoh kodenya bagus, tetapi tidak ada klarifikasi tentang fungsinya. Harus menjelaskan jawabannya (sebenarnya, Integer.toBinaryString(n) menurut saya adalah yang diinginkan penulis). - person Ironcache; 03.08.2016