Stringbuilder mit print ausgeben

Kotelettklopfer

Bekanntes Mitglied
Hi,
wie bekomme ich den return pass.toString in eine für print nutzbare / sinvolle variable?

Ich will in der Main Methode einmal das Objekt in die Zwischenablage kopieren :
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
new StringSelection(password.createPassword((sc.nextInt()))), null);

und danach in der Konsole ausgeben. Wenn ich in der Konsole aber println("password.createPassword((sc.nextInt())) nutze, hat der Scanner den Wert schon vergessen --> Es gibt keinen output

Random:
import java.security.SecureRandom;
import java.util.Scanner;

public class Random {
    private final Scanner sc;

    public Random(Scanner scanner) {
        this.sc = scanner;
    }


    public static String createPassword(int length) {
        final String allowedChars = "0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOP!§$%&?*+#";
        SecureRandom random = new SecureRandom();
        StringBuilder pass = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            pass.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
        }
        return pass.toString();
    }


}

Main:
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random password = new Random(sc);


        System.out.print("Wie viele Zeichen soll ihr Passwort beinhalten?");
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                new StringSelection(password.createPassword((sc.nextInt()))), null);
        System.out.println(password.createPassword(sc.nextInt()));

    }


}


Edit: Ich sehe gerade, dass hier der Scanner nicht das eigentliche Problem ist, sondern ich rufe in der printLine nochmal die RandomMethode auf, gebe allerdings keinen Wert ein. Daher keine Ausgabe in der Konsole.
Super, den Fehler habe ich verstanden, weiß aber nicht wie ich es hinbekomme ein und den selben Wert zweimal angezeigt zu bekommen ( Clipboard + Konsole)

Kann mir jemand den richtigen Weg deuten?
 

Jw456

Top Contributor
wenn du das PW den String von createPassword öfters brauchst dann solltest du ihn entweder in der Main speichern nach dem erzeugen. Oder in der anderen Klasse speichern und mit einem gettter erfragen können.

oder schaue nach wie du das PW aus dem Clipboard wider lesen kannst nach dem speichern.
 

Kotelettklopfer

Bekanntes Mitglied
Ich wollte ihn eigentlich als Variable speichern.
In der createPassword Methode macht es keinen Sinn, weil da würde ich die var nach der } wieder verlieren, darum der return.
Außerhalb der Methode bekomme ich pass.toString nicht aufgerufen.

Ich dachte an sowas wie

String pass = pass.toString

Das Ergebnis werden Profis direkt erkennen xDD --> Es gibt keins
 

Jw456

Top Contributor
Java:
String pw = password.createPassword(sc.nextInt());

        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                new StringSelection(pw), null);
 
Zuletzt bearbeitet:

Kotelettklopfer

Bekanntes Mitglied
Ja habe es gerade geschafft dank des letzten Hinweises.
Habe es genau so umgesetzt gehabt, wie du im selben Moment gepostet hast.

War ein Denkfehler meinerseits. Ich hatte die ganze Zeit versucht die var an der falschen stelle zu deklarieren / initialisieren.

Java:
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random password = new Random(sc);



        System.out.print("Wie viele Zeichen soll ihr Passwort beinhalten?");
        String pass = password.createPassword(sc.nextInt());
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                new StringSelection(pass), null);
        System.out.println(pass);

    }


}


Danke Euch :)

Wieder was gelernt
 

kneitzel

Top Contributor
Ein paar Tipps von meiner Seite:
Java:
Random password = new Random(sc);
Was ist denn in der Variable password? Da ist doch kein Passwort enthalten, also ist der Name doch nur verwirrend.

Versuch, pro Zeile nicht mehr wie eine Sache zu machen. Ganz heftig war es ja in der ersten Version:
Java:
System.out.println(password.createPassword(sc.nextInt()));
- cs.nextInt() -> Also das Einholen einer Zahl vom Anwender
- password.createPassword(...) -> Das Erzeugen eines Passworts
- System.out.println(...) -> Die Ausgabe

Das ist - speziell bei Anfängern - eine Unart. Zusammen mit schlechten Bezeichnern ist dies schnell etwas, das unübersichtlich und nicht mehr zu verwalten ist.

Eine Auftrennung in mehrere Zeilen macht es generell deutlich einfacher.
 

Kotelettklopfer

Bekanntes Mitglied
Jetzt habe ich Blut geleckt xD

Habe noch paar Sachen verändert -- Danke kneitzel

Desweiteren kann der User nun entscheiden ob er das PW in die Zwischenablgae kopiert haben will.
Versuche jetzt noch einzubauen das Groß/Kleinbuchstaben bei der auswahl egal sind.

EDIT: equalsIgnoreCase hieß das Zauberwort

Main.java:
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random random = new Random(sc);


        System.out.print("Wie viele Zeichen soll ihr Passwort beinhalten?");
        String pass = random.createPassword(sc.nextInt());
        System.out.println("Soll das neue Passwort in die Zwischenablage kopiert werden (J/N) ?");
        String copyChoice = sc.next();
        if (copyChoice.equals("J")) {
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                    new StringSelection(pass), null);
        }
        System.out.println(pass);

    }


}

Entschuldigt die Variablennamen wie copyChoice.. Ich bin da etwas Ideenlos manchmal xD
 
Zuletzt bearbeitet:

kneitzel

Top Contributor
Aber so wirklich glücklich bin ich auch noch nicht mit den Bezeichnern. Also gehen wir noch einmal auf ein paar Dinge ein:

a) createPassword ist eine statische Methode. Diese sollte nicht auf einer Instanz aufgerufen werden.
==> Also keine Instanz von Ramdom mehr erzeugen und statt dessen Random.createPassword aufrufen

b) In Random brauchst Du keinen Scanner und Du hast keinen State, der genutzt wird: Konstruktor und das Feld löschen.

c) Dann ist es eine sogenannte Utility Klasse. Utility Klassen werden oft als Plural angegeben. Also z.B. Utility Klasse für Arrays -> java.util.Arrays, Utilitly Klasse rund um Object -> java.util.Objects Daran angelehnt wäre dann etwas wie Randoms denkbar, aber das fühlt sich falsch an (wobei ich kein "native english speaker" bin - evtl. täuscht mich da mein Gefühl. Ich neige immer eher zu der Alternative: Util Klassen wie z.B. in Apache Commons: org.apache.commons.lang3.StringUtils. Daher wäre ich dann eher für eine Klasse RandomUtils oder PasswordUtils so.

Bei PasswordUtils wäre dann klar: Da wird ein Passwort generiert. Da wäre dann eine Zusatzinformation, dass dieses generierte Passwort zufällig ist. Bei RamdomUtils ist klar: Da wird was zufällig gemacht.

d) Idee, es etwas umzuschreiben:
Du hast derzeit ja die zur Verfügung stehenden Zeichen in einer Konstante. Diese Konstante nützt innerhalb der Methode nur recht wenig. Das packt man lieber in die Klasse. Und dann möchte man dies ggf. dynamisch halten, dann könnte man das auch von außen mitgeben:

