Erste Schritte Code zur Laufzeit ändern lassen

MaCXyLo

Mitglied
Hallo,
ich habe eine nette Übungsaufgabe von meinem Professor erhalten, bei der ich HTML Code generieren soll
- genauer gesagt geht es dabei um eine Tabelle.

Java:
package chapter3Statements.ATableOfSquareNumbers;

public class HTMLifyMe {
    
    static String doctype = "http://www.w3.org/1999/xhtml";
    static String titlename = "A square table";


    static String table = "table";
    static String title = "title";
    static String html = "html";
    static String xmlns = "xmlns";
    static String body = "body";
    static String style = "style";
    static String textalign = "text-align";
    static String right = "right";
    static String head = "head";


    static String td = "td";
    static String tr = "tr";
    static String th = "th";
    static String n = "n";


    static String empty = " ";
    static String relationop1 = "<";
    static String relationop2 = ">";
    static String slash = "/";
    static String apostrophe = "'";
    static String semicolon = ";";
    static String doublepoint = ":";
    static String equal = "=";
    static String star = "*";


    public static void main(String[] args) {


        int limit=40;
        int outputchanger=0;


        StringBuffer output = new StringBuffer();


        
        head(output);


        
        output.append(relationop1 + tr + relationop2 + "\n");


        output.append(relationop1 + th + relationop2);
        output.append(n);
        output.append(relationop1 + slash + th + relationop2);
        
        output.append(relationop1 + th + relationop2);
        output.append(n + star + n);
        output.append(relationop1 + slash + th + relationop2 + "\n");


        output.append(relationop1 + slash + tr + relationop2 + "\n");


        for (int i = 0; i <= limit; i++) {
            
            output.append(relationop1 + tr + relationop2 + "\n");


            output.append(relationop1 + td + empty + style + equal + apostrophe
                    + textalign + doublepoint + right + semicolon + apostrophe
                    + relationop2);


            outputchanger = inputswitcher(outputchanger, output, i);


            output.append(relationop1 + slash + td + relationop2);


            output.append(relationop1 + slash + td + relationop2 + "\n");


            output.append(relationop1 + slash + tr + relationop2 + "\n");
        }
        
        
        end(output);


        System.out.println(output);


    }


    public static void head(StringBuffer output) {
        output.append(relationop1 + html + relationop2 + "\n");


        output.append(relationop1 + html + empty + xmlns + equal + apostrophe + doctype + apostrophe + relationop2 + "\n");
        output.append(relationop1 + head + relationop2 + "\n");
        
        output.append(relationop1 + title + relationop2);
        output.append(titlename);
        output.append(relationop1 + slash + title + relationop2 + "\n");
        
        output.append(relationop1 + slash + head + relationop2 + "\n");


        output.append(relationop1 + body + relationop2 + "\n");
        output.append(relationop1 + table + relationop2 + "\n");
    }


    public static void end(StringBuffer output) {
        output.append(relationop1 + slash + table + relationop2 + "\n");
        output.append(relationop1 + slash + body + relationop2 + "\n");
        output.append(relationop1 + slash + html + relationop2 + "\n");
    }


    public static int inputswitcher(int outputchanger, StringBuffer output, int i) {
        switch (outputchanger) {
        case 0:
            output.append(n);
            outputchanger=1;
            break;
            
        case 1:
            output.append(n+star+n);
            outputchanger=2;
            break;


        case 2:
            output.append(i);
            outputchanger=3;
            break;
            
        case 3:
            output.append(i * i);
            outputchanger=2;
            break;
        }
        return outputchanger;
    }
}

Ich hatte den Code schon am funktionieren - aber er hat mir einfach vom ästhetischen her nicht gefallen, da ich meiner Meinung nach zuviele Redundanzen im Code hatte.

Z.b. möchte ich das
output.append(relationop1 + slash + td + relationop2);
durch
output.append(relationop1 + slash + th + relationop2);
zur Laufzeit ändern lassen, damit ich den Code nicht redundant einfügen muss
oder ein weiteren String zwischen drin einfügen.

Leider habe ich keine Ahnung wie man das bewerkstelligt.
Hoffe natürlich, das mir jemand von euch helfen kann!

Liebe Grüße
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
es gibt eine Möglich in Java namens Reflektion, jedoch ist das ungeignet für dein Problem.
Du kannst doch einfach sagen:
output.append(relationop1 + slash + (bedingung ? td : th) + relationop2);

Das ist viel einfacher 🙂

P.S. Versuch gleiche Aktionen in Methoden Auszulagern! Zum Beispiel das anhängen der "<>" Klammern.

Gruß,
AntiMuffin
 
