angka dari string ke array char ke array int

Saya memiliki input string dan saya mencoba mengonversinya menjadi array karakter kemudian menyimpan angka-angka dari array itu sedemikian rupa sehingga saya dapat menggunakannya dalam program kartu kredit. Inilah cara saya mencoba melakukannya saat ini.

Saat ini saya mendapatkan Pengecualian Null Pointer di:

charDigits[x - invalid] = charInput[x];

Saya harus bisa menggunakan bilangan bulat pada algoritma kartu kredit dari input string.

public class testFunction {
    private char[] charInput;
    private char[] charDigits;
    private int[] intInput;
    private int invalid = 0;
    private String input = "125-6543-3356";

    public testFunction()
    {
        charInput = input.toCharArray();

        for(int x = 0; x < charInput.length; x++)
        {
            if (charInput[x] == '0' || charInput[x] == '1' || charInput[x] == '2' || charInput[x] == '3' || charInput[x] == '9' ||
                charInput[x] == '4' || charInput[x] == '5' || charInput[x] == '6' || charInput[x] == '7' || charInput[x] == '8')
            {               
                charDigits[x - invalid] = charInput[x];
            }
            else
            {
                invalid++;
            }
            System.out.println("charDigits: " + x + ": " + charDigits[x] );
        }

        for(int i = 0; i < charDigits.length; i++)
        {
            intInput[i] = Integer.parseInt(charDigits[i] + "");
        }
    }

        public static void main(String[] args)
        {
            testFunction test = new testFunction();
        }
}

person Bizton    schedule 23.03.2014    source sumber
comment
coba gunakan sesuatu seperti if(c >= '0' && c <= '9') daripada menyatukan semua || itu. Seperti yang Anda lihat di sini titik kode untuk 0 hingga 9 bersebelahan.   -  person NameSpace    schedule 24.03.2014


Jawaban (1)


Saya tidak melihat Anda menginisialisasi charDigits di mana pun. Nilai awalnya adalah null, maka mengaksesnya seperti charDigits[i] akan meningkatkan NPE (Anda seharusnya dapat dengan mudah menyimpulkan ini berdasarkan dokumentasi NullPointerException). Anda harus menginisialisasi charDigits terlebih dahulu ke array dengan ukuran berapa pun (sepertinya ukuran maksimalnya adalah charInput.length):

charDigits = new char[charInput.length];

Namun, agar logika Anda yang lain berfungsi, Anda juga perlu melacak berapa banyak digit dalam charDigits yang benar-benar valid (karena pada akhirnya bisa lebih pendek dari charInput). Anda memiliki banyak pilihan:

  • Pertimbangkan melakukan valid++ dalam kasus positif, bukan invalid++ dalam kasus negatif, dan indeks dengan charDigits[valid], bukan [x - invalid]. Di akhir loop, valid akan berisi jumlah karakter yang disalin ke charDigits, dan intInput dapat diinisialisasi sesuai dengan itu.
  • Karena elemen charDigits akan diinisialisasi ke 0, hentikan penyalinan ke intInput ketika charDigits[i] == 0.
  • Gunakan array dinamis untuk charDigits (misalnya ArrayList<Character>) dan tambahkan sesuai kebutuhan.
  • Gunakan StringBuilder atau sesuatu sebagai gantinya untuk charDigits, dan tambahkan sesuai kebutuhan.
  • Dll.
person Jason C    schedule 23.03.2014