Java:
import java.security.SecureRandom;

public class Random {

    public final String DEFAULT_ALLOWED_CHARS = "0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOP!§$%&?*+#";
    
    public static String createPassword(int length) {
        return createPassword(length, DEFAULT_ALLOWED_CHARS);
    }
    
    public static String createPassword(int length, String allowedChars) {   
        SecureRandom random = new SecureRandom();
        StringBuilder pass = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            pass.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
        }
        return pass.toString();
    }
}
 

Kotelettklopfer

Bekanntes Mitglied
Aber so wirklich glücklich bin ich auch noch nicht mit den Bezeichnern. Also gehen wir noch einmal auf ein paar Dinge ein:

a) createPassword ist eine statische Methode. Diese sollte nicht auf einer Instanz aufgerufen werden.
==> Also keine Instanz von Ramdom mehr erzeugen und statt dessen Random.createPassword aufrufen

b) In Random brauchst Du keinen Scanner und Du hast keinen State, der genutzt wird: Konstruktor und das Feld löschen.

c) Dann ist es eine sogenannte Utility Klasse. Utility Klassen werden oft als Plural angegeben. Also z.B. Utility Klasse für Arrays -> java.util.Arrays, Utilitly Klasse rund um Object -> java.util.Objects Daran angelehnt wäre dann etwas wie Randoms denkbar, aber das fühlt sich falsch an (wobei ich kein "native english speaker" bin - evtl. täuscht mich da mein Gefühl. Ich neige immer eher zu der Alternative: Util Klassen wie z.B. in Apache Commons: org.apache.commons.lang3.StringUtils. Daher wäre ich dann eher für eine Klasse RandomUtils oder PasswordUtils so.

Bei PasswordUtils wäre dann klar: Da wird ein Passwort generiert. Da wäre dann eine Zusatzinformation, dass dieses generierte Passwort zufällig ist. Bei RamdomUtils ist klar: Da wird was zufällig gemacht.

d) Idee, es etwas umzuschreiben:
Du hast derzeit ja die zur Verfügung stehenden Zeichen in einer Konstante. Diese Konstante nützt innerhalb der Methode nur recht wenig. Das packt man lieber in die Klasse. Und dann möchte man dies ggf. dynamisch halten, dann könnte man das auch von außen mitgeben:

Java:
import java.security.SecureRandom;

public class Random {

    public final String DEFAULT_ALLOWED_CHARS = "0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOP!§$%&?*+#";
  
    public static String createPassword(int length) {
        return createPassword(length, DEFAULT_ALLOWED_CHARS);
    }
  
    public static String createPassword(int length, String allowedChars) { 
        SecureRandom random = new SecureRandom();
        StringBuilder pass = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            pass.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
        }
        return pass.toString();
    }
}
Das ist jetzt aber schon eine Programmier Evolutionsstufe weiter als ich bin oder? xD

Blöde Frage:
Da es funktioniert, gehe ich davon aus, wir haben wieder das alte Thema: " Es funktioniert, aber sieht halt sch***e aus" !?
 

Jw456

Top Contributor
Aber so wirklich glücklich bin ich auch noch nicht mit den Bezeichnern. Also gehen wir noch einmal auf ein paar Dinge ein:

a) createPassword ist eine statische Methode. Diese sollte nicht auf einer Instanz aufgerufen werden.
==> Also keine Instanz von Ramdom mehr erzeugen und statt dessen Random.createPassword aufrufen

b) In Random brauchst Du keinen Scanner und Du hast keinen State, der genutzt wird: Konstruktor und das Feld löschen.

c) Dann ist es eine sogenannte Utility Klasse. Utility Klassen werden oft als Plural angegeben. Also z.B. Utility Klasse für Arrays -> java.util.Arrays, Utilitly Klasse rund um Object -> java.util.Objects Daran angelehnt wäre dann etwas wie Randoms denkbar, aber das fühlt sich falsch an (wobei ich kein "native english speaker" bin - evtl. täuscht mich da mein Gefühl. Ich neige immer eher zu der Alternative: Util Klassen wie z.B. in Apache Commons: org.apache.commons.lang3.StringUtils. Daher wäre ich dann eher für eine Klasse RandomUtils oder PasswordUtils so.

Bei PasswordUtils wäre dann klar: Da wird ein Passwort generiert. Da wäre dann eine Zusatzinformation, dass dieses generierte Passwort zufällig ist. Bei RamdomUtils ist klar: Da wird was zufällig gemacht.

d) Idee, es etwas umzuschreiben:
Du hast derzeit ja die zur Verfügung stehenden Zeichen in einer Konstante. Diese Konstante nützt innerhalb der Methode nur recht wenig. Das packt man lieber in die Klasse. Und dann möchte man dies ggf. dynamisch halten, dann könnte man das auch von außen mitgeben:

Java:
import java.security.SecureRandom;

public class Random {

    public final String DEFAULT_ALLOWED_CHARS = "0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOP!§$%&?*+#";
  
    public static String createPassword(int length) {
        return createPassword(length, DEFAULT_ALLOWED_CHARS);
    }
  
    public static String createPassword(int length, String allowedChars) { 
        SecureRandom random = new SecureRandom();
        StringBuilder pass = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            pass.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
        }
        return pass.toString();
    }
}
Das sind schon einige Fortgeschritte Techniken. Die wohl in dem Buch noch nicht behandelt worden.
 

kneitzel

Top Contributor
Das ist jetzt aber schon eine Programmier Evolutionsstufe weiter als ich bin oder? xD

Blöde Frage:
Da es funktioniert, gehe ich davon aus, wir haben wieder das alte Thema: " Es funktioniert, aber sieht halt sch***e aus" !?
Also ein paar Dinge sollte man durchaus von Anfang an beherzigen. Dazu gehören aus meiner Sicht a, b und c. Hier geht es um etwas, das ich unter dem Oberbegriff "Clean Code" fassen würde. Das ist nichts, das man als Anfänger perfektionieren sollte (oder überhaupt kann!), aber man sollte einfache Hinweise versuchen aufzunehmen um diese dann zu beherzigen. Denn jegliches zuwider Handeln macht Dir das Leben schwerer.

