2016-09-07 4 views
10

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

public static void drawMatrix(){ 
    for (int line = 0; line < N; line++){ 
     for (int j = 0; j < N; j++){ 
      System.out.print(j + " "); 
     } 
     System.out.println(); 
    } 
} 

दुर्भाग्य से यह केवल हर पंक्ति में 0 1 2 3 4 5 मुद्रित करने में सक्षम है:

0 1 2 3 4 5 
1 0 1 2 3 4 
2 1 0 1 2 3 
3 2 1 0 1 2 
4 3 2 1 0 1 
5 4 3 2 1 0 

वर्तमान में मैं इस विधि है: मैं कहां से कम होना मैं इसे तिरछे बनाने के लिए है, इसलिए की तरह चाहते है , तो मुझे लगता है कि मुझे एक और नेस्टेड फॉर-लूप की आवश्यकता है, हालांकि मुझे यकीन नहीं है कि इसे कैसे सेट अप करें।

+5

आप पहले से ही दो छोरों है, हो सकता है आप यह स्पष्ट दिखाई देगा, जब '' j' column' के रूप में नाम बदलें। प्रत्येक सेल में आपके द्वारा लगाए गए मान पूर्ण (सकारात्मक) अंतर पंक्ति और स्तंभ के बीच होते हैं। – SJuan76

+1

@ SJuan76 सही है। आईओपी को विशेष रूप से लूप के मामले में अपने तर्क – Gaur93

+0

में गलती खोजने के लिए कार्यक्रम प्रवाह की जांच करनी चाहिए @ SJuan76 की टिप्पणी पढ़ने के बाद मैंने प्रिंट स्टेटमेंट को "प्रिंट (Math.abs (लाइन-कॉलम) +" में बदल दिया) और यह अब सही आउटपुट उत्पन्न करता है। दासब्लिंकनलाइट भी उनके समाधान में सही है, हालांकि पहले उल्लिखित समाधान खराब और अधिक पठनीय लगता है। – UndyingJellyfish

उत्तर

10

j कॉलम संख्या है, इसलिए यह सभी पंक्तियों के लिए समान होगा। आपको "शिफ्ट" करने के लिए लाइन नंबर के आधार पर, लाइन नंबर से j जोड़ने या घटाना है। के बाद से परिणाम नकारात्मक हो सकता है, तो आप N द्वारा N और आधुनिक जोड़ने की आवश्यकता होगी:

if (j > line) { 
    System.out.print((N-line+j)%N + " "); 
} else { 
    System.out.print((line-j+N)%N + " "); 
} 

Demo.

तुम भी एक if बिना यह पुनर्लेखन एक सशर्त अभिव्यक्ति का उपयोग कर सकते हैं:

int sign = j > line ? -1 : 1; 
System.out.print((N+sign*(line-j))%N + " "); 

Demo.

+0

या केवल पूर्ण मूल्य (सुनिश्चित नहीं है कि यह 'Math.abs'' शब्द है लाइन - कॉलम;) मठ समारोह को हालत देने के लिए। – AxelH

6

अपने कोड में एक छोटी सी परिवर्तन काम करता है

public static void drawMatrix() { 
    for(int line = 0; line < N; line++) { 
     for(int j = 0; j < N; j++) { 
     System.out.print(Math.abs(line - j) + " "); 
     } 
     System.out.println(); 
    } 
} 
1

मैं की तरह कुछ करना होगा: यह सोचते हैं आप पेट का उपयोग कर सकते

int n=6; 

    for(int row=0;row<n;row++) 
    { 
     for(int col = 0;col<n;col++) 
     { 
     System.out.print(abs(col-row) +" "); 
     } 
     System.out.println(); 
    } 

()। मुझे उम्मीद थी कि आपके उद्देश्य की मदद करें।

0

यह भी काम करता है:

public static void main(String[] args) { 
    int N = 6; 
    int column = 0; 

    for (int row = 0; row < N; row++) { 
     for (column = row; column >= 0; column--) //prints till row number reaches 0 
      System.out.print(column + " "); 
     for (column = 1; column < N - row; column++)//from 1 to N-row 
      System.out.print(column + " "); 

     System.out.println(); 
    } 
} 
संबंधित मुद्दे