2012-11-02 14 views
5

मेरे पास एक जावा प्रोजेक्ट है जहां मुझे एक ऐसा प्रोग्राम लिखने के लिए कहा गया था जो उपयोगकर्ता को कई दिनों और तापमान इनपुट करने के लिए कहता है। वहां से मुझे औसत अस्थायी, औसत अस्थायी दिनों से ऊपर के साथ-साथ तापमान को उच्चतम से सबसे कम क्रमबद्ध करना होगा। * मैंने इन सभी चीजों को सफलतापूर्वक किया है, हालांकि, मेरे प्रोफेसर मुझसे अलग तरीकों को बनाकर मेरे कोड को सरल बनाने के लिए कह रहे हैं। उदाहरण के लिए, औसत से अधिक दिनों के लिए एक विधि है, और इसी तरह। हालांकि मैं इसकी अवधारणा को समझता हूं, मुझे यकीन नहीं है कि इस तरह से कैसे पहुंचे और कैसे जाएं। * कृपया मदद करें?मैं इसे अलग तरीकों से कैसे लिखूं?

import java.util.Scanner; 

public class NumberAboveAverage { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     System.out.println("Enter number of days of temperature to calculate:"); 
     Scanner keyboard = new Scanner(System. in); 
     int day = keyboard.nextInt(); 
     int[] temperature = new int[day]; 

     System.out.println("Enter " + day + " temperatures to calculate."); 

     for(int i=0; i<day; i++){ 
      temperature[i] = keyboard.nextInt(); 
     } 

     int sum = 0; 
     for(int i=0; i<day; i++){ 
      sum = sum + temperature[i]; 

     } 

     int average = sum/day; 
     System.out.println("The average temperature is: " + average); 

     int daysOver=0; 
     for(int i=0; i<day; i++){ 
      if (temperature[i] > average){ 
       daysOver++; 
      } 
     } 
     System.out.println("The temperature was above average for " + daysOver + " day(s)."); 


      for (int i = 0; i < temperature.length; i++) { 
       int min = i; 
       for (int j = i; j < temperature.length; j++) { 
        if (temperature[j] < temperature[min]) 
         min = j; 
       } 
       int temp; 
       temp = temperature[i]; 
       temperature[i] = temperature[min]; 
       temperature[min] = temp; 
      } 

    System.out.print("The temperatures in increasing order are: "); 
    for(int i=0; i<day; i++){ 
     System.out.print(temperature[i]+" "); 
    } 

} 
} 
+0

आप 'मुख्य()' से बाहर सब कुछ (लगभग) स्थानांतरित करना चाहते हैं और महत्वपूर्ण चर उदाहरण फ़ील्ड बना सकते हैं। – Dmitri

उत्तर

1

आप नीचे के रूप में एक अलग तरीकों में से एक कार्य करने के लिए चाहते हो सकता है :

public static void main(String[] args) { 
    int[] temperature = new int[1]; 
    Scanner keyboard = new Scanner(System. in); 
    readTemperatures(keyboard, temperature); 
    int sum = getSum(temperature); 
    int average = sum/temperature.length; 
    System.out.println("The average temperature is: " + average); 
    int daysOver=getDaysOver(temperature, average); 
    System.out.println("The temperature was above average for " 
                 + daysOver + " day(s)."); 
    sortTemperature(temperature); 
    printTemperature(temperature); 
} 

और तरीकों बनाने के रूप में नीचे:

private static void printTemperature(int[] temperature) { 
    System.out.print("The temperatures in increasing order are: "); 
    for(int i=0; i<temperature.length; i++){ 
     System.out.print(temperature[i]+" "); 
    } 
} 

private static void readTemperatures(Scanner keyboard, int[] temperature){ 
     System.out.println("Enter number of days of temperature to calculate:"); 
     int day = keyboard.nextInt(); 
     temperature = new int[day]; 
     System.out.println("Enter " + day + " temperatures to calculate."); 
     for(int i=0; i<day; i++){ 
     temperature[i] = keyboard.nextInt(); 
     } 
} 

शेष विधियों को पूरा करें।

+0

धन्यवाद! मुझे ये अब मिला। – user1793083

+0

मुझे यह नहीं लगता कि मैं इसे प्राप्त करता हूं। धन्यवाद! – user1793083

1

चरण हैं, जो प्रत्येक पहेली का एक टुकड़ा का समाधान में अपने कोड तोड़:

यहाँ कोड मैं अब तक होता है। उदाहरण के लिए, औसत तापमान की गणना करने के लिए एक विधि है, औसत तापमान से ऊपर के दिनों की गणना करने के लिए एक और विधि और तापमान को क्रमबद्ध करने के क्रम में क्रमबद्ध करने के लिए एक और तरीका है।

1

कोड में आपके लिए आपके प्रश्न का उत्तर देने के बजाय, मैं आपको कुछ पॉइंटर्स दूंगा।

आपके पास कुछ ऐसे कार्य हैं जिन्हें आप अमूर्त कर सकते हैं।

  • एक समारोह जो औसत की गणना करता है।
  • एक ऐसा फ़ंक्शन जो औसत से अधिक दिनों की गणना करता है।
  • एक ऐसा कार्य जो तापमान को व्यवस्थित करता है।
  • एक ऐसा फ़ंक्शन जो तापमान को क्रम में प्रिंट करता है।