Die meisten Punkte von mir sind in diese Kategorie gefallen - denn ich bin erst zu dem Thread gekommen, nachdem Du es zum laufen bekommen hast. Und d) geht etwas in die gleiche Richtung. Da geht es aber nicht um Clean Code sondern um Design Punkte. So Hinweise halte ich für wichtig, denn genau sowas gehört auch dazu. Das ist nichts zum auswendig lernen oder so. Aber Du hast sowas dann schon einmal gesehen. Evtl. machst Du es dann mal ähnlich aber vielleicht auch nicht. Aber wenn Du mal über so einen Code stolperst, dann wirst Du ihn hoffentlich leichter und schneller verstehen.

Also ganz klar: Schau es Dir einmal an. Es geht hier um nichts existenzielles (Code ist nicht falsch, wenn Du so Dinge nicht beachtest), aber alles ist nur ein kleiner Versuch, dich mit einfachen Hinweisen etwas weiter zu puschen.

Also weniger das Thema "es sieht scheiße aus" - sondern eher das Thema: Du sollst keine Probleme haben, den Code zu nutzen und auch anzupassen.

Nur noch mal meinen ersten Hinweis verdeutlicht:
Ein paar Tipps von meiner Seite:
Java:
Random password = new Random(sc);
Was ist denn in der Variable password? Da ist doch kein Passwort enthalten, also ist der Name doch nur verwirrend.

Versuch, pro Zeile nicht mehr wie eine Sache zu machen. Ganz heftig war es ja in der ersten Version:
Java:
System.out.println(password.createPassword(sc.nextInt()));
- cs.nextInt() -> Also das Einholen einer Zahl vom Anwender
- password.createPassword(...) -> Das Erzeugen eines Passworts
- System.out.println(...) -> Die Ausgabe

Das ist - speziell bei Anfängern - eine Unart. Zusammen mit schlechten Bezeichnern ist dies schnell etwas, das unübersichtlich und nicht mehr zu verwalten ist.

Eine Auftrennung in mehrere Zeilen macht es generell deutlich einfacher.
Wenn ich einen Code schreibe, dann läuft es immer gleich.
a) Ich überlege mir die Schritte. Am Anfang kann man die auch direkt in Kommentaren schreiben:
Java:
    public static void main(String[] args) {
        // Frage Nutzer nach Anzahl Zeichen
        // Lese Anzahl gewünschter Zeichen ein
        // Generiere Passwort in gewuenschter Länge
        // Gib generiertes Passwort aus.
    }

b) Das wird dann mit Leben gefüllt, d.h. Schritt für Schritt wird implementiert:
Java:
    public static void main(String[] args) {
        // Frage Nutzer nach Anzahl Zeichen
        System.out.print("Wie viele Zeichen soll ihr Passwort beinhalten?");

        // Lese Anzahl gewünschter Zeichen ein
        Scanner sc = new Scanner(System.in);
        int gewuenschteLaenge = sc.nextInt();

        // Generiere Passwort in gewuenschter Länge
        String password = RandomUtil.createPassword(gewuenschteLaenge);

        // Gib generiertes Passwort aus.
        System.out.println(password);
    }

Die Kommentare habe ich jetzt einmal drin gelassen - die werden natürlich ersetzt. Bzw. man behält sowas im Kopf und schreibt die nicht erst auf. (Ich schreibe gerne TODO Kommentare, alsoKommentare, die mit "TODO: " starten - das hatten wir erst in einem anderen Thread vertieft. Denn so habe ich in meiner IDE eine klare TODO Liste, die ich abarbeiten kann.)

Da kommt dann niemals Code raus wie:
Java:
System.out.println(password.createPassword(sc.nextInt()));
Und genau der Code hat Dir ja Probleme bereitet: Wie komme ich an das verdammte Passwort?

Daher nur noch mal meine Intention: Mir geht es nicht nur um das konkrete Problem (Das hast Du gut gelöst bekommen) sondern mir geht es auch immer um den Gedanken: Welchen Verfahren kann ich Dir an die Hand geben, um so geartete Probleme zu verhindern?
 

Kotelettklopfer

Bekanntes Mitglied
Aber so wirklich glücklich bin ich auch noch nicht mit den Bezeichnern. Also gehen wir noch einmal auf ein paar Dinge ein:

a) createPassword ist eine statische Methode. Diese sollte nicht auf einer Instanz aufgerufen werden.
==> Also keine Instanz von Ramdom mehr erzeugen und statt dessen Random.createPassword aufrufen

b) In Random brauchst Du keinen Scanner und Du hast keinen State, der genutzt wird: Konstruktor und das Feld löschen.

c) Dann ist es eine sogenannte Utility Klasse. Utility Klassen werden oft als Plural angegeben. Also z.B. Utility Klasse für Arrays -> java.util.Arrays, Utilitly Klasse rund um Object -> java.util.Objects Daran angelehnt wäre dann etwas wie Randoms denkbar, aber das fühlt sich falsch an (wobei ich kein "native english speaker" bin - evtl. täuscht mich da mein Gefühl. Ich neige immer eher zu der Alternative: Util Klassen wie z.B. in Apache Commons: org.apache.commons.lang3.StringUtils. Daher wäre ich dann eher für eine Klasse RandomUtils oder PasswordUtils so.

Bei PasswordUtils wäre dann klar: Da wird ein Passwort generiert. Da wäre dann eine Zusatzinformation, dass dieses generierte Passwort zufällig ist. Bei RamdomUtils ist klar: Da wird was zufällig gemacht.

d) Idee, es etwas umzuschreiben:
Du hast derzeit ja die zur Verfügung stehenden Zeichen in einer Konstante. Diese Konstante nützt innerhalb der Methode nur recht wenig. Das packt man lieber in die Klasse. Und dann möchte man dies ggf. dynamisch halten, dann könnte man das auch von außen mitgeben:

Java:
import java.security.SecureRandom;

public class Random {

    public final String DEFAULT_ALLOWED_CHARS = "0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOP!§$%&?*+#";
   
    public static String createPassword(int length) {
        return createPassword(length, DEFAULT_ALLOWED_CHARS);
    }
   
    public static String createPassword(int length, String allowedChars) {  
        SecureRandom random = new SecureRandom();
        StringBuilder pass = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            pass.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
        }
        return pass.toString();
    }
}
a) Glaube ich den Grund verstanden zu haben und habe es geändert
b) Soweit klar, aber was ist ein State ? Statement ??
c) Ja PasswordUtil klingt besser und logischer... merk ich mir
d) Schau ich mir in Ruhe noch einmal an

Danke aufjeden Fall
 

Kotelettklopfer

