Mengalami Masalah Dengan Masalah Rekursi yang Mengubah String menjadi Int

Jadi masalahnya adalah sebagai berikut. Anda harus membuat metode yang menggunakan string sebagai parameter yang terdiri dari semua angka dan Anda perlu mengambil string itu dan mengubahnya menjadi Integer. Anda harus menggunakan solusi rekursif untuk menyelesaikan masalah.

Saya telah menulis kode berikut dan berfungsi dengan baik ketika saya memasukkan "1234" atau "138775" tetapi segera setelah saya memasukkan angka yang berisi 0 hasilnya akan aneh.

100, 1001, 101, dan 12045 masing-masing menghasilkan 10, 11, 110, dan 1245. Seperti disebutkan di atas Kode berfungsi dengan baik ketika saya mengirimkannya seperti "1234" atau "14384" tetapi begitu ada nol, ia cenderung menghapus nol itu.

Saya telah mencoba konversi int ke string yang berbeda dari kelas Integer seperti parse(int) tetapi hasilnya sama.

/**
 * converts a string of numbers to an int
 * 
 * @param String str: original string of numbers
 * @return int recursiveStringInt: returns the int value of the string
 */
public static int recursiveStringInt(String str)
{
    if(str.length() == 1)
        return Integer.valueOf(str);
    else
    {
        return Integer.valueOf(str.substring(0,1) + recursiveStringInt(str.substring(1)));
    }
}

Terima kasih atas bantuan kalian!

Tolong beri tahu saya jika ada klarifikasi yang diperlukan.


person Joe Smith    schedule 30.10.2018    source sumber
comment
Pertimbangkan System.out.println(Integer.valueOf("0123"));   -  person Scary Wombat    schedule 30.10.2018
comment
Saya pikir kode Anda seharusnya membagi dan menggunakan pangkat 10 sesuatu   -  person Scary Wombat    schedule 30.10.2018
comment
Anda seharusnya menanyakan pertanyaan semacam ini pada Tinjauan Kode dan bukan Stackoverflow. T   -  person Juniar    schedule 30.10.2018
comment
Apa hasilnya yang aneh? Mengetahui hal itu dapat membantu kita memecahkan masalah tersebut.   -  person Darien Springer    schedule 30.10.2018


Jawaban (3)


Tanda kurung Anda sedikit melenceng dari apa yang ingin Anda lakukan, dan logikanya perlu diperbaiki.. yang Anda inginkan adalah mengambil karakter terakhir dari string saat ini, mengubahnya menjadi bilangan bulat, dan tambahkan ke konversi bagian depan string dikalikan 10.

int recursiveStringInt(String str) {
    int length = str.length()
    if(length == 1)
        return Integer.valueOf(str);
    else
    {
        int temp = Integer.valueOf(str.substring(length-1)) + ( 10 * recursiveStringInt(str.substring(0,length-1)));
        return temp;
    }
}

Kasus sepele "8" menghasilkan hanya blok pertama yang dieksekusi.

Kasus berikutnya "83" menghasilkan temp = 3 + (10 * 8) = 83

Kasus berikutnya "103" menghasilkan temp = 3 + (10 * (0 + (10 * 1))) = 103

person billjamesdev    schedule 30.10.2018

Coba gunakan solusi pembagian dan kekuasaan

public static void main(String[] args) {

    System.out.println(recursiveStringInt("12034", 0));

}

public static int recursiveStringInt(String str, int pow)
{
    if(str.length() < 1)
        return 0;
    else
    {
        int temp = Integer.valueOf(str.substring(str.length() -1)) 
                                                       * (int) Math.pow(10.0, 1.0 * pow);
        temp += recursiveStringInt(str.substring(0, str.length() -1), pow + 1);
        return temp;
    }
}
person Scary Wombat    schedule 30.10.2018
comment
Saya mencoba membaginya agar OP lebih mudah memahaminya, meskipun milik Anda lebih baik. - person Scary Wombat; 30.10.2018
comment
tidak masalah apa pun - butuh lebih banyak kopi ;-) - person Scary Wombat; 30.10.2018

Ini karena ketika Anda mengurai substring seperti 054 ke int, menjadi 54.

Coba kode ini:-

public static int recursiveStringInt(String str) {
    return str.length() == 1
            ? Integer.valueOf(str)
            : (int) (Integer.parseInt(str.substring(0, 1)) * Math.pow(10, str.length() - 1)) + recursiveStringInt(str.substring(1));
}

Saya telah menggunakan logika ini: -

105 = 1*100 + 0*10 + 5*1

Sunting: Jika Anda tidak memahami operator ternary, berikut adalah versi if-else:-

public static int recursiveStringInt(String str) {
    if (str.length() == 1) {
        return Integer.valueOf(str);
    } else {
        return (int) (Integer.parseInt(str.substring(0, 1)) * Math.pow(10, str.length() - 1)) + recursiveStringInt(str.substring(1));
    }
}
person Kartik    schedule 30.10.2018