स्विच स्टेटमेंट का उपयोग कर एक चर की गिनती ढूँढना

इस आवेदन में मुझे जनवरी 2010 से दिसंबर 2014 तक हर महीने की कुल बिक्री दर्ज करनी होगी। (48 इनपुट) मुझे उस वर्ष के महीने को प्रदर्शित करने की ज़रूरत है जिसमें न्यूनतम बिक्री और अधिकतम बिक्री है।

समस्या यह है कि मुझे वांछित आउटपुट नहीं मिल रहा है।

package xxxxxxx;
import java.util.Scanner;

public class test{

    public static void main ( String [] args ){
        Scanner keyboard = new Scanner( System.in );
        int getInt=0;
        int count = 0;
        int sum = 0;
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        double average = 0;
        boolean number = true;
        int choice=0;

        while ( number == true )
        {
            System.out.println("Enter A Sales for a month  : ");
            getInt = keyboard.nextInt();
            choice++;
            if ( getInt < 0 )
                number = false;
            else
            {
                if ( getInt > max )
                    max = getInt;

                if ( getInt <= min )
                    min = getInt;

                sum += getInt;
                count++;
            }
        }  
        int maxy=choice%12;
        switch(maxy){
            case 1 :
                System.out.println("It's Month is : "+" Januray of 2010 !"+max);
                break;
            case 2 :
                System.out.println("It's Month is : "+" Februray of 2010 !"+max);
                break;
            case 3 :
                System.out.println("It's month is : "+" March of 2010 !"+max);
                break;
            case 4 :
                System.out.println("It's month is : "+" April of 2010 !"+max);
                break;
            case 5 :
                System.out.println("It's month is : "+" May of 2010 ! "+max);
                 .
                 .
                 .
        }
        average = ( sum )/( count );
        System.out.println( "Sum = " + sum );
        System.out.println( "Average = " + average );
        System.out.println( "Max = " + max );
        System.out.println( "Minimum = " + min );
    }
}
0
@Radiodef इसका उपयोग करने का कारण प्रदर्शन की वजह से नहीं है (डबल नकारात्मक के लिए खेद है: डी)। यह पठनीयता, संरचना और रखरखाव की वजह से है। इन चीजों के लिए आपको सौंदर्यशास्त्र पर प्रदर्शन कभी नहीं चुनना चाहिए जबतक कि आप पहले कार्यान्वयन के बाद समस्याओं में टक्कर न लें (या उन्हें ^^ देखें)। कम से कम imho।
जोड़ा लेखक brimborium, स्रोत
वर्तमान में, यह आपके द्वारा इनपुट किए गए मानों की संख्या लेता है,% 12 और उसके बाद वर्ष के महीने के रूप में उस संख्या (+1) को व्याख्या करता है। क्या तुम यही चाहते हो? इसके अलावा: अगर यह किसी प्रकार का प्रोग्रामिंग अभ्यास है, तो मैं कृपया शिक्षक/प्रोफेसर/चंद्रमा के लिए जो कुछ भी (अंधेरे तरफ जहां नाज़ियों ने अपना बुरा आधार बनाया है) शूट करने का अनुरोध किया है।
जोड़ा लेखक brimborium, स्रोत
अच्छी तरह से ब्रिमबोरियम मैं चंद्रमा के लिए हमारे प्रोफेसर को गोली मारता, लेकिन वह बस बेवकूफ है, मैंने उससे यह सवाल पूछा कि उसने मुझे पहले स्थान पर पूछा, वह उलझन में आया!
जोड़ा लेखक LoD, स्रोत
ओह क्षमा करें दारायस, हाँ यह% 12 होना चाहिए, अभी भी .. यह काम नहीं करता है।
जोड़ा लेखक LoD, स्रोत
खैर ब्रायन, समस्या यह है कि मुझे सरणी का उपयोग करने की अनुमति नहीं है! + किसी भी जावा विधियों (जैसे कैलेंडर.getInstance() .. आदि), मुझे स्विच स्टेटमेंट का उपयोग कर अधिकतम मूल्य के महीने और वर्ष का नाम दिखाना है ...
जोड़ा लेखक LoD, स्रोत
समस्या यह है कि यह महीने का नाम नहीं दिखा रहा है! ....
जोड़ा लेखक LoD, स्रोत
यदि यह% 12 होना चाहिए तो कृपया इसे प्रदर्शित करने के लिए अपना कोड बदलें।
जोड़ा लेखक Radiodef, स्रोत
@brimborium मैं मानता हूं कि यह स्विच के लिए नौकरी नहीं है। मैं व्यक्तिगत रूप से एक सरणी का उपयोग करता हूं जो मुझे लगता है। यद्यपि मैं इसे समझता हूं क्योंकि स्विच के मामले संगत होते हैं (1, 2, 3 ... आदि) बाइट कोड एक शाखा तालिका होगी जो बिजली तेज है। केवल एक ही मूल्यांकन है और नियंत्रण प्रवाह तुरंत अगले निर्देश पर कूदता है। एक सहायक विधि के रूप में तेज हो सकता है।
जोड़ा लेखक Radiodef, स्रोत
और सवाल है ...?
जोड़ा लेखक CompuChip, स्रोत
आप दुनिया में क्या कर रहे हैं? यह मैंने देखा है कि सबसे निर्दोष चीज होना चाहिए
जोड़ा लेखक Brian, स्रोत
आपके कोड में यह शामिल है: "maxy = choice/12"। क्या आपका मतलब "maxy = पसंद% 12" था?
जोड़ा लेखक Darius X., स्रोत
आपके लिए अच्छा हैं। अब, आपकी समस्या वास्तव में क्या है?
जोड़ा लेखक OldProgrammer, स्रोत
क्या आप जानते हैं कि कंप्यूटर का पूरा बिंदु स्वयं को स्वचालित कार्य नहीं करना है?
जोड़ा लेखक Pierre Arlaud, स्रोत

2 उत्तर

मेरा मानना ​​है कि आप जो चाहते हैं वह निम्नलिखित है यदि आपको स्विच का उपयोग करना है और डेट फॉर्मेटिंग क्लास की तरह कुछ उपयोग नहीं करना चाहते हैं:

int year = 2010 + choice/12;
int month = 1 + choice % 12;

switch (month) {
    case 1: System.out.println("January " + year);
            break;
    case 2: System.out.println("February " + year);
            break;

   //so on
}

बीटीडब्लू मुझे आपके कोड में कुछ भी दिखाई नहीं देता है जो # इनपुट के 48 को प्रतिबंधित करता है जैसे कि आप एक स्पेक कहते हैं। आप आसानी से इसे अपने लूप में जोड़ सकते हैं:

while (number == true && count < 48) {

}

और इसे कम करें:

while (number && count < 48) {

}

चूंकि बूलियन स्वयं एक बुलियन हैं, इसलिए आपको if (value == true) और if (value == false) की जांच करने की आवश्यकता नहीं है, बल्कि आपको जांचना चाहिए (मान) और if (! value)

हालांकि आपका संख्या चर वास्तव में अनावश्यक है और यदि आप ब्रेक का उपयोग करते हैं तो पूरी तरह से हटाया जा सकता है। मुझे यह भी लगता है कि पसंद आईई बढ़ने से पहले बाहर निकलने का मतलब है कि ऐसा लगता है कि उपयोगकर्ता प्रारंभिक अंत में ऋणात्मक संख्या में प्रवेश करता है। यदि आप नियंत्रण में वृद्धि करते हैं तो यह आपके औसत को खराब कर देगा। ऐसा लगता है कि आपने इस उद्देश्य के लिए अपना दूसरा चर count बनाया है, लेकिन मुझे नहीं लगता कि आपको इसकी आवश्यकता है। आपको बस रिफैक्टर की आवश्यकता है।

मैं अपना औसत करने से पहले count की जांच करने की भी अनुशंसा करता हूं। आपके कोड में अभी उपयोगकर्ता लूप को तुरंत रोक सकता है और आपको शून्य से विभाजित किया जाएगा।

do {
    System.out.println("Enter a sales for the month: ");
    getInt = keyboard.nextInt();

    if (getInt < 0) break;

    if (getInt > max) max = getInt;
    if (getInt < min) min = getInt;

    sum += getInt;
    count++;

} while (count < 48);

if (count == 0) {
    System.out.println("No sales ever!");
    return;
}

int year = 2010 + count/12;
int month = 1 + count % 12;
0
जोड़ा
आपके समय रेडियोडिफ के लिए बहुत बहुत धन्यवाद ... यह पूरी तरह से काम करता है :)
जोड़ा लेखक LoD, स्रोत
ईश्वर का शुक्र है कि आप समस्या को समझ चुके हैं ... यह बात आपके समाधान के साथ भी है, कार्यक्रम मई में दूसरा इनपुट घोषित करता है, आपको क्या लगता है कि इस समस्या का कारण हो सकता है?
जोड़ा लेखक LoD, स्रोत
आपका स्वागत है। यदि यह समाधान है तो इसे चिह्नित करना सुनिश्चित करें ताकि सवाल हल हो जाए। :)
जोड़ा लेखक Radiodef, स्रोत
मेरा अपडेट देखें जिसमें आपके लूप पर कुछ सामान्य टिप्पणियां हैं। मुझे लगता है कि आप अपने नियंत्रण चर को एक अतिरिक्त समय में बढ़ा रहे हैं। मैंने आपके लूप को दोबारा दोहराया है, इसलिए यह बहुत छोटा और कॉम्पैक्ट है (और मुझे लगता है कि आप जो करना चाहते हैं वह करता है)।
जोड़ा लेखक Radiodef, स्रोत

वर्तमान माह प्राप्त करने के लिए बस इसका इस्तेमाल करें

int month = Calendar.getInstance().get(Calendar.MONTH) + 1;

और साल है

int year = Calendar.getInstance().get(Calendar.YEAR);

यह सब एक साथ डालें

private static String getMonthName(int month) {
  switch (month - 1) {
  case Calendar.JANUARY: return "January";
  case Calendar.FEBRUARY: return "February";
  case Calendar.MARCH: return "March";
  case Calendar.APRIL: return "April";
  case Calendar.MAY: return "May";
  case Calendar.JUNE: return "June";
  case Calendar.JULY: return "July";
  case Calendar.AUGUST: return "August";
  case Calendar.SEPTEMBER: return "September";
  case Calendar.OCTOBER: return "October";
  case Calendar.NOVEMBER: return "November";
  case Calendar.DECEMBER: return "December";
  default:
    System.err.println("month " + month
        + " unknown, use January.");
    return "January";
  }
}

public static void main(String[] args)
    throws IOException {
  Calendar cal = Calendar.getInstance();
  cal.add(Calendar.MONTH, -48);
  for (int i = 0; i <= 48; i++) {
    int month = cal.get(Calendar.MONTH) + 1;
    int year = cal.get(Calendar.YEAR);
    System.out.println(getMonthName(month) + " " + year);
    cal.add(Calendar.MONTH, 1);
  }
}
0
जोड़ा
अच्छा, समस्या यह है कि मुझे स्विच स्टेटमेंट का उपयोग करना है ...
जोड़ा लेखक LoD, स्रोत
@ गोवन मुझे ऐसा लगता है, मैंने अपना जवाब अपडेट किया।
जोड़ा लेखक Elliott Frisch, स्रोत
क्या आपको वह मिला है जो वह पूछ रहा है?
जोड़ा लेखक Govan, स्रोत