Bekanntes Mitglied
Also ein paar Dinge sollte man durchaus von Anfang an beherzigen. Dazu gehören aus meiner Sicht a, b und c. Hier geht es um etwas, das ich unter dem Oberbegriff "Clean Code" fassen würde. Das ist nichts, das man als Anfänger perfektionieren sollte (oder überhaupt kann!), aber man sollte einfache Hinweise versuchen aufzunehmen um diese dann zu beherzigen. Denn jegliches zuwider Handeln macht Dir das Leben schwerer.

Die meisten Punkte von mir sind in diese Kategorie gefallen - denn ich bin erst zu dem Thread gekommen, nachdem Du es zum laufen bekommen hast. Und d) geht etwas in die gleiche Richtung. Da geht es aber nicht um Clean Code sondern um Design Punkte. So Hinweise halte ich für wichtig, denn genau sowas gehört auch dazu. Das ist nichts zum auswendig lernen oder so. Aber Du hast sowas dann schon einmal gesehen. Evtl. machst Du es dann mal ähnlich aber vielleicht auch nicht. Aber wenn Du mal über so einen Code stolperst, dann wirst Du ihn hoffentlich leichter und schneller verstehen.

Also ganz klar: Schau es Dir einmal an. Es geht hier um nichts existenzielles (Code ist nicht falsch, wenn Du so Dinge nicht beachtest), aber alles ist nur ein kleiner Versuch, dich mit einfachen Hinweisen etwas weiter zu puschen.

Also weniger das Thema "es sieht scheiße aus" - sondern eher das Thema: Du sollst keine Probleme haben, den Code zu nutzen und auch anzupassen.

Nur noch mal meinen ersten Hinweis verdeutlicht:

Wenn ich einen Code schreibe, dann läuft es immer gleich.
a) Ich überlege mir die Schritte. Am Anfang kann man die auch direkt in Kommentaren schreiben:
Java:
    public static void main(String[] args) {
        // Frage Nutzer nach Anzahl Zeichen
        // Lese Anzahl gewünschter Zeichen ein
        // Generiere Passwort in gewuenschter Länge
        // Gib generiertes Passwort aus.
    }

b) Das wird dann mit Leben gefüllt, d.h. Schritt für Schritt wird implementiert:
Java:
    public static void main(String[] args) {
        // Frage Nutzer nach Anzahl Zeichen
        System.out.print("Wie viele Zeichen soll ihr Passwort beinhalten?");

        // Lese Anzahl gewünschter Zeichen ein
        Scanner sc = new Scanner(System.in);
        int gewuenschteLaenge = sc.nextInt();

        // Generiere Passwort in gewuenschter Länge
        String password = RandomUtil.createPassword(gewuenschteLaenge);

        // Gib generiertes Passwort aus.
        System.out.println(password);
    }

Die Kommentare habe ich jetzt einmal drin gelassen - die werden natürlich ersetzt. Bzw. man behält sowas im Kopf und schreibt die nicht erst auf. (Ich schreibe gerne TODO Kommentare, alsoKommentare, die mit "TODO: " starten - das hatten wir erst in einem anderen Thread vertieft. Denn so habe ich in meiner IDE eine klare TODO Liste, die ich abarbeiten kann.)

Da kommt dann niemals Code raus wie:
Java:
System.out.println(password.createPassword(sc.nextInt()));
Und genau der Code hat Dir ja Probleme bereitet: Wie komme ich an das verdammte Passwort?

Daher nur noch mal meine Intention: Mir geht es nicht nur um das konkrete Problem (Das hast Du gut gelöst bekommen) sondern mir geht es auch immer um den Gedanken: Welchen Verfahren kann ich Dir an die Hand geben, um so geartete Probleme zu verhindern?
Habe ich auch als "pushen" verstanden und bin auch froh hier immer wieder gute Hilfe von einigen, darunter Dir, zu bekommen (Puh was ein Satz..definitiv nicht clean xD
 

kneitzel

Top Contributor
b) Soweit klar, aber was ist ein State ? Statement ??
State ist aus dem Englischen und bezeichnet den Zustand. Also wenn Du ein Bankkonto betrachtest, dann hat dies einen Zustand: Also z.B. eine Währung und einen Kontostand.

Deine Klasse selbst hat keinen Zustand (= keine Instanzvariablen, die etwas speichern, das dann den Zustand der Instanzvariablen aus macht). Daher brauchst Du auch keine Instanzen und alles kann statisch sein.
 

Kotelettklopfer

Bekanntes Mitglied
Ich habe mir den Passwortgenerator mal weiter angeschaut und wollte mehr.
Eine Grafische Oberfläche muss her.

Bevor ich mit der GUI anfing, habe ich die Main noch etwas aufgeräumt und die eigentlichen toDos in eine Class Application gesteckt.
Ich finde die Main nun sauberer, da dort nur noch die Application Methode start() aufgerufen wird.
Da es sich um eine static Methode handelt, habe ich kein neues Application Objekt in der Main erzeugt sondern greife direkt auf die Klasse zu.

Main.java:
public class Main {

    public static void main(String[] args) {

     Application.start();

    }


}


Applikation.java:
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.util.Scanner;

public class Application {


    public static final void start() {

        Scanner sc = new Scanner(System.in);

        new UserInterface();


        System.out.print("Wie viele Zeichen soll ihr Passwort beinhalten?");
        String pass = PasswordUtils.createPassword(sc.nextInt());

        System.out.println("Soll das neue Passwort in die Zwischenablage kopiert werden (J/N) ?");
        String copyChoice = sc.next();

        if (copyChoice.equalsIgnoreCase("J")) {
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                    new StringSelection(pass), null);
        }

        System.out.println("Neues Passwort: " + pass);

    }


}


Konsolenaufruf funktioniert tadellos, sieht auch sauberer aus, hoffentlich auch schön umgesetzt.
Kommen wir zu GUI

Als erstes die "Grundeinrichtung" und dann die Feststellung:

Wie zum Teufel komme ich an die einzelnen Werte aus der Class Applikation um zb. JLabel mit dem Passwort (var Pass) zu füllen !?
Auch hier würde ich eigentlich einfach die Klasse aufrufen und dann die Variable Pass aus Application an das JLabel übergeben... Mööp ist nicht.

Was mache ich hier falsch?
Zeile 14 ist mein Versuch den Text zu holen...kläglich

UserInterface.java:
import javax.swing.*;
import java.awt.*;




public class UserInterface {