4

कोड की अपघटन के लिए एक अच्छा दृष्टिकोण अंग्रेजी में एक ही अपघटन है! आपने इसे स्वयं कहा:

एक ऐसा प्रोग्राम लिखें जो उपयोगकर्ता को कई दिन और तापमान इनपुट करने के लिए कहता है। वहां से मुझे औसत अस्थायी, औसत अस्थायी दिनों से ऊपर के साथ-साथ तापमान को उच्चतम से सबसे कम क्रमबद्ध करना होगा।

  • उपयोगकर्ता इनपुट के दिन और तापमान के एक नंबर से पूछो
  • औसत अस्थायी
  • तरह लगता है tempatures

हम तो कोड में इस बारी कर सकते हैं!

public static void main(String []args) { 
    int[] temperature = getUserInput(); 
    int average = getAverage(temperature); 
    int daysOver = getDaysOver(temperature, threshold); 

    System.out.println("Average of : " + average + " with " + daysOver + " really hot days"); 
} 

अब आप उन कार्यों में अपने कोड डाल सकते हैं, और प्रिंट आउट जो कुछ भी आप :)

0

खैर पसंद है, शुरुआत के बयान के कुछ यथोचित पूरा अनुक्रम लेने के लिए, उदाहरण के लिए:

int daysOver=0; 
for(int i=0; i<day; i++){ 
    if (temperature[i] > average){ 
     daysOver++; 
    } 
} 

चित्रित करें कि आपको किन पैरामीटरों को खिलाने की आवश्यकता है और आपको क्या चाहिए:

  • दिन (शायद "numDays" को कॉल करना चाहिए, लेकिन टी टोपी एक और चर्चा) है
  • तापमान []
  • सीमा (औसत)
  • वापसी daysOver

(मैं अनदेखी कर रहा हूँ, अस्थायी रूप से के लिए, जटिलता/"अनुकूलन" है कि आप से day प्राप्त कर सकते हैं । सरणी का आकार)

तो, एक तरीका हो सकता है:

computeDaysOver(int[] temperature, int average, int day) { 
    int daysOver=0; 
    for(int i=0; i<day; i++){ 
     if (temperature[i] > average){ 
      daysOver++; 
     } 
    } 
} 

लेकिन आप वास्तव में एक वापसी प्रकार निर्दिष्ट करने के लिए, और की जरूरत है इसे वापस:

int computeDaysOver(int[] temperature, int average, int day) { 
    int daysOver=0; 
    for(int i=0; i<day; i++){ 
     if (temperature[i] > average){ 
      daysOver++; 
     } 
    } 
    return daysOver; 
} 

और निश्चित रूप से, आप जहां मूल कोड था के लिए अपनी नई विधि स्थानापन्न करने की जरूरत है:

int daysOver = computeDaysOver(temperature, average, day); 

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

उदाहरण के लिए, आप computeAverage फ़ंक्शन लिख सकते हैं जिसमें संक्षेप लूप और विभाजन शामिल है। आप आमतौर पर केवल एक समारोह में (या एक अलग समारोह में) विभाजन में संक्षेप लूप नहीं करते हैं जब तक कि केवल संक्षेप में गणना करने की कुछ अलग आवश्यकता न हो। और, यदि आपने किसी कारण से संक्षेप में एक अलग फ़ंक्शन के रूप में आवश्यकता है, तो आप अपना computeAverage फ़ंक्शन को सारांश फ़ंक्शन का आह्वान करेंगे और फिर पैरामीटर के रूप में योग में गुजरने के बजाय विभाजन करें।

(इन उदाहरणों बल्कि इस मामले में तुच्छ हैं, लेकिन सिद्धांतों कोड के बहुत बड़े और अधिक जटिल ब्लॉक पर लागू कर दिए।)

0

तो क्यों एक का उपयोग अलग अलग तरीके में अपने कोड को तोड़ने के लिए? ऐसा इसलिए है क्योंकि अलग-अलग तर्क/आवश्यकता को अलग करने के लिए, ताकि code becomes readable and bug hunting becomes easy। इस कारण से तरीकों एक वापसी प्रकार है के लिए

calculating the average will go into separate method. 
sorting the temperatures-will go into separate method.. 
A method that prints temperatures in order. 

:

आपके मामले में आप इन बातों को क्या करना है। इसका मतलब यह है कि गणना के बाद और तर्क के माध्यम से जाने के बाद, यह कुछ आउटपुट के साथ आएगा, इसलिए हम इस मान को प्राप्त करने के लिए रिटर्न प्रकार के तरीकों का उपयोग कर सकते हैं।

अब के बाद कि उपयोग इस

MyClass myClassObj = new MyClass(); 

की तरह अपने वर्ग की वस्तु बनाने और अब इस

myClassObj.myMethod(); 

तरह संदर्भ चर myClassObj का उपयोग कर अपने तरीकों कॉल और अगर यह रिटर्न एक चर में सहेज सकते हैं कुछ कुछ।

तो जैसे myMethod() एक String मान देता है यदि ऐसा है तो हम बुला विधि में हमारे myMethod() के परिणाम के लिए इस तरह कर सकते हैं:

String myStrVar = myClassObj.myMethod(); 
संबंधित मुद्दे