Saya membuat sistem veteriner hewan peliharaan yang memiliki transaksi pembayaran seperti ini. Setiap kali saya mencoba memasukkan pada 1 jtextfield dan menghitungnya sambil meninggalkan JTextfield lain kosong, kesalahan muncul: pengecualian di utas "AWT-EventQueue-0" java.lang.numberFormatException: string kosong

Berikut ini adalah formulir menu transaksi pembayaran terlampir

Menu Transaksi Pembayaran

Bagaimana saya bisa mendapatkan input dan menghitungnya sambil mengabaikan bidang teks lain kosong (karena misalnya pelanggan tidak mendapatkan layanan lain, hanya layanan konsultasi)

Di bawah ini adalah kode terlampir saya:

    double Qty1 = Double.parseDouble(qty_consult.getText());
    double Qty2 = Double.parseDouble(qty_dogvac.getText());
    double Qty3 = Double.parseDouble(qty_catvac.getText());
    double Qty4 = Double.parseDouble(qty_antirabies.getText());
    double Qty5 = Double.parseDouble(qty_deworm.getText());
    double Qty6 = Double.parseDouble(qty_blood.getText());
    double Qty7 = Double.parseDouble(qty_urinalysis.getText());
    double Qty8 = Double.parseDouble(qty_skin.getText());
    

    double addup, subTotal, subtotal,tax_ratefee, fee1, fee2, fee3, fee4, fee5, fee6, fee7, fee8;
            
            

    
    
    String consult_fee = String.format("%.2f", price_consultfee);
        price_consult.setText(consult_fee);
    
    String vac_fee = String.format("%.2f", price_vacfee);
        price_vac.setText(vac_fee);

            
    String vac2_fee = String.format("%.2f", price_vac2fee);
        price_vac2.setText(vac2_fee);

    String rabies_fee = String.format("%.2f", price_rabiesfee);
        price_rabies.setText(rabies_fee);

    String deworm_fee = String.format("%.2f", price_dewormfee);
        price_deworm.setText(deworm_fee);

    String cbc_fee = String.format("%.2f", price_cbcfee);
        price_cbc.setText(cbc_fee);

     String urine_fee = String.format("%.2f", price_urinefee);
        price_urine.setText(urine_fee);

     String skin_fee = String.format("%.2f", price_skinfee);
        price_skin.setText(skin_fee);

        
        
        
        
   
    fee1 = Qty1 * price_consultfee;
    fee2 = Qty2 * price_vacfee;
    fee3 = Qty3 * price_vac2fee;
    fee4 = Qty4 * price_rabiesfee;
    fee5 = Qty5 * price_dewormfee;
    fee6 = Qty6 * price_cbcfee;
    fee7 = Qty7 * price_urinefee;
    fee8 = Qty8 * price_skinfee;
    
    
    String sub1 = String.format("%.2f", fee1);
    sub_consult.setText(sub1);
    
    String sub2 = String.format("%.2f", fee2);
    sub_vac.setText(sub2);
    
    String sub3 = String.format("%.2f", fee3);
    sub_vac2.setText(sub3);
    
    String sub4 = String.format("%.2f", fee4);
    sub_anti.setText(sub4);
    
    String sub5 = String.format("%.2f", fee5);
    sub_deworming.setText(sub5);
    
    String sub6 = String.format("%.2f", fee6);
    sub_cbc.setText(sub6);
    
    String sub7 = String.format("%.2f", fee7);
    sub_urine.setText(sub7);
    
    String sub8 = String.format("%.2f", fee8);
    sub_skin.setText(sub8);

    

    
    
    
    subTotal = fee1 + fee2+ fee3+ fee4 + fee5 + fee6 + fee7 + fee8;
    tax_ratefee = (subTotal * taxrate)/100;
    
    //========================Tax=========================//
    String subTax = String.format("%.2f", tax_ratefee);
    txt_tax.setText(subTax);
    
    //======================SubTotal======================//
    String subTotalAll = String.format("%.2f", subTotal);
    sub_total.setText(subTotalAll);
    
    //====================OverallTotal=====================//
    
    addup = subTotal + tax_ratefee;
    
    String total = String.format("%.2f", addup);
    txt_total.setText(total);
    
    
    //=====================DateandTime=======================//
    
    Calendar timer = Calendar.getInstance();
    timer.getTime();
    SimpleDateFormat intime = new SimpleDateFormat ("HH:mm:ss");
    txt_time.setText(intime.format(timer.getTime()));
    
    SimpleDateFormat indate = new SimpleDateFormat ("dd-MMM-yyyy");
    txt_date.setText(indate.format(timer.getTime()));
    
    
    
    
  

Saya mencoba melakukan ini:

     if (qty_consult.getText().equals("")){
          JOptionPane.showMessageDialog(null,"Empty Field/s");
          
     }else  {
    double Qty1 = Double.parseDouble(qty_consult.getText());
            fee1 = Qty1 * price_consultfee;
             String consult_fee = String.format("%.2f", price_consultfee);
        price_consult.setText(consult_fee);
    
            String sub1 = String.format("%.2f", fee1);
    sub_consult.setText(sub1);
    
     subTotal = fee1;
    tax_ratefee = (subTotal * taxrate)/100;
    
    //========================Tax=========================//
    String subTax = String.format("%.2f", tax_ratefee);
    txt_tax.setText(subTax);
    
    //======================SubTotal======================//
    String subTotalAll = String.format("%.2f", subTotal);
    sub_total.setText(subTotalAll);
    
    //====================OverallTotal=====================//
    
    addup = subTotal + tax_ratefee;
    
    String total = String.format("%.2f", addup);
    txt_total.setText(total);
    
    
    //=====================DateandTime=======================//
    
    Calendar timer = Calendar.getInstance();
    timer.getTime();
    SimpleDateFormat intime = new SimpleDateFormat ("HH:mm:ss");
    txt_time.setText(intime.format(timer.getTime()));
    
    SimpleDateFormat indate = new SimpleDateFormat ("dd-MMM-yyyy");
    txt_date.setText(indate.format(timer.getTime()));

Dan itu menghitung input dengan sempurna dan setelah kesalahan pop-up string kosong lagi. Apakah saya melakukan sesuatu yang salah di sini?

0
Pol Laure 28 Mei 2021, 23:51

1 menjawab

Jawaban Terbaik

Ketika bekerja dengan input pengguna, Anda harus siap mengharapkan apa-apa, pengguna selalu menemukan cara untuk menghancurkan kode Anda, jadi saya akan merekomendasikan Anda untuk membuat jenis metode utilitas untuk mengakses dan menguraikan input. Contohnya:

private static double getNumberInput(JTextField field, double defaultValue){
    String textInput = field.getText();
    //Sorry, don't recall if getText can return a null value
    //just making sure that we dont have a NullPointerException
    //this part can be removed if getText never returns null
    texInput = textInput == null? "" : textInput.trim(); //Make sure you trim the value
    if("".equals(textInput)){
        return defaultValue;
    }
    try{
        return Double.parse(textInput);
    }catch(NumberFormatException ex){
       //Invalid input
       return defaultValue;
    }
}

Dengan cara ini Anda dapat menggunakan kembali metode dan memastikan bahwa ketika Anda mencoba untuk mendapatkan nilai di dalam bidang, Anda selalu memiliki nilai.

double Qty1 = getNumberInput(qty_consult, 0f);
double Qty2 = getNumberInput(qty_dogvac, 0f);
double Qty3 = getNumberInput(qty_catvac, 0f);

Dengan cara ini Anda tidak akan pernah memiliki java.lang.numberFormatException lagi.

0
thordickinson 28 Mei 2021, 21:36