    public UserInterface() {


        JFrame frame = new JFrame();

        JLabel passOutput = new JLabel(Application.start(Pass));


        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
        panel.setLayout(new GridLayout(0, 1));

        frame.add(panel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setTitle("PassAword");
        frame.pack();
        frame.setVisible(true);


    }

}
 

Jw456

Top Contributor
Java:
 Application.start();
reicht nicht du musst schon von der Klasse eine Instanz erstelln und diese dann in der main aufrufen.
Java:
public static void main(String[] args) {
  
    Application application = new Application();
    Application.start();

    }
Edit :
ok ich sehe gerade das die methode start static ist würde ich nicht machen.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Wenn du Daten aus der Klasse Application in der Klasse UserInterface brauchst solltest du die Instanz der Klasse an die UserInterface weiter reichen.
Entweder im Konstruktor und in eine Instanzvariablen speichern, oder als Parameter beim Methoden Aufruf.
 

Kotelettklopfer

Bekanntes Mitglied
Wenn du Daten aus der Klasse Application in der Klasse UserInterface brauchst solltest du die Instanz der Klasse an die UserInterface weiter reichen.
Entweder im Konstruktor und in eine Instanzvariablen speichern, oder als Parameter beim Methoden Aufruf.
Ok, schaue ich mir gleich an. Aber mit deinem Einwand zum Thema Main Methode bin ich noch nicht einverstanden :)
 

Jw456

Top Contributor
Was ich auch nicht gut finde ist

new UserInterface();

du erstellt eine Instanz aber du benutzt keine Variable in der sie gespeichert wird.
Wenn du später darauf zugreifen willst zb eine Methode daraus aufrufen hast du sie nicht.
 

Jw456

Top Contributor
Java:
public UserInterface(Application app) {


        JFrame frame = new JFrame();

        JLabel passOutput = app.getPass();
       
        //In der Application Klasse einen getter der das PW als String zurück gibt.
 

kneitzel

Top Contributor
Also bei sowas sollte man sich immer überlegen, was für Objekte man hat und wie diese Kommunizieren sollen.

Dabei ist es eher unüblich, da etwas in eine Klasse Application zu packen. Es geht halt nicht um eine Application an sich.

Was für Elemente hast Du denn? Das ist doch sowas wie ein PasswortGenerator. Das wäre also ggf. eine Idee für eine Klasse.

Also brauchst Du dann eine Instanz von PasswortGenerator, bei der kannst Du dann ggf. Dinge einstellen um dann ein Passwort zu generieren.
Wenn man sowas einordnen willst: Das wäre dann etwas, das man einen Service nennen würde / könnte.

Bei der Oberfläche könnte man dann auch wieder unterteilen in View, Model und Controller.

Du merkst, dass es hier jetzt schnell um deutlich mehr geht in Bezug auf Design und Strukturierung einer Anwendung.
 

Kotelettklopfer

Bekanntes Mitglied
Also bei sowas sollte man sich immer überlegen, was für Objekte man hat und wie diese Kommunizieren sollen.

Dabei ist es eher unüblich, da etwas in eine Klasse Application zu packen. Es geht halt nicht um eine Application an sich.

Was für Elemente hast Du denn? Das ist doch sowas wie ein PasswortGenerator. Das wäre also ggf. eine Idee für eine Klasse.

Also brauchst Du dann eine Instanz von PasswortGenerator, bei der kannst Du dann ggf. Dinge einstellen um dann ein Passwort zu generieren.
Wenn man sowas einordnen willst: Das wäre dann etwas, das man einen Service nennen würde / könnte.

Bei der Oberfläche könnte man dann auch wieder unterteilen in View, Model und Controller.

Du merkst, dass es hier jetzt schnell um deutlich mehr geht in Bezug auf Design und Strukturierung einer Anwendung.
Ich merke schon, bevor ich mit Grafischen Oberflächen weitermache, sollte ich das Buch weiter lesen.
Naja Versuch war es wert, immerhin funktioniert das Ding schon einmal in der Konsole :)
 

kneitzel

Top Contributor
Es kann auf jeden Fall Sinn machen, das Buch weiter durchzugehen und dann bei den Spielereien nebenher (Die sollten weiter sein zur Vertiefung!) sich mehr auf die Dinge zu beschränken, die schon vorgekommen sind.

Da fallen mir auch noch einige Dinge ein, die Du bauen kannst. Wenn die Eingabe z.B. noch per sc.nextInt(); erfolgt: Wann fang doch einmal ab, dass eine vernünftige Meldung kommt, wenn Hallo oder 73x eingegeben wird.
Oder auch einmal Grenzen vorgeben - Länge 1 oder Länge 100 machen vielleicht keinen Sinn. Da könntest Du also auch etwas mehr vertiefen.
 

Jw456

Top Contributor
Wichtig finde ich auch. Das du dich nochmal damit auseinander setzt wie du Daten von einer Klasse zu einer anderen übergeben kannst. Also das OOP. Wenn ich deinen Versuch sehe wie du auf Daten einer anderen Klasse zugreifen wolltest, scheint das sehr wichtig zu sein für dich.
Da Scheinen noch große Lücken zu sein.

Denn auch wenn du erstmal nur in textmode bleibst wirst du das auch da mal brauchen.
 

Kotelettklopfer

Bekanntes Mitglied
Es kann auf jeden Fall Sinn machen, das Buch weiter durchzugehen und dann bei den Spielereien nebenher (Die sollten weiter sein zur Vertiefung!) sich mehr auf die Dinge zu beschränken, die schon vorgekommen sind.

Da fallen mir auch noch einige Dinge ein, die Du bauen kannst. Wenn die Eingabe z.B. noch per sc.nextInt(); erfolgt: Wann fang doch einmal ab, dass eine vernünftige Meldung kommt, wenn Hallo oder 73x eingegeben wird.
Oder auch einmal Grenzen vorgeben - Länge 1 oder Länge 100 machen vielleicht keinen Sinn. Da könntest Du also auch etwas mehr vertiefen.
Ja, leider verfalle ich immer wieder in alte Muster und erwarte zu schnell zuviel :)
Ich wollte hier einfach schnell eine Gui bauen um dann in der Familie damit zu flexen xD
Schwachsinnig, aber leider so ein Negativlaster meiner Selbst.

Die Idee das vorhandene Konsolenprogramm weiter auszubauen sollte ich da wohl eher in Betracht ziehen und macht selbstverständlich auch viel mehr Sinn.
 

Kotelettklopfer

Bekanntes Mitglied
Wichtig finde ich auch. Das du dich nochmal damit auseinander setzt wie du Daten von einer Klasse zu einer anderen übergeben kannst. Also das OOP. Wenn ich deinen Versuch sehe wie du auf Daten einer anderen Klasse zugreifen wolltest, scheint das sehr wichtig zu sein für dich.
Da Scheinen noch große Lücken zu sein.

