Exercise "More fun with Xmas trees "





  • Hallo,

    nochmal zu dem Fehler in der Lösung. Der Baum der durch die gegebene Lösung aus gegeben wird (jeden falls bei mir wenn ich den Lösungscode bei mir in IntelIJ reinkopiere) hat ganz oben nur zwei "größer werdende" (weiß nicht wie man das beschreiben soll) Reihen, während der Baum der eigentlich aus gegeben werden soll drei dieser Reihen haben sollte. Zudem hat der Baum, in der letzten Reihe einen ähnlichen Fehler, es werden zwei gleich lange Reihen ausgegeben, es sollten aber zwei "größer werdende" Reihen sein. In dem Lösungscode werden durch die for Schleife immer zwei aufeinanderfolgende Reihen ausgegeben die gleich lange sind. Da liegt meiner Meinung nach der Fehler, es sollten zwei Reihen sein bei der die 2. Reihe um ein Zeichen (also "/" oder "" ) größer sein sollte.
    Ich hoffe das mit dieser ausführlicheren Beschreibung der Fehler, den ich meine, gefunden werden kann.

    Mit freundlichen Grüßen,
    Paul Michels



  • Ich habe die einzelnen Abschnitte der Musterlösung zu einer Einheit zusammengefügt:

    final int numberOfRowGroups = 5;
    
    for (int x = 0; x < numberOfRowGroups + 1; x++) { // Printing the tree's "\ /" top. We need
        System.out.print(' ');                          // numberOfRowGroups+1 preceding spaces (␣)
    }                                                 // before eventually printing the
    System.out.println("\\ /");                       // "\ /" String followed by a newline (println).
    
    for (int x = 0; x < numberOfRowGroups - 1; x++) { // Printing the tree's top '-->*<--' we
        System.out.print(' ');                          // need numberOfRows-1 preceding spaces (␣)
    }                                                 // before printing the "-->*<--"
    System.out.println("-->*<--");                    // string.
    
    for (int x = 0; x < numberOfRowGroups + 1; x++) { // The tree's lower top "/ \":
        System.out.print(' ');                          // We need another numberOfRows+1
    }                                                 // preceding spaces (␣).
    System.out.println("/_\\");
    
    for (int rowGroup = 0;                            // Outer loop printing the
         rowGroup < numberOfRowGroups; rowGroup++) {  //  tree's body.
    
        // First body line of current group
        //
        for (int x = 0;                                 // Starting first line
             x < numberOfRowGroups - rowGroup;x++) {    // of row group with
            // (numberOfRows - row)
            System.out.print(' ');                       // space (␣) characters
        }
        System.out.print("/");                         // Start of current row group's
        for (int x = 0; x < rowGroup + 2;x++) {        // first line tree body content
            System.out.print("_\\");                     // finishing.
        }
        System.out.println();
    
        // Second body line of current group
        //
        for (int x = 0;                                // Starting second line of row
             x < numberOfRowGroups - rowGroup - 1; x++) { // group with (numberOfRows -
            System.out.print(' ');                       // row - 1) space (␣) characters
        }
        for (int x = 0; x < rowGroup + 3;x++) {        // tree body content
            System.out.print("/_");
        }
        System.out.println("\\");                      // finishing.
    }
    
    for (int x = 0; x < numberOfRowGroups; x++) {     // Indenting the bottom trunk ...
        System.out.print(' ');
    }
    System.out.println("[___]");                      // printing the trunk.
    

    Dies liefert folgende Ausgabe, ich habe das gewünschte Ergebnis dazu kopiert:

                    Ausgabe             Aufgabenstellung
                
                
                      \ /                      \ /      
                    -->*<--                  -->*<--    
                      /_\                      /_\      
                     /_\_\                    /_\_\     
                    /_/_/_\                  /_/_/_\    
                    /_\_\_\                  /_\_\_\    
                   /_/_/_/_\                /_/_/_/_\   
                   /_\_\_\_\                /_\_\_\_\   
                  /_/_/_/_/_\              /_/_/_/_/_\  
                  /_\_\_\_\_\              /_\_\_\_\_\  
                 /_/_/_/_/_/_\            /_/_/_/_/_/_\ 
                 /_\_\_\_\_\_\            /_\_\_\_\_\_\ 
                /_/_/_/_/_/_/_\          /_/_/_/_/_/_/_\
                     [___]                    [___]     
    


  • Der Fehler den ich meinte befindet sich im Lösungscode in dem man die for Schleifen durch die indent und repeat Operationen ersetzt hat (der Code kanns unten in der Lösung).
    Ich entschuldige mich dass ich vergessen hatte das in der ursprünglichen Nachricht zu erwähnen.



  • Hallo Herr Michels,

    der »Negative MI Testuser« war ich 🙄 . Sie haben ja ein scharfes Auge und zudem Recht. Die korrigierte Version lautet:

            final int numberOfRowGroups = 5;      // You may easily change this parameter.
    
            // Printing the tree's top. We have to escape the backslash using \\.
            System.out.print("""                
                  \\ /
                -->*<--
                  /_\\""".indent(numberOfRowGroups));
    
            // Printing the tree's body
    
            // Loop printing the tree's body row group wise.
            for (int rowGroup = 0; rowGroup < numberOfRowGroups; rowGroup++) {
                final int indentation = numberOfRowGroups - rowGroup + 1;
                // First body line of current group
                System.out.print(('/' + "_\\".repeat(rowGroup + 2)).indent(indentation));
    
                // Second body line of current group
                System.out.print(("/_".repeat(rowGroup + 3) + '\\').indent(indentation - 1));
            }
            // Printing the tree's trunk
            System.out.print("[___]".indent(numberOfRowGroups + 1));
    
    

    Der Unterschied zur Vorgängerversion liegt in einer Zeile:

    diff -Naur Ex_75_alternate.java.old Ex_75_alternate.java
    --- Ex_75_alternate.java	2021-04-15 11:16:24.070502644 +0200
    +++ Ex_75_alternate.java.orig	2021-04-15 11:11:18.204267559 +0200
    @@ -20,7 +20,7 @@
                 System.out.print(('/' + "_\\".repeat(rowGroup + 2)).indent(indentation));
     
                 // Second body line of current group
    -            System.out.print(("/_".repeat(rowGroup + 2) + '\\').indent(indentation));
    +            System.out.print(("/_".repeat(rowGroup + 3) + '\\').indent(indentation - 1));
             }
             // Printing the tree's trunk
             System.out.print("[___]".indent(numberOfRowGroups + 1));
    

Log in to reply