Java - แปลงทศนิยมเป็นไบนารี - จำนวนเต็ม - ฟังก์ชันแบบเรียกซ้ำ

เฮ้ ฉันกำลังพยายามแปลง int ทศนิยมเป็น binary int จริงๆ โดยไม่ประสบความสำเร็จ

โปรดช่วยฉันด้วย

และฉันไม่ต้องการทำให้เป็น 'System.out.println()' เพราะฉันได้ทำไปแล้ว

ขอบคุณ!

`ฉันต้องการฟังก์ชันแบบเรียกซ้ำที่ได้รับ int ทศนิยมและส่งกลับ int ไบนารี

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

ว่ามันเป็นสิ่งที่ฉันทำ...

เมื่อฉันพยายามรับสตริง:

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

ข้อผิดพลาด...


person user3648450    schedule 25.05.2014    source แหล่งที่มา
comment
โปรดแสดงให้เราเห็นว่าคุณได้พยายามอะไรบ้าง   -  person PakkuDon    schedule 25.05.2014
comment
และรหัสของคุณมีปัญหาอะไร? คุณได้รับข้อผิดพลาด/ผลลัพธ์ที่ไม่ถูกต้องหรือไม่? หรือคุณแค่ขอให้เราเขียนมันใหม่เป็นอย่างอื่นที่ไม่ได้ใช้ System.out.println?   -  person Pshemo    schedule 25.05.2014
comment
ใช่ ฉันต้องการให้มันเป็นสตริงหรือ int... โปรดดูการแก้ไขของฉันอีกครั้ง   -  person user3648450    schedule 25.05.2014
comment
ทำไมคุณถึงต้องการการเรียกซ้ำ?   -  person rpax    schedule 25.05.2014
comment
คุณต้องใช้ String หรือไม่? StringBuilder น่าจะทำงานด้วยได้ง่ายกว่า   -  person Pshemo    schedule 25.05.2014


คำตอบ (4)


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

วิธีนี้มีข้อบกพร่องเล็กน้อย

  • ขั้นแรก คุณไม่สามารถใช้ "" เป็นอาร์กิวเมนต์ของ new Integer("") ได้ เนื่องจาก "" ไม่มีค่า ดังนั้นคุณจะเห็น NumberFormatException

  • ปัญหาอีกอย่างคือลำดับการสร้างผลลัพธ์ number % 2 ควรวางไว้ หลัง ผลลัพธ์ของ decToBin(number / 2) เช่นเดียวกับที่คุณทำในตัวอย่างแรก โดยที่คุณกำลังพิมพ์หลังจากการเรียกซ้ำ decToBin

    decToBin(number / 2);
    System.out.print(number % 2);
    
  • สุดท้ายนี้ในคำสั่ง return คุณกำลังสร้างสตริงใหม่ ดังนั้นในการสร้าง "100101" คุณจะต้องสร้าง "" "1" "01" "101" 0101" "00101" และสุดท้ายคือ "100101" เพื่อหลีกเลี่ยงการใช้ StringBuilder และเมธอด append

person Pshemo    schedule 25.05.2014
comment
วิธีนี้จะแปลงจำนวนเต็มไบนารี ไม่ใช่เลขทศนิยม - person user207421; 17.06.2017
comment
@EJP สวัสดี คุณช่วยชี้แจงความคิดเห็นของคุณได้ไหม? ฉันไม่ได้บอกว่าคุณผิด แต่ฉันไม่แน่ใจว่าคุณหมายถึงอะไร จากสิ่งที่ฉันเห็นคำถามเกี่ยวกับการสร้างการแทนไบนารี่ของ จำนวนเต็ม ที่ให้ไว้ในระบบทศนิยม (ฉันไม่แน่ใจว่า OP ต้องการส่งคืน String หรือ int ที่นี่หรือไม่ดังนั้นจึงไม่ได้เน้นไปที่เรื่องนั้น) นอกจากนี้คำตอบนี้ไม่ได้มีวัตถุประสงค์เพื่อให้วิธีแก้ปัญหาในการทำงาน (เนื่องจากเป็นคำถามการบ้านที่ชัดเจนเกี่ยวกับการเรียกซ้ำ) แต่เพื่อชี้ข้อผิดพลาดเล็กน้อยที่ OP ทำในโค้ดของเขา - person Pshemo; 17.06.2017

นี่เป็นเรื่องเก่าเล็กน้อย แต่เพื่อประโยชน์ในการอ้างอิงและให้คำตอบที่ถูกต้อง นี่คือสิ่งที่คุณต้องทำ:

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
วิธีนี้จะแปลงจำนวนเต็มไบนารี ไม่ใช่เลขทศนิยม - person user207421; 17.06.2017

person    schedule
comment
วิธีนี้จะแปลงจำนวนเต็มไบนารี ไม่ใช่เลขทศนิยม - person user207421; 17.06.2017

person    schedule
comment
ตัวอย่างโค้ดนั้นดี แต่ไม่มีการชี้แจงว่ามันทำอะไร ควรอธิบายคำตอบ (จริงๆ Integer.toBinaryString(n) คือสิ่งที่ผู้เขียนอยากให้คิด) - person Ironcache; 03.08.2016