Denn auch wenn du erstmal nur in textmode bleibst wirst du das auch da mal brauchen.
Damit meinst du aber nicht Kommentar #25 und #27 oder ?
Hier war meiner Meinung nach noch kein Grund genannt warum dies falsch wäre.
"Ich nutze static fast nie" ist da eher eine persönliche Sache als das es ein Grund dagegen wäre.

Die Beschaffung der Werte in die GUI dagegen, sollte ich mir ansehen xD
 

kneitzel

Top Contributor
Es gibt den dezenten Hinweis für Anfänger, dass man relativ schnell zusehen sollte, dass bis auf die main Methode nichts static ist.

Static ist aber nicht per se böse. Ein Problem ist, wenn man einen statischen Zustand irgendwo hat. Das scheint einem als Anfänger ganz toll zu sein, weil man da ja von überall drauf zugreifen kann. Aber das wird schnell zu einem Albtraum:
a) Du hast dann wirklich nur den einen globalen Zustand. Wenn Du testen willst, ist das deutlich komplexer, denn du musst dann immer aufpassen, was denn gerade für ein Zustand ist.
b) Du kannst von überall darauf zugreifen. Ja, 1:1 was am Anfang ein Vorteil schien wird jetzt negativ. Denn Du weisst nicht, wann von wo wer zugegriffen hat. Also wenn Du einen Fehler suchen musst, dann ist es extrem!

Statische Methoden sind für mich eigentlich nur dann interessant / zulässig, wenn diese ohne inneren Zustand auskommen. Es verändert sich nichts. Du gibst oben etwas rein und dann kommt unten etwas raus. Und das ist unabhängig von allen anderen Sachen. Und - ähnlich wie bei den Utility Methoden - Factory Methoden.
 

Kotelettklopfer

Bekanntes Mitglied
Das klingt nach einem Grund.
Wird gespeichert und umgesetzt.
Die Anpassung in dem Projekt geht ja schnell von der Hand :)
Hatte in Erinnerung gelesen zu haben, Methoden so oft es geht static.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Die Beschaffung der Werte in die GUI dagegen, sollte ich mir ansehen xD
Das stand erstmal im Vordergrund .



Was ist jetzt, wenn du in der Klasse Application eine private Instanzvariablen hast zB. dein PW.

Du nun einen Getter für das PW erstellst?

Wie willst du auf den getter zugreifen?

Du müsstest alles static machen Instanzvariable und Getter.



Alles static entspricht nicht dem OO Prinzip.
 
Zuletzt bearbeitet:

kneitzel

Top Contributor
Methoden so oft es geht static.
In der Regel sollten Methoden das Verhalten einer Instanz bestimmen. Damit agieren sie auf einer Instanz und können nicht static sein.

Sobald eine Methode keine Instanz der Klasse benötigt, dann kann diese static sein. Das verändert aber intern ein paar Dinge:
Wenn die Methode private ist, dann ändert sich eigentlich nichts, außer dass die Methode nun innerhalb der Klasse ohne Instanz aufgerufen werden kann.
Wenn die Methode nicht private ist, dann verändert sich das Verhalten. Denn eine statische Methode kann man nicht überschreiben.

Beispiel:
Java:
public class Beispiel {
    private int someValue;
    
    public Beispiel() {
        someValue = getAValue();
    }
    
    protected int getAValue() {
        return 1;
    }
}

Hier könnte nun eine Klasse von Beispiel erben und getAValue() überschreiben (z.B. mit return 2; statt der 1). Dann würde bei dem Konstruktor die überschriebene Methode aufgerufen.

Wen getAValue static ist, dann wird immer getAValue aus Beispiel aufgerufen und die Methode kann nicht überschrieben werden.

Sprich: Bei der nicht statischen Variante gibt es ein late Binding - welche Methode aufgerufen wird, steht zur Compile-Zeit noch nicht fest.
Im Gegensatz dazu wird die statische Variante (so wie private Methoden) schon zur Compile-Zeit gebunden.

Zurück zur Regel: Da es einen Unterschied machen kann, muss man aufpassen, was man genau haben will. Eine pauschale Regel/Aussage macht da so keinen Sinn. (Aber gibt es durchaus. Bei uns damals im .Net Team war das auch ein Punkt, der von der statischen Codeanalyse mit abgedeckt wurde und Methoden wurden static, so diese keinen inneren Zustand nutzten.
 

temi

Top Contributor
Ich merke schon, bevor ich mit Grafischen Oberflächen weitermache, sollte ich das Buch weiter lesen.
Das wäre generell mein Tipp. Erst die Grundlagen lernen (danach am besten noch die Entwurfsmuster, weil die bei GUI-Frameworks meist gehäuft auftreten) und erst dann grafische Oberflächen. Aber ich kann verstehen, dass man gerne was Buntes sehen möchte ;)

Kennst du noch den Film Karate Kid? Der durfte auch erst mal nur einen Zaun anstreichen :D
 
Zuletzt bearbeitet:

Kotelettklopfer

Bekanntes Mitglied
Applikation.java:
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.util.Scanner;

public class Application {

    public void start() {

        Scanner sc = new Scanner(System.in);
        String generatedPW;
        int numberOfChars;


        System.out.println("Bitte wähle eine Sprache: ");
        System.out.println("Please choose a language: ");
        System.out.println("Veuillez choisir une langue: ");
        System.out.println("DE / EN / FR");
        String language = sc.next();
        int counter = 0;

        switch (language) {

            case "DE", "de", "De":
                System.out.println("Wie viele Zeichen soll ihr Passwort beinhalten?");
                numberOfChars = sc.nextInt();


                    while (numberOfChars > 64) {
                        System.out.println("Die maximale Passwortlänge beträgt 64 Zeichen");
                        System.out.println("Wie viele Zeichen soll ihr Passwort beinhalten?");
                        numberOfChars = sc.nextInt();
                        counter++;

                    }
                    if (counter >3) {
                        System.out.println("Das Programm wird aufgrund mehrfacher Falscheingabe beendet");
                        System.exit(0);
                    }


                generatedPW = PasswordUtils.createPassword((numberOfChars));


                System.out.println("Soll das neue Passwort in die Zwischenablage kopiert werden (J/N) ?");
                String copyChoice = sc.next();

                if (copyChoice.equalsIgnoreCase("J")) {
                    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                            new StringSelection(generatedPW), null);
                }

                System.out.println("Neues Passwort: " + generatedPW);
                break;

            case "EN", "en", "En":
                System.out.print("How many characters should your password contain?");
                numberOfChars = sc.nextInt();

                while (numberOfChars > 64) {
                    System.out.println("The maximum password length is 64 characters");
                    System.out.println("How many characters should your password contain?");
                    numberOfChars = sc.nextInt();
                }

                generatedPW = PasswordUtils.createPassword((numberOfChars));


                System.out.println("Should the new password be copied to the clipboard (Y/N) ?");
                copyChoice = sc.next();

                if (copyChoice.equalsIgnoreCase("Y")) {
                    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                            new StringSelection(generatedPW), null);
                }

