2012-07-10 12 views
10

के लिए मैं नहीं लग रहे बनाना इस-एक त्रिकोण के साथ छोरों

मैं छोरों के लिए उपयोग कर एक सरल त्रिकोण आकर्षित करने की आवश्यकता करने के लिए जवाब खोजने के लिए सक्षम होने के लिए।

 * 
    *** 
    ***** 
    ******* 
********* 

मैं एक आधा त्रिकोण बना सकते हैं, लेकिन मैं अपने वर्तमान पाश में जोड़ने के लिए कैसे एक पूर्ण त्रिकोण बनाने के लिए पता नहीं है।

* 
** 
*** 
**** 
***** 



    for (int i=0; i<6; i++) 
    { 
    for (int j=0; j<i; j++) 
    { 
    System.out.print("*"); 
    } 
    System.out.println(""); 
    } 

धन्यवाद

+6

यहां आप अपना समाधान ढूंढ सकते हैं- http://java4732.blogspot.in/2016/08/pyramid-programs-in-java.html – Umesh

उत्तर

14

सबसे पहले हो जाएगा कर सकते हैं, तो आप आप सुनिश्चित करने की आवश्यकता ' * प्रतीकों की सही संख्या का उत्पादन कर रहे हैं। हम उत्पादन करने के लिए काउंटर चर संशोधित करके 1, 3, 5 वगैरह के बजाय 1, 2, 3. यह तय किया जा सकता है की जरूरत है:

for (int i=1; i<10; i += 2) 
{ 
    for (int j=0; j<i; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(""); 
} 

आप देख सकते हैं, इस 1 और वृद्धि पर शुरू करने के लिए i का कारण बनता है प्रत्येक चरण में 2 तक यह 10 (यानी 1, 3, 5, 7, 9) से छोटा है। यह हमें * प्रतीकों की सही संख्या देता है। इसके बाद हमें प्रति पंक्ति इंडेंटेशन स्तर को ठीक करने की आवश्यकता है। यह इस प्रकार किया जा सकता है:

for (int i=1; i<10; i += 2) 
{ 
    for (int k=0; k < (4 - i/2); k++) 
    { 
     System.out.print(" "); 
    } 
    for (int j=0; j<i; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(""); 
} 

* प्रतीकों मुद्रण इससे पहले कि हम कुछ रिक्त स्थान और स्थानों की संख्या लाइन है कि हम पर हैं पर निर्भर करता है मुद्रित करें। k चर के साथ लूप के लिए यही है। हम मान 4, 3, 2, 1 और 0 से अधिक है कि k दोहराता देख सकते हैं जब ì1, 3, 5, 7 और 9 है। यही वही है जो हम चाहते हैं क्योंकि त्रिकोण में जितना अधिक हम हैं, उतनी अधिक जगहों को हमें रखने की जरूरत है। आगे हम त्रिकोण नीचे उतरते हैं, हम कम रिक्त स्थान की आवश्यकता होती है और त्रिकोण की आखिरी पंक्ति को रिक्त स्थान की भी आवश्यकता नहीं होती है।

2

होमवर्क प्रश्न? वैसे आप रिक्त स्थान के साथ एक औंधा 'सही त्रिकोण' उत्पन्न करने के लिए अपने मूल 'सही त्रिकोण' कोड को संशोधित तो ऐसे ही

for(i=0; i<6; i++) 
{ 
for(j=6; j>=(6-i); j--) 
{ 
    print(" "); 
} 
for(x=0; x<=((2*i)+1); x++) 
{ 
    print("*"); 
} 
print("\n"); 
} 
+0

यह हाँ है, मैं जावा के लिए बिल्कुल नया हूँ –

1
for (int i=0; i<6; i++) 
    { 
    for (int k=0; k<6-i; k++) 
    { 
     System.out.print(" "); 
    } 
    for (int j=0; j<i*2+1; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(""); 
    } 
17

एक मजेदार, सरल उपाय:

for (int i = 0; i < 5; i++) 
    System.out.println(" *********".substring(i, 5 + 2*i)); 
3

मैं सराहना ओपी जावा के लिए नया है, इसलिए तरीकों पर विचार किया जा सकता है "उन्नत", फिर भी मुझे लगता है कि यह दिखाने के लिए कि कैसे आप एक हमला कर सकते हैं इस समस्या का उपयोग कर के लायक है इसे टुकड़ों में तोड़कर समस्या।

public void printTriangleLine(int rowNumber) { 
    // we have to work out what to put here 
} 

हम रिक्त स्थान की कुछ संख्या है, तो सितारों की कुछ संख्या मुद्रित करने के लिए है:

के, एक ही पंक्ति मुद्रित करने के लिए एक विधि लेखन विधि है जिसके नंबर लाइन यह है कह के बारे में सोचते हैं।

उदाहरण को देखते हुए, मैं देख सकता हूं कि (यदि पहली पंक्ति 0 है) यह (5-पंक्ति संख्या) रिक्त स्थान और (2 * पंक्ति संख्या + 1) सितारों है।

की एक विधि है कि हमारे लिए पात्रों की पंक्तियों प्रिंट आविष्कार है, और इसका इस्तेमाल करते हैं:

public void printTriangleLine(int rowNumber) { 
    printSequence(" ", 5 - rowNumber); 
    printSequence("*", 2 * rowNumber + 1); 
    System.out.println(); 
} 

कि जब तक हम वास्तव printSequence() लिखने संकलन नहीं होगा, इसलिए की है कि करते हैं:

public void printSequence(String s, int repeats) { 
    for(int i=0; i<repeats; i++) { 
     System.out.print(s); 
    } 
} 

अब आप परीक्षण प्रिंटसेक्वेंस अपने आप पर कर सकते हैं, और आप परीक्षण प्रिंट ट्राइग्लिंगलाइन स्वयं ही कर सकते हैं। अभी के लिए तुम सिर्फ यह उन तरीकों main()

public static void main(String [] args) { 
    printSequence("a",3); 
    System.out.println(); 
    printTriangleLine(2); 
} 

में सीधे फोन करके बाहर की कोशिश कर सकते हैं ... इसे चलाने और (अपनी आंखों से) सत्यापित करें कि यह आउटपुट:

aaa 
    ***** 

जब आप में आगे मिलता है प्रोग्रामिंग, आप यूनिट परीक्षण फ्रेमवर्क जैसे जुनीट का उपयोग करना चाहेंगे। मुद्रण के बजाय, आप printTriangleLine की तरह अधिक होने की संभावना लिखने बातें चाहते एक स्ट्रिंग (जो आप अपने कार्यक्रम में उच्च ऊपर से प्रिंट चाहते हैं) वापस जाने के लिए, और आप जैसे आदेशों के साथ अपने परीक्षण को स्वचालित होगा:

assertEquals(" *****", TriangleDrawer.triangleLine(2)); 
assertEquals("  *", TriangleDrawer.triangleLine(0)) 

अब हम हमारे पास त्रिकोण बनाने के लिए आवश्यक टुकड़े हैं।

public void drawTriangle() { 
    for(int i=0; i<5; i++) { 
     printTriangleLine(i); 
    } 
} 

हमने जो कोड लिखा है, वह अन्य लोगों द्वारा दिए गए उत्तरों की तुलना में थोड़ा लंबा है। लेकिन हम प्रत्येक चरण का परीक्षण करने में सक्षम हैं, और हमारे पास विधियां हैं जिनका उपयोग हम अन्य समस्याओं में फिर से कर सकते हैं। वास्तविक जीवन में, हमें किसी समस्या को तोड़ने के बीच सही संतुलन ढूंढना होगा, या बहुत कम तरीकों से। मैं वास्तव में बहुत कम तरीकों को पसंद करते हैं।

अतिरिक्त क्रेडिट के लिए:

  • ताकि बजाय इस अनुकूलन System.out के मुद्रण, तरीकों एक स्ट्रिंग वापसी - अपने मुख्य() में तो आप का उपयोग System.out.print(drawTriangle())
  • ताकि इस अनुकूलित कर सकते हैं आप विभिन्न आकारों के लिए drawTriangle() से पूछ सकते हैं - यानी, आप drawTriangle(3) या drawTriangle(5)
  • को बड़े त्रिकोणों के लिए काम कर सकते हैं। संकेत: आपको printTriangleLine() को एक नया "चौड़ाई" पैरामीटर जोड़ने की आवश्यकता होगी।
2

जावा

for (int i = 6, k = 0; i > 0 && k < 6; i--, k++) { 
    for (int j = 0; j < i; j++) { 
     System.out.print(" "); 
    } 
    for (int j = 0; j < k; j++) { 
     System.out.print("*"); 
    } 
    for (int j = 1; j < k; j++) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 
1

में यह एक प्रयास करें यह आपके सवाल का जवाब देंगे। केवल बाहरी लाइन प्रदर्शित करने के लिए :)

public class TrianglePattern { 

    public static void main(String[] args) { 
     // This logic will generate the triangle for given dimension 
     int dim = 10; 
     for (int i = 0; i < dim; i++) { 
      for (int k = i; k < dim; k++) { 
       System.out.print(" "); 
      } 
      for (int j = 0; j <= i; j++) { 
       //if (i != dim - 1) 
       // if (j == 0 || j == i) 
       //  System.out.print("*"); 
       // else 
       //  System.out.print(" "); 
       //else 
        System.out.print("*"); 
       System.out.print(" "); 
      } 
      System.out.println(""); 
     } 
    } 
} 
1
private static void printStar(int x) { 
    int i, j; 
    for (int y = 0; y < x; y++) { // number of row of '*' 

     for (i = y; i < x - 1; i++) 
      // number of space each row 
      System.out.print(' '); 

     for (j = 0; j < y * 2 + 1; j++) 
      // number of '*' each row 
      System.out.print('*'); 

     System.out.println(); 
    } 
} 
3

कोड के बिना एक समाधान सबसे पहले थिंक टिप्पणी की कोड uncomment। विचार लाइन की बढ़ती संख्या * की एक विषम संख्या मुद्रित करना है। फिर रिक्त स्थान का उपयोग करके * को केन्द्रित करें। पिछली पंक्ति में * की अधिकतम संख्या को जानना, आपको पहले * केंद्र के लिए रिक्त स्थान की प्रारंभिक संख्या प्रदान करेगा। अब इसे कोड में लिखें।

0

यह आपको एक छोटे से अधिक नियंत्रण और एक आसान समय बना देता है:

public static int biggestoddnum = 31; 

public static void main(String[] args) { 
    for (int i=1; i<biggestoddnum; i += 2) 
    { 
     for (int k=0; k < ((biggestoddnum/2) - i/2); k++) 
     { 
      System.out.print(" "); 
     } 
     for (int j=0; j<i; j++) 
     { 
      System.out.print("*"); 
     } 
     System.out.println(""); 
    } 
} 

बस public static int biggestoddnum की जो कुछ भी विषम संख्या में आप इसे होना चाहते हैं के लिए मूल्य बदलते हैं, और for(int k...) काम करने के लिए परीक्षण किया गया है ।

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