मुझे एक प्रोग्राम लिखना है जो मेरे असाइनमेंट के लिए केवल (एन * एन) सरणी के गैर-सीमा और कोने तत्वों को प्रिंट करता है, और यह कोड का मुख्य भाग है: यहां छवि विवरण दर्ज करें

मुझे जो आउटपुट मिल रहा है वह यह है: यहां छवि विवरण दर्ज करें

जैसा कि आप देख सकते हैं, गैर-सीमा तत्व (6,7,10,11) अपनी सही स्थिति में नहीं हैं, जो मुझे विश्वास है, लूप के भीतर टैब रिक्त स्थान की गलत प्रिंटिंग के कारण है। (मेरा कोड पूरी तरह से गड़बड़ है) मुझे इसे ठीक करने के लिए कुछ मदद या सुझाव चाहिए। धन्यवाद!

0
user11745382 18 सितंबर 2019, 14:07
आप हमेशा एक टैब चाहते हैं जब तक कि यह पहला कॉलम न हो, इसलिए आपके लूप शुरू करने के बाद कोड की पहली पंक्ति if (j!=0) System.out.print("\t"); होनी चाहिए। अन्य सभी टैब हटाएं (आपके सभी अन्य ब्लॉक)।
 – 
charles-allen
18 सितंबर 2019, 14:13

4 जवाब

ए आपके पास एक समाधान है, बस रिक्त स्थान गायब हैं, मैं कुछ स्मार्ट चीजें जोड़ूंगा:

for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
        boolean visible = (i % (n - 1) == 0) == (j % (n - 1) == 0);
        if (visible) {
            System.out.printf(" %4d", a[i][j]);
        } else {
            System.out.print("     ");
        }
    }
    System.out.println();
}

अब "\t" टैब के साथ कोई समस्या नहीं है, हालांकि मैंने यहां रिक्त स्थान का उपयोग किया है।

इसे सरल रखें, जैसा कि आपने अनुभव किया, बहुत से मामले केवल समस्याएँ उत्पन्न करते हैं। यहां ट्रिक यह विचार करना है कि प्रिंट करना है या नहीं। इसलिए मैंने के साथ शुरुआत की एक चर visible

सीमा की स्थिति

i == 0 || i == n - 1

Modulo as . के साथ भी लिखा जा सकता है

i % (n - 1) == 0

यदि यह "बहुत स्मार्ट" है, तो पढ़ने को समझना मुश्किल है:

        boolean iOnBorder = i % (n - 1) == 0;
        boolean jOnBorder = j % (n - 1) == 0;
        boolean visible = iOnBorder == jOnBorder;

"X" पैटर्न i-on-border और j-on-border की _equivalence की जांच करता है।

बाकी के लिए: स्वरूपित प्रिंटफ किसी संख्या की पैडिंग की अनुमति देता है।

1
Joop Eggen 18 सितंबर 2019, 14:33
धन्यवाद! मैं अपने भविष्य के कार्यक्रमों में इसे ध्यान में रखूंगा :)
 – 
user11745382
18 सितंबर 2019, 14:33
निश्चित रूप से अपना संपादन पसंद करें (मध्यवर्ती के लिए नाम घोषित करना)। जब आपने इसे पोस्ट किया तो मैं एक्सओआर में गहराई से था! मॉड और समानता दोनों चतुर हैं।
 – 
charles-allen
18 सितंबर 2019, 14:37
हाँ, मैं XOR को ध्यान में रखते हुए देख सकता हूँ। वास्तव में मेरा समाधान संदिग्ध रूप से बहुत स्मार्ट है। यदि यह होमवर्क है, तो आधिकारिक समाधान यह "बहुत बुद्धिमान" समाधान दे सकता है।
 – 
Joop Eggen
18 सितंबर 2019, 14:51

अगर आपको यह मददगार लगे तो बस एक कोशिश करें।

public static void main(String[] args) throws ParseException {
   int[][] ar = new int[4][4];
   int[] input = new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
   int pointer=0;
   int imin=0,jmin=0,imax=3,jmax=3;
   for(int i=0;i<4;i++){
       for(int j=0;j<4;j++){
           ar[i][j]=input[pointer];
           pointer++;
       }
   }
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            if(!((i==imax && j==jmin)||(i==imin && j==jmax)||i==j) && //For skipping the corners
                    (i == imin || j == jmin || i == imax || j == jmax)){// Not to print the borders
                    continue;
            }
            else {
                System.out.println(ar[i][j]);
            }
        }
    }

}
0
srinivas 18 सितंबर 2019, 16:57

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

for (int i = 0; i < n; i++) {
  for (int j = 0; j < n; j++ {
    if (isCorner(i,j,n) || !isEdge(i,j,n)) {
//...
    } else {
//...
    }
  }
  System.out.println();
}

जहां isCorner(i,j,n) और isEdge(i,j,n) को कुछ इस तरह परिभाषित किया गया है

public boolean isCorner(int row, int column, int gridSize) {
//...
}
3
Benjamin Berman 18 सितंबर 2019, 15:26
बस यह सुनिश्चित करें कि आप संख्या का अनुसरण करते हुए यदि और अन्य दोनों शाखाओं में एक टैब प्रिंट करते हैं (यदि कोई है तो)। यदि संरेखण पर्याप्त अच्छा नहीं है (मैं System.out.printf का पर्याप्त उपयोग नहीं करता हूं) तो आप टैब के बजाय रिक्त स्थान के साथ System.out.printf(...) का उपयोग करने पर विचार कर सकते हैं (जैसा कि Joop Eggen द्वारा सुझाया गया है) वाक्य रचना याद रखें)। @AjahnCharles मुझे लगता है कि ग्रिड के दाहिने किनारे पर "वर्गों" के लिए संख्याओं के बाद टैब रखना ठीक है।
 – 
Benjamin Berman
18 सितंबर 2019, 15:40
मुझे लगा कि यह नहीं था, लेकिन अगर ऐसा है तो बिना किसी शर्त के प्रिंट को अंत तक ले जाएं (इसे सभी शाखाओं में न जोड़ें)।
 – 
charles-allen
18 सितंबर 2019, 18:10

इसे आज़माएं मैंने आपकी अगर स्थिति को अनुकूलित किया है
i == 0 या i == n-1 के लिए दोबारा जांच करने की आवश्यकता नहीं है

for(int i=0;i<n;i++){

        for(int j=0;j<n;j++){

            if(i==0 || i==n-1){
                if(j==0 || j==n-1){
                    System.out.print(a[i][j]);
                }
            }else{
                if(j != 0 && j!= n-1){
                    System.out.print(a[i][j]);
                }
            }
            System.out.print("\t");
        }
        System.out.println();
    }
0
CaffeinatedCod3r 18 सितंबर 2019, 14:17
यह सुनकर बहुत अच्छा लगा कि यह काम कर रहा है। हैप्पी कोडिंग
 – 
CaffeinatedCod3r
18 सितंबर 2019, 16:09