Zuletzt bearbeitet:
Das ist das was bei rausgekommen ist:

Java:
package chapter3Statements.ATableOfSquareNumbers;

public class HTMLifyMe {


    
    static String doctype = "http://www.w3.org/1999/xhtml";
    static String titlename = "A square table";


    static String table = "table";
    static String title = "title";
    static String html = "html";
    static String xmlns = "xmlns";
    static String body = "body";
    static String style = "style";
    static String textalign = "text-align";
    static String right = "right";
    static String head = "head";


    static String td = "td";
    static String tr = "tr";
    static String th = "th";
    static String n = "n";


    static String empty = " ";
    static String relationop1 = "<";
    static String relationop2 = ">";
    static String slash = "/";
    static String apostrophe = "'";
    static String semicolon = ";";
    static String doublepoint = ":";
    static String equal = "=";
    static String star = "*";


    public static void main(String[] args) {


        int limit = 100;


        StringBuffer output = new StringBuffer();


        head(output);
        generate(output, limit);
        end(output);


        System.out.println(output);


    }


    private static void generate(StringBuffer output, int limit) {


        for (int i = 0; i <= limit; i++) {


            if (i == 0) {
                relation_op(output, tr, true);
                for (int j = 0; j <= 1; j++) {
                    boolean backN = (j != 0);
                    relation_op(output, th, false);


                    if (j == 0) {
                        output.append(n);
                    } else {
                        output.append(n + star + n);
                    }
                    relation_cl(output, th, backN);
                }
                relation_cl(output, tr, true);


            } else {
                relation_op(output, tr, true);
                for (int j = 0; j <= 1; j++) {


                    boolean backN = (j != 0);


                    relation_op(output, td + empty + style + equal + apostrophe
                            + textalign + doublepoint + right + semicolon
                            + apostrophe, false);


                    if (j == 0) {
                        output.append(i);
                    } else {
                        output.append(i * i);
                    }
                    relation_cl(output, td, backN);
                }
                relation_cl(output, tr, true);
            }
        }
    }


    public static void relation_op(StringBuffer output, String temp,
            boolean BackN) {
        output.append(relationop1);
        output.append(temp);
        output.append(relationop2);
        if (BackN == true) {
            output.append("\n");
        }
    }


    public static void relation_cl(StringBuffer output, String temp,
            boolean BackN) {
        output.append(relationop1);
        output.append(HTMLifyMe.slash);
        output.append(temp);
        output.append(relationop2);
        if (BackN == true) {
            output.append("\n");
        }
    }


    public static void head(StringBuffer output) {


        relation_op(output, html + empty + xmlns + equal + apostrophe + doctype
                + apostrophe, true);


        relation_cl(output, head, true);
        relation_op(output, title, false);
        output.append(titlename);
        relation_cl(output, title, true);
        relation_cl(output, head, true);


        relation_op(output, body, true);
        relation_op(output, table, true);
    }


    public static void end(StringBuffer output) {
        relation_cl(output, table, true);
        relation_cl(output, body, true);
        relation_cl(output, html, true);
    }


}

Hab gesehen, das es die HTML Elemente auch in einer Import Anweisung gibt.
import javax.swing.text.html.HTML;
Jedoch verstehe ich nicht ganz, wie ich diese anwende.
Kann mir vielleicht jemand zeigen, wie das funktioniert?
 
Zuletzt bearbeitet von einem Moderator:
Das ist das was bei rausgekommen ist:

Vermeide "_" in Methodennamen, verwende stattdessen lowerCamelCase 🙂

Denke daran das andere sich einmal deinen Code anschauen werden und diesen verstehen müssen. Deine Methoden "head" und "end" funktioniern zwar, aber deren Namen sind nicht aussagekräftig genug um zu wissen was sie machen. Methoden sind Tätigkeiten die ausgeführt werden: "set.....", "get.....", "append.....", "calculate.....", "initialize...."

Zusätzliche Verbesserung:
Mach alle Methoden zu "non-static" Methoden und arbeiten in der main-Methode mit einem Objekt der Klasse.
Vorteil: Du musst nicht jeder Methode das Objekt vom StringBuffer übergeben, stattdessen ist es eine Instanzvariale und kann einfach angesprochen werden.

Hab gesehen, das es die HTML Elemente auch in einer Import Anweisung gibt.
import javax.swing.text.html.HTML;
Jedoch verstehe ich nicht ganz, wie ich diese anwende.
Kann mir vielleicht jemand zeigen, wie das funktioniert?

Das kannst du so nicht verwenden, dabei handelt es sich um Swing Klassen für GUIs.
Außer du willst natürlich hier etwas mit UIs machen.
 

Neue Themen


Zurück
Oben