नया आदमी यहाँ 2D सरणियों की कोशिश कर रहा है। मेरे पास ये कोड हैं लेकिन जब भी मैं इसे चलाता हूं, तो न्यूनतम मान हमेशा 0 के साथ समाप्त होता है, भले ही मैं गैर-शून्य अंक इनपुट करता हूं। इसे ठीक करने के लिए कोई भी विचार?

import javax.swing.JOptionPane;

public class TwoDArrayActivity {
    
    public static void main(String[] args){
        
        // declaration of array
        int a[][] = new int[3][3];  

        int i = 0; // rows
        int j = 0; // columns
        String display = ""; 

        int low = a[i][j];
        
        for(i=0; i < a.length; i++) {   // count the number of rows
            
            for(j = 0; j < 3; j++) {      // count the number of columns
                a[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Enter a Number to Array [" + i + "]" + "[" + j + "]"));
                
                if(a[i][j] < low) 
                    low = a[i][j];
                display = display + a[i][j] + "     ";
            } // end of inner for
            
            display = display + "\n"; //new line 
        } // end of outer for
           
    JOptionPane.showMessageDialog(null,"Values in Array\n" + display + "Lowest value is " + low, "Values in Array", JOptionPane.INFORMATION_MESSAGE);
    } // end of method
} // end of class
1
butterflypimper 12 जिंदा 2022, 18:36
2
आप कम को int low = a[i][j]; के रूप में प्रारंभ करते हैं, जिसका अर्थ है कि यह प्रारंभ में 0 है। जब तक आप कम (= ऋणात्मक) संख्याओं को इनपुट नहीं करते हैं, यह 0 पर रहेगा।
 – 
f1sh
12 जिंदा 2022, 18:40

4 जवाब

सबसे बढ़िया उत्तर

बदलने के :

int low = a[i][j];

साथ :

int low = Integer.MAX_VALUE;
3
Tom 12 जिंदा 2022, 18:42
// declaration of array
int a[][] = new int[3][3];

मुद्दा यहां है, जब आप सरणी को तुरंत चालू करते हैं तो यह स्वचालित रूप से प्रत्येक एमट्री को 0 से भर देता है, क्योंकि यह पूर्णांक प्रकार के लिए अपरिभाषित मान के बराबर है। उदाहरण के लिए

new int[3][3]
>> [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

इसलिए आपके low वेरिएबल का मान हमेशा 0 होता है और इसे कभी भी कुछ कम से प्रतिस्थापित नहीं किया जाता है

1
Joshua Smart 12 जिंदा 2022, 18:42
मुझे भी लगता है कि यह मामला है। जावा में डिफ़ॉल्ट सरणी मान देखें।
 – 
voiarn
12 जिंदा 2022, 18:47

जब आप जावा में परोक्ष रूप से एक ऐरे को इनिशियलाइज़ करते हैं, तो मेमोरी null, 0, 0L, 0.0f, false, या 0.0 पर सेट हो जाती है। , आदि, डेटाटाइप के लिए उपयुक्त के रूप में।

इसका अर्थ है कि आपका कथन int low = a[i][j]; low को शून्य के प्रारंभिक मान पर सेट कर रहा है। आगे की सभी तुलनाएँ उसके विरुद्ध होंगी, इसलिए उस मान को बदलने का एकमात्र मौका एक ऋणात्मक संख्या दर्ज करना है, जैसे -1

आपको मिलने वाले लूप के पहले तत्व के साथ low को इनिशियलाइज़ करने के लिए आप अपने लूप में एक टेस्ट जोड़ सकते हैं:

if((i == 0 && j == 0) || a[i][j] < low)

एक अन्य विकल्प यह है कि low को निहित शून्य के बजाय सबसे बड़े संभावित पूर्णांक में प्रारंभ किया जाए। इस सरल उदाहरण में, शायद यह लेने का सबसे आसान तरीका है:

int low = Integer.MAX_VALUE;

तीसरा विकल्प बूलियन ध्वज जोड़ना है:

int low = ...;
boolean isFirst = true;

...

    if(isFirst || a[i][j] < low)
        ...
    isFirst = False;
1
Mad Physicist 12 जिंदा 2022, 18:50
1
स्पष्टीकरण सही है, लेकिन आपका समाधान अच्छा नहीं है। जब a में उपयोगी मान नहीं हैं तो इसे a[i][j] में क्यों प्रारंभ किया जाना चाहिए? इसे बड़े मूल्य के साथ प्रारंभ करना कहीं बेहतर तरीका है।
 – 
f1sh
12 जिंदा 2022, 18:47
@ f1sh। दोनों वैध दृष्टिकोण हैं, और मैंने उन्हें शामिल किया है। इस साधारण मामले के लिए, आप सही हैं कि Integer.MAX_VALUE शायद जाने का रास्ता है, लेकिन कुछ मामलों में अन्य विकल्प भी मान्य हैं।
 – 
Mad Physicist
12 जिंदा 2022, 18:49

इसे बदलने के लिए आपको ऋणात्मक संख्याओं को इनपुट करना होगा। अन्यथा, आप इसे बदल सकते हैं

if(a[i][j] < low) 
    low = a[i][j];

लेकिन कम नाम का अब कोई मतलब नहीं होगा (यह "अधिकतम" होगा)।

0
rikyeah 12 जिंदा 2022, 18:44