                System.out.println("New password: " + generatedPW);
                break;

            case "FR", "fr", "Fr":
                System.out.print("Combien de caractères votre mot de passe doit-il contenir ?");
                numberOfChars = sc.nextInt();

                while (numberOfChars > 64) {
                    System.out.println("La longueur maximale du mot de passe est de 64 caractères");
                    System.out.println("Combien de caractères votre mot de passe doit-il contenir?");
                    numberOfChars = sc.nextInt();
                }

                generatedPW = PasswordUtils.createPassword((numberOfChars));


                System.out.println("Si le nouveau mot de passe doit être copié dans le presse-papiers (O/N) ?");
                copyChoice = sc.next();

                if (copyChoice.equalsIgnoreCase("O")) {
                    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
                            new StringSelection(generatedPW), null);
                }

                System.out.println("Nouveau mot de passe: " + generatedPW);

        }


    }


}

So ich habe es mir zu Herzen genommen und meinen PW Generator etwas ausgebaut.
Ob es Sinn macht einen Generator in mehreren Sprachen zu bauen sei dahingestellt, ich versuche nur Wissen zu vertiefen :)

Die Switch Methode klappt: Der User kann auswählen ob er in deutsch, englisch oder Französisch durch das Programm geführt werden möchte.
Ich möchte im Bereich der Auswahl "numberOfChars" eine Sperre einbauen. Es sollen maximal 3x zuviele Zeichen (>64) ausgewählt werden können bevor er abbricht.

Im Moment kann ich immer weiter 65 eingeben und erst wenn ich eine korrekte Zahl eingebe (<=64) geht es weiter.. allerdings geht er dann in die System.exit.

Was muss ich tun, damit er nach 3 Versuchen abbricht?

Kleiner Hinweis wäre super :) PS: Die Funktion ist erstmal nur für Case "DE" geplant.


Edit: Die Sprachauswahl wird vielleicht irgendwann nochmal angepasst. Ich könnte mir vorstellen, dass man hier Code sparen könnte (Codeduplikation) und das ganze über ein Interface vorgibt !?
 

kneitzel

Top Contributor
Also die Überprüfung, ob counter > 3 ist, muss natürlich auch in der Schleife stattfinden. Das kann man z.B. noch zusätzlich in die Schleifenbedingung bauen, denn wie lange soll die Schleife ausgeführt werden? Das wäre doch: So lange wie die Anzahl Zeichen > 64 ist und counter < 3,

Ich könnte mir vorstellen, dass man hier Code sparen könnte (Codeduplikation) und das ganze über ein Interface vorgibt !?
Also ob Interface ist erst einmal noch dahin gestellt. Aber ja: Du hast Code, der fast gleich ist. Alles was unterschiedlich ist, sind nur die Nachrichten. Du könntest Die Nachrichten in einer Datenstruktur zusammen fassen und dann holt der Code sich immer die Nachricht aus der Struktur (in Abhängigkeit der gewählten Sprache).
 

Kotelettklopfer

Bekanntes Mitglied
Also die Überprüfung, ob counter > 3 ist, muss natürlich auch in der Schleife stattfinden. Das kann man z.B. noch zusätzlich in die Schleifenbedingung bauen, denn wie lange soll die Schleife ausgeführt werden? Das wäre doch: So lange wie die Anzahl Zeichen > 64 ist und counter < 3,


Also ob Interface ist erst einmal noch dahin gestellt. Aber ja: Du hast Code, der fast gleich ist. Alles was unterschiedlich ist, sind nur die Nachrichten. Du könntest Die Nachrichten in einer Datenstruktur zusammen fassen und dann holt der Code sich immer die Nachricht aus der Struktur (in Abhängigkeit der gewählten Sprache).
Ja hatte schon einiges ausprobiert. Mal sagt er die Bedingung counter wird immer false sein oder er meckert nicht, gibt aber falschen Output..
Werde noch was rumprobieren müssen.
 

kneitzel

Top Contributor
Java:
                    while (numberOfChars > 64 && counter < 3) {
                        System.out.println("Die maximale Passwortlänge beträgt 64 Zeichen");
                        System.out.println("Wie viele Zeichen soll ihr Passwort beinhalten?");
                        numberOfChars = sc.nextInt();
                        counter++;
                    }

                    if (numberOfChars > 64 && counter  == 3) {
                        System.out.println("Das Programm wird aufgrund mehrfacher Falscheingabe beendet");
                        System.exit(0);
                    }

oder
Java:
                    while (numberOfChars > 64) {
                        System.out.println("Die maximale Passwortlänge beträgt 64 Zeichen");
                        System.out.println("Wie viele Zeichen soll ihr Passwort beinhalten?");
                        numberOfChars = sc.nextInt();
                        counter++;
                        if (numberOfChars > 64 && counter  == 3) {
                            System.out.println("Das Programm wird aufgrund mehrfacher Falscheingabe beendet");
                            System.exit(0);
                        }
                    }

oder
Java:
                    while (numberOfChars > 64) {
                        if (counter  > 3) {
                            System.out.println("Das Programm wird aufgrund mehrfacher Falscheingabe beendet");
                            System.exit(0);
                        }
                        System.out.println("Die maximale Passwortlänge beträgt 64 Zeichen");
                        System.out.println("Wie viele Zeichen soll ihr Passwort beinhalten?");
                        numberOfChars = sc.nextInt();
                        counter++;
                    }

Einfach um paar Möglichkeiten im Code zu zeigen. Generell würde ich dazu tendieren, dies mehr in Methoden zu untergliedern. Das macht den Code dann auch deutlich besser lesbar und wartbar.
 

Mart

Top Contributor
für die sprachen gibts in java language packages zumindest in javafx kann man die einbauen ka wie die normal sind und je nachdem wird die sprache festgelegt auf basis des packages
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
P Methode trim() ohne StringBuilder Java Basics - Anfänger-Themen 1
P Stringbuilder richtig einsetzen Java Basics - Anfänger-Themen 1
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
G Wozu ist die Methode offsetByCodePoints(int, int) beim StringBuilder sinnvoll? Java Basics - Anfänger-Themen 1
G Wie kann ich einem StringBuilder einen int Wert formatiert hinzufügen? Java Basics - Anfänger-Themen 8
G Gibt es eine Methode die bei einem StringBuilder n mal das Zeichen c hinzufügt? Java Basics - Anfänger-Themen 6
G StringBuilder .setLength Methode wirkungslos? Java Basics - Anfänger-Themen 2
F StringBuilder: Zeilenumbruch nach x Zeichen ohne Worttrennung Java Basics - Anfänger-Themen 1
K StringBuilder Objekt überschreiben - Speicherverbrauch Java Basics - Anfänger-Themen 3
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1
H Suche Vergleichstabelle für die Klassen String und StringBuilder Java Basics - Anfänger-Themen 1
R Frage zum StringBuilder Java Basics - Anfänger-Themen 7
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
M Array erweitern ohne Stringbuilder Java Basics - Anfänger-Themen 6
E StringBuilder.delete Problem Java Basics - Anfänger-Themen 2
J StringBuilder / String zusammensetzen Java Basics - Anfänger-Themen 2
A Datentypen Stringbuilder vollständig leeren Java Basics - Anfänger-Themen 6
F Problem bei StringBuilder Methoden Java Basics - Anfänger-Themen 11
C String oder StringBuilder? Java Basics - Anfänger-Themen 13
Java-Insel StringBuilder Zeilenumbrüche erkennen Java Basics - Anfänger-Themen 3
L StringBuilder Probleme in einer Klasse Java Basics - Anfänger-Themen 4
S im StringBuilder Zeichenketten ersetzen Java Basics - Anfänger-Themen 6
J StringBuilder initialisieren und Löschbefehl Java Basics - Anfänger-Themen 20
M Gittermuster mit Stringbuilder und einfacher Schleife erstellen Java Basics - Anfänger-Themen 19
B Stringbuilder verwenden Java Basics - Anfänger-Themen 15
L StringBuilder OutOfMemoryError Java Basics - Anfänger-Themen 8
S StringBuilder Java Basics - Anfänger-Themen 13
J Strings und StringBuilder Java Basics - Anfänger-Themen 12
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
H Array + StringBuilder in eine Textdatei speichern.laden. Java Basics - Anfänger-Themen 7
D StringBuilder Java Basics - Anfänger-Themen 10
N String oder StringBuffer/StringBuilder Java Basics - Anfänger-Themen 6
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
Y Wie kann man überprüfen, ob bei einem Print Befehl tatsächlich etwas geprintet wurde? Java Basics - Anfänger-Themen 4
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
B Input/Output System.out.print mit und ohne "" Java Basics - Anfänger-Themen 5
Ghostman1711 Itext PDF print File gelockt by Java Java Basics - Anfänger-Themen 15
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
B Print Service Java Basics - Anfänger-Themen 5
I Print Client -> Server -> Client? Java Basics - Anfänger-Themen 1
I Print Monitor Java Basics - Anfänger-Themen 0
I Drucken (Print) monitoren Java Basics - Anfänger-Themen 0
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
J Umgang mit System.out.println() und .print() Java Basics - Anfänger-Themen 6
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
R Char wird in System.out.print(); nicht ausgegeben Java Basics - Anfänger-Themen 6
T System.out.print : Frage zu Aufbau Java Basics - Anfänger-Themen 4
J Erste Schritte System.out.print (Fehlermeldung) Java Basics - Anfänger-Themen 14
X Eclipse System.out.print fehler Java Basics - Anfänger-Themen 5
K char-int-Addition in System.out.print Java Basics - Anfänger-Themen 3
A Feststellen ob Desktop.print("*.pdf") fertig ist Java Basics - Anfänger-Themen 6
Junb Sys.Out.Print - aus Methode zugreifen Java Basics - Anfänger-Themen 6
G DRUCKEN von z.B. eines JFrame über print(Graphics g) Java Basics - Anfänger-Themen 9
S [JUnit] Print Results while running Java Basics - Anfänger-Themen 6
J print button Java Basics - Anfänger-Themen 2
T Dezimaltrennzeichen bei Ausgabe mit print ändern Java Basics - Anfänger-Themen 4
ruutaiokwu System.err.print(ln) macht ein durcheinander??! Java Basics - Anfänger-Themen 8
J print-Anweisung verschluckt Java Basics - Anfänger-Themen 3
S Print Methode zweier "Classes" kombinieren Java Basics - Anfänger-Themen 2
O Drucker: print methode wird 2 mal aufgerufen nachfrage Java Basics - Anfänger-Themen 4
J Fragen zu System.out.print und charAt Java Basics - Anfänger-Themen 3
S 2 kleine Methoden negieren und print Java Basics - Anfänger-Themen 8
D System.out.print(0101); =65. Warum? Java Basics - Anfänger-Themen 3
E Mehrfache print ausgabe ohne Schleife oder Rekursiven aufruf? Java Basics - Anfänger-Themen 48
M to pdf print process starten Java Basics - Anfänger-Themen 4
C javax.print.DocPrintJob Java Basics - Anfänger-Themen 17
F print in java Java Basics - Anfänger-Themen 3
W Die Methode print() wird 2 mal für jede Seite aufgerufen Java Basics - Anfänger-Themen 9
B Objekt Orintiertes Programmieren ausgabe Fehler mit Print() Java Basics - Anfänger-Themen 4
S print()! Java Basics - Anfänger-Themen 2
L PrintWriter autoflush: println funktioniert, print nicht Java Basics - Anfänger-Themen 3
G Auswahl:in File schreiben, oder System.out.print Java Basics - Anfänger-Themen 4
J System.out.print Java Basics - Anfänger-Themen 5
S Listen - insert - print etc. Dringend! Bitte! Java Basics - Anfänger-Themen 6
H Print Methode Java Basics - Anfänger-Themen 6
C System.out.print oder println ? Java Basics - Anfänger-Themen 2
xFlozen Text mehrspaltig ausgeben Java Basics - Anfänger-Themen 3
L Methoden Rückgabewert Verbergen / nicht mit ausgeben Java Basics - Anfänger-Themen 4
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
S Primzahlen in Array ausgeben Java Basics - Anfänger-Themen 14
O Anzahl Datensätze ausgeben Java Basics - Anfänger-Themen 3
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
C Matrix mit Array ausgeben Java Basics - Anfänger-Themen 6
Poppigescorn Mithilfe einer Arrayliste einen Notenspiegel ausgeben Java Basics - Anfänger-Themen 12
C Methode Grouping mit Werten ausgeben Java Basics - Anfänger-Themen 2
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
J Koordinaten per Schleife ausgeben Java Basics - Anfänger-Themen 6
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
H Eingegebene Zahlen mit Array ausgeben Java Basics - Anfänger-Themen 18
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
C Erste Schritte Muster ausgeben in der Konsole - großes V Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben