How to make a diamond using Nested For Loops

后端 未结 15 1288
终归单人心
终归单人心 2021-01-01 07:09

So I was assigned to make a diamond with asterisks in Java and I\'m really stumped. Here\'s what I\'ve come up with so far:

public class Lab1 
{
   public s         


        
15条回答
  •  难免孤独
    2021-01-01 07:56

    I have the exact classwork in my university which also requires me to finish it in 3 for loops.

    And this is how I did it.

    In a simple way of explanation, I divide the diamond into two parts.

    no. of lines no. of spaces no. of stars total no. of slots
    1 4 1 5
    2 3 3 6
    3 2 5 7
    4 1 7 8
    5 0 9 9
    6 1 7 8
    7 2 5 7
    8 3 3 6
    9 4 1 5

    I want to find the no. of slots and the no. of spaces with each line, then allocating the no. of stars would be really easy.

    And considering the no. of slots, line 1 - 5 and line 6 - 9 would become two separate groups(i.e. middleLine).

    The equation of the no. of slots of the first half would be numberOfLines(i.e. i) + (middleLine - 1) where middleLine - 1 would be 4 when the maxNumberOfLines is 9.

    The equation of the no. of slots of the last half would be middleLine(i.e. replacement of I) + (middleLine - 1)(i.e. same as above) - (i - middleLine) where i - middleLine would be -1 when i = 6.

    And for the space, the first half would be middleLine - i and last half would be i - middleLine, which are exactly in a negative relationship(or symmetrical regarding their slopes).

    public class printOutDiamondWith3Loops {
    
    public static void main(String[] args) {
        
        int userInput = 9;
    
        double maxNumberOfLines = userInput;
        // double type is used instead of integer type in order to prevent removal of remainder when a division performed.
        double middleLine = Math.ceil(maxNumberOfLines/2);
    
        // Print out the diamond.
        for (int i = 1; i <= maxNumberOfLines; i++) { 
        // Determine the number of lines, which is also the maximum number of slots (the line in the middle).
            if (i <= middleLine) { 
            // Separate the whole diamond into two parts(as mentioned above).
                for (int j = 1; j <= i + ((middleLine - 1)); j++) {
                // Determine the no. of slots in each line from line 1 to 5.
                    if (j <= middleLine - i) { 
                    // Determine the no. of spaces and stars.
                        System.out.print(" ");
                    } else {
                        System.out.print("*");
                    }
                }
            } else { // i > middleLine
                for (int k = 1; k <= (middleLine + (middleLine - 1)) - (i - middleLine); k++) {
                // Determine the no. of slots in each line from line 6 to 9.
                // For better understanding, I did not simplify the above condition.
                // Noticeably, the first middleLine in above for loop is a replacement of i.
                    if (k <= i - middleLine) {
                    // Determine the no. of spaces and stars.
                        System.out.print(" ");
                    } else {
                        System.out.print("*");
                    }
                }
            } 
            System.out.println();   
        }
    
    }
    

    With such a frame, it is much easier to make further changes, such as letting the user input the no. of lines they want.

    Hope this answer could help you.

    I could lend you a more detailed version of my work, though not necessarily in need(the above explanation already explains the concepts): print-Out-Diamond-With-3-Loops-Advanced-Version.java

提交回复
热议问题