लूप मुद्दों के दौरान करते हैं

यह कोड मूल किराने की कैलकुलेटर के बटन के लिए है। जब मैं बटन दबाता हूं तो एक इनपुट संवाद बॉक्स दिखाता है कि आप अपना आइटम मूल्य कहां दर्ज करते हैं। मेरी समस्या यह है कि मैं यह नहीं समझ सकता कि do ... कैसे प्राप्त करें लूप इनपुट प्रविष्टि को प्रविष्टि के बाद पॉप अप करने के लिए पॉप अप करें।

मैं हमेशा बैक अप लेना चाहता हूं जब तक कि उपयोगकर्ता कुछ भी ठीक से नहीं चुनता, या रद्द कर देता है, जिस स्थिति में लूप को तोड़ना चाहिए और शेष बक्से भरना चाहिए। वर्तमान कोड के साथ मुझे प्रत्येक बार मैन्युअल रूप से संवाद वापस लाने के लिए बटन दबा देना होगा। मैं हालात के दौरान अलग-अलग खेल रहा हूं और अगर बयान लेकिन मैं इसे काम करने के लिए प्रतीत नहीं कर पा रहा हूं। मैं एक नौसिखिया हूं इसलिए क्षमा करें अगर यह आसान है, और आपके समय के लिए धन्यवाद।

नोट: मैंने उद्देश्य पर खाली स्थिति को छोड़ दिया, बस यह दिखा रहा है कि मुझे इसकी आवश्यकता है।

  NumberFormat numForm = NumberFormat.getCurrencyInstance();
  double itemPrice;
  double tax;

  do {
    String s = (String)JOptionPane.showInputDialog("Enter item price:");
    if (s == null || s.equals("")) { 
        double subtotal = getPurchase();
        double total;
        tax = subtotal * .065;
        txtTax.setText(numForm.format(tax));
        total = tax + subtotal;
        txtTotal.setText(numForm.format(total));
    } else {
        try {
            itemPrice = Double.parseDouble (s);
            recordPurchase(itemPrice);
            txtPrice.setText(numForm.format(itemPrice));

            double subtotal = getPurchase();     

            txtSubtotal.setText(numForm.format(subtotal));
            int items = getItems();
            String totalItems = Integer.toString(items);
            txtItems.setText(totalItems);

        }//end try
        catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "You must enter numeric data only!");
        }//end catch
      }//end if Else
    }// end do
    while();
0
@ बॉबी डिजीटल मुझे बस एक और प्रविष्टि के लिए तैयार, पॉप अप करने की जरूरत है। फिर जब कुछ भी ठीक नहीं होता है, तो क्लिक किया जाता है, या रद्द हो जाता है, तो यह लूप को तोड़ देता है और फिर अंतिम तीन बक्से को पॉप्युलेट करता है
जोड़ा लेखक Devin, स्रोत
क्या इसे बैक अप करना होगा या स्वयं को onClick साफ़ करना होगा? IOW, क्या यह वास्तव में ऐसा करने के लिए आवश्यक है? इसके अतिरिक्त आपको जांचने के लिए अपने while (); के लिए एक शर्त की आवश्यकता है।
जोड़ा लेखक ChiefTwoPencils, स्रोत

3 उत्तर

यह nicer को जबकि के रूप में पढ़ सकता है?

String s;
while ((s = (String) JOptionPane.showInputDialog("Enter item price:")) != null) {
    if (s.isEmpty()) { break; }
    try {
        itemPrice = Double.parseDouble (s);
        recordPurchase(itemPrice);
        txtPrice.setText(numForm.format(itemPrice));

        double subtotal = getPurchase();     

        txtSubtotal.setText(numForm.format(subtotal));
        int items = getItems();
        String totalItems = Integer.toString(items);
        txtItems.setText(totalItems);

    } 
    catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(this, "You must enter numeric data only!");
    }
}

double subtotal = getPurchase();
double total;
tax = subtotal * .065;
txtTax.setText(numForm.format(tax));
total = tax + subtotal;
txtTotal.setText(numForm.format(total));

इस तरह अंत में निष्पादित कोड को दृष्टि से दिखाया गया है।

0
जोड़ा

आपने अपने वक्तव्य में एक शर्त लगाई है। यदि स्थिति सच है, तो यह फिर से जारी रहेगी।

String s = "";
do 
{
    s = (String)JOptionPane.showInputDialog("Enter item price:");
    if (s == null || s.equals("")) 
    {
        ...
    }
    ...
}while(s != null || !s.equals(""));
0
जोड़ा
मुझे पता है कि मैंने उद्देश्य पर लूप खाली छोड़ दिया क्योंकि मेरा कोई भी काम नहीं करता था। आपके उत्तर के लिए धन्यवाद लेकिन दुर्भाग्य से, मुझे त्रुटियां मिलती हैं। यह मुझे बताता है कि जब मैं स्ट्रिंग एस = "" डालता हूं तब भी स्ट्रिंग एस पहले ही परिभाषित किया गया है; लूप के बाहर
जोड़ा लेखक Devin, स्रोत
@peeskillet, आपका दृष्टिकोण काम करता था, सबकुछ काम करता है कि यह कैसे माना जाता है लेकिन जब मैं रद्द करता हूं तो मुझे एक त्रुटि मिल रही है, और मुझे लूप को तोड़ने के बारे में अनिश्चितता है ताकि जब मैं ठीक हो जाऊं तो बॉक्स दूर हो जाता है
जोड़ा लेखक Devin, स्रोत
समस्या हल हो गई, आईएफ के अंत में एक ब्रेक जोड़ा। आपकी मदद के लिए सभी को धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं।
जोड़ा लेखक Devin, स्रोत
यदि आप पहले से ही s == null || जांच रहे हैं s.equals ("") एक बार जब आप इसे जबकि (true) बना सकते हैं और पहली बार चेक के दौरान कॉल ब्रेक कर सकते हैं। अन्यथा आप एक ही चेक दो बार बना रहे हैं। आपकी वांछित स्थिति && || भी नहीं होनी चाहिए। || के साथ यदि उपयोगकर्ता रद्द करता है तो आपको एनपीई मिल जाएगा।
जोड़ा लेखक Radiodef, स्रोत
यह काम नहीं करेगा, आप do के अंदर एक नया स्ट्रिंग घोषित कर रहे हैं। s = .. do नहीं स्ट्रिंग एस = .. के अंदर होना चाहिए
जोड़ा लेखक Paul Samsotha, स्रोत
@ डेविन, बस स्ट्रिंग के स्ट्रिंग भाग को हटाएं जो do के अंदर है
जोड़ा लेखक Paul Samsotha, स्रोत
@ सैमियाम यह ध्यान देने योग्य हो सकता है कि s.isEmpty() बस ! S.equals ("") या यहां तक ​​कि s.length() के साथ काम करता है == 0
जोड़ा लेखक Justin, स्रोत
 do {
    String s = (String)JOptionPane.showInputDialog("Enter item price:");
    //user has pressed the cancel button then s becomes null
    if(s == null){
        break;
    }
   //your code

    }
 while(true);
0
जोड़ा