किसी प्रोजेक्ट के लिए, मुझे अपनी मुख्य विधि के अंदर getBill विधि को कॉल करने की आवश्यकता है। getBill एक इंट वैल्यू (बिल) देता है, लेकिन जब मैं इसे इस तरह घोषित करता हूं:

getBill(qty);

मुझे एक त्रुटि मिली है। मैं विधियों का उपयोग करने के लिए अपेक्षाकृत नया हूं, क्या मैंने विधि को सही ढंग से घोषित किया है? क्या किसी विधि का उपयोग किए बिना getBill करने का कोई तरीका है?

यह उस कोड का हिस्सा है जिस पर मैं काम कर रहा हूं जहां मुझे विधि को कॉल करने की आवश्यकता है:

        while (true) {
            line = bc.readLine();
            if (line == null)
                break;
            billdata = line.split(",");
            accs = Integer.parseInt(billdata[0]);
            type = billdata[1];
            qty = Integer.parseInt(billdata[2]);
            company = billdata[3];


            if (accNo == accs) {
                System.out.println("Your RHY Telecom account has been found.");
                System.out.printf("%5s", accs);
                System.out.printf("%24s", qty);
                System.out.printf("%10s", type);
                System.out.printf("%20s", company);

                System.out.println("Your current charges are: ");

            }

        }
    }

यह विधि ही है:

    public static int getBill(int plan, int bill, int qty, String[] accountdata, String line) throws Exception {//getting details from text file number 2, then computing the bill
        BufferedReader bf = new BufferedReader(new FileReader("res/Account-Info-Final1.txt"));
        accountdata = line.split(",");
        plan = Integer.parseInt(accountdata[4]);
        bill = 0;
        int smslimit = Integer.parseInt(accountdata[5]);
        int calllimit = Integer.parseInt(accountdata[6]);
        double datalimit = Double.parseDouble(accountdata[7]);

        if (qty > smslimit) {
            bill = (qty * 2) + plan;
        } else if (qty > calllimit) {
            bill = (qty * 5) + plan;
        } else if (qty > datalimit) bill = (qty * 3) + plan;
        else if (qty <= smslimit || qty <= datalimit || qty <= calllimit){
                bill += plan;
            }
        return bill;
        }


    }
-3
TheLittleGreenFreshie 3 पद 2019, 15:22

2 जवाब

इनपुट और आउटपुट के साथ एक गणितीय फ़ंक्शन के रूप में एक विधि के बारे में सोचें।

आपके getBill मेथड डिक्लेरेशन को केवल उन चीजों के लिए मेथड आर्गुमेंट्स (यानी, कॉमा-सेपरेटेड वेरिएबल्स को कोष्ठक में) घोषित करना चाहिए, जिन्हें इनपुट के रूप में मेथड की आवश्यकता होती है।

कोड जो गेटबिल विधि को कॉल करता है उसे इनपुट के रूप में plan मान देने की आवश्यकता नहीं है। विधि स्वयं उस मान को तुरंत ओवरराइड कर देती है और कॉलिंग कोड द्वारा प्रदान किए गए किसी भी मूल्य को अनदेखा कर देती है।

आपको विधि तर्कों से plan को हटा देना चाहिए, और इसके बजाय इसे विधि निकाय के अंदर घोषित करना चाहिए:

int plan = Integer.parseInt(accountdata[4]);

bill, accountdata, और line के लिए भी यही सच है:

String line = bf.readLine();
String[] accountdata = line.split(",");
int plan = Integer.parseInt(accountdata[4]);
int bill = 0;

एक बार जब आप उन सभी को अपने विधि हस्ताक्षर से हटा देते हैं, तो यह इस तरह दिखेगा:

public static int getBill(int qty)

... जो आपको अपनी इच्छानुसार विधि को कॉल करने की अनुमति देगा।

0
VGR 3 पद 2019, 15:55

आपकी गेटबिल विधि में 5 तर्क हैं, और आप एक तर्क में गुजर रहे हैं।

getBill(1, 2, 3, new String[] { "Hello", "World" }, "Line"); जैसा कुछ, plan को 1, bill से 2, वगैरह सेट करते हुए, विधि को लागू करेगा। आप plan को 1qtyis, and the other 4 arguments are still missing; you need to explicitly add them to yourgetBill()` के किसी भी मान पर सेट कर रहे हैं।

ध्यान दें: सिडेनोट, आप अपने फ़ाइल संसाधनों को बंद नहीं कर रहे हैं, इसलिए संसाधनों से बाहर होने के कारण यह कोड जल्द ही क्रैश हो जाएगा। 'संसाधनों के साथ प्रयास करें' देखें ताकि आप उस फ़ाइल को सुरक्षित रूप से खोल सकें।

0
rzwitserloot 3 पद 2019, 15:55