2016-07-06 9 views
5

में मैं कुछ इस तरह प्रिंट करने का प्रयास:मुद्रण ASCII डायमंड चित्रा जावा

+--------+ 
| /\ | 
| /--\ | 
| /====\ | 
|<------>| 
| \====/ | 
| \--/ | 
| \/ | 
+--------+ 

अब तक मैं सफलतापूर्वक आंकड़ा के पहले भाग मुद्रित लेकिन दूसरे भाग के साथ एक कठिन समय चल रहे हैं।

+--------+                                                      
| /\ |                                                      
| /--\ |                                                      
| /====\ |                                                      
|<------>|                                                      
| \=====/ |                                                      
| \---/ |                                                      
| \=/ |                                                      
+--------+ 

:

for (int fill = 0; fill <= ((2 * row - 1)); fill++) { 

    if ((row % 2) == 0) { 
    System.out.print("="); 
    } else { 
    System.out.print("-"); 
    } 
    } 

दूसरे भाग रहा है

for (int fill = 0; fill <= (n - 2 * (row - 1)); fill++) { //This is where I need help 
    if ((row % 2) == 0) { 
    System.out.print("="); 
    } else { 
    System.out.print("-"); 
    } 
    } 

मेरे परिणाम इस तरह दिखता है:

यह मैं कैसे आंकड़ा के पहले भाग मुद्रण कर रहा हूँ पूर्ण कोड के लिए कृपया जांचें: http://pastebin.com/YyCJ6Cq3

+0

भरने <= ((एन - 2 * (पंक्ति -1)) - 1) – samgak

+4

आपके प्रश्न में प्रासंगिक कोड स्निपेट दोनों को शामिल करने और एक पूर्ण रननेबल उदाहरण साझा करने के लिए बहुत बहुत धन्यवाद। समुदाय में आपका स्वागत है! – dimo414

+0

+1 दुर्लभ नए उपयोगकर्ता के लिए जो सबकुछ प्रदान करता है हमें ज़रूरत है। यह एक वैध सवाल है, भले ही यह होमवर्क है (हम आपका प्रयास देखते हैं), आपका स्वागत है थूज़ल :) – shole

उत्तर

0

जैसा कि आप देख सकते हैं कि आप हीरे के अंदर एक बहुत सारे कॉलम प्रिंट कर रहे हैं। तो फिक्स सरल होना चाहिए - प्रत्येक बार एक कम कॉलम प्रिंट करें, जो आप अपने लूप को एक बार चलाते समय कितनी कम करके करते हैं। आम तौर पर आप सांसद की तरह सशर्त के अंत में - 1 जोड़ सकते हैं जैसे कि @ सैमगाक सुझाव देता है, लेकिन यह वास्तव में यहां काम नहीं करेगा। आइए को समझने का प्रयास करें क्यों आप इस समस्या में भाग रहे हैं।

आपका पहला पाश n पर निर्भर नहीं है; यह मुद्रित करने के लिए कितने वर्ण निर्धारित करने के लिए केवल वर्तमान पंक्ति अनुक्रमणिका का उपयोग करता है।

दूसरे लूप में आपको को fill के मान को कम करने और कम करने के लिए सही ढंग से n भी शामिल करने की आवश्यकता है, लेकिन आप इसका दुरुपयोग कर रहे हैं। n और row समान परिमाण के हैं (rown के संदर्भ में परिभाषित किया गया है) फिर भी आप केवल row2 से गुणा करते हैं। इसके बजाय आपको n-row ऑपरेशन पहले करना चाहिए, फिर प्रत्येक पंक्ति में 2x वर्णों को मुद्रित करने के लिए 2 द्वारा परिणाम स्केल करें। आपको 2*(n-row) के बाद से थोड़ा और आगे खेलना होगा, लेकिन उम्मीद है कि आपकी समस्या का पता लगाने में आपकी मदद करने के लिए पर्याप्त है।

+0

के लिए (int fill = 0; भरें <= 2 * (एन-पंक्ति) -5; भरें ++) चाल चल रही है! धन्यवाद – thuzle

+0

@thuzle सोचें * क्यों * '-5' चाल चल रही थी।इसे '2 * (एन-पंक्ति -2) -1' के पुनर्गठन पर विचार करें, जो समतुल्य है लेकिन अधिक स्पष्ट रूप से दिखाता है कि 'एन-पंक्ति' आपको आवश्यक सीमा से दो और अधिक है, और फिर सीमा को एक स्थानांतरित करने की आवश्यकता है अधिक। – dimo414

0

यह एक स्कूल प्रोजेक्ट की तरह दिखता है, इस प्रकार मैं केवल संकेत दूंगा। सशर्त बयान ऐसा लगता है कि इसमें एक बहुत अधिक भर है।

fill <= (n - 2 * (row - 1)); 
+0

@ dimo414 यह उत्तर समाधान नहीं दिखाता है, लेकिन कोड खंड के साथ अंक समस्या उत्पन्न कर रहा है (संकेत के साथ क्या समस्या है)। यह देखकर कि यह प्रश्न गृहकार्य जैसा दिखता है (मुझे इसमें कोई समस्या नहीं है क्योंकि इसमें सभी आवश्यक भाग अच्छे प्रश्न हैं) मैं कहूंगा कि यह एक उत्तर के लिए पर्याप्त है (टिप्पणी के लिए बिल्कुल सही है, लेकिन अभी भी उत्तर के लिए पर्याप्त है)। – Pshemo

0

प्रयास करें: भरने < = (एन - (2 * (पंक्ति -1) +1); या: भरने < (n - 2 * (पंक्ति -1));

+0

आपको दो बार जवाब देने के बजाय [अपना मूल उत्तर संपादित करना चाहिए] (https://stackoverflow.com/posts/38214793/edit)। –

संबंधित मुद्दे