Java eigne Klasse (Bücher ausleihen)?

Hi, also ich soll eine Klasse erstellen nach folgenden Kriterien:

Erstmal sry für den vielen Text, wollte nicht , dass durch das Zusammenfassen mögliche wichtige Informationen verloren gehen ;)

Nun sieht mein Ansatz bis jetzt so aus:

public class Book {
    private String author;
    private String title;
    private LocalDate returnDate;
    private String status;
    public Book(String author, String title, String Status) throws IllegalArgumentException{
        setAuthor(author);
        setTitle(title);
        setReturnDate(returnDate);
        setStatus(status);
    }
    private static boolean checkAuthor(String author){
        return (author.matches("[a-zA-ZäÄöÖüÜß ]") && author.length() >= 2);
    }
    private static boolean checkTitle(String title){
        return (title.length() >= 1 && title.length() < 10);
    }
    public static boolean checkReturnDate(LocalDate returnDate){
        return (  );
    }
    public static boolean checkStatus(String status){
        return (status.equals("rent") || status.equals("not rent"));
    }
    public final void setAuthor(String author) throws IllegalArgumentException{
        if(!checkAuthor(author)){
            throw new IllegalArgumentException("author not valid: "+ author);
        }
        this.author = author;
    }
    public final void setTitle(String title) throws IllegalArgumentException{
        if(!checkTitle(title)){
            throw new IllegalArgumentException("title not valid: "+ title);
        }
        this.title = title;
    }
    private void setReturnDate(LocalDate returnDate) throws IllegalArgumentException{
        if(!checkReturnDate(returnDate)){
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy");
            throw new IllegalArgumentException("Return Date not valid: " + returnDate.format(dtf));
        }
        this.returnDate = returnDate;
    }
    private void setStatus(String status){
        if(!checkStatus(status)){
            throw new IllegalArgumentException("Status not valid:" + status);
        }
        this.status = status;
    }

Mir fehlt noch eine Check Methode für LocalDate returnDate, hier bin ich nicht so ganz weiter gekommen.

Nun war meine Idee eine Unterklasse zu erstellen die von der Klasse Book erbt. In dieser soll dann der ganze Vorgang mit Ausleihen usw geschehen . Macht dies so Sinn?

Sollte ich dann returnDate erst in dieser erstellen?

Bild zu Frage
programmieren, Java, Informatik
[JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf?

Wenn ich einen IntegerSpinner leer lasse und das Feld verlasse, bekomme ich eine NullPointerException, da logischer Weise nichts im Spinner steht.

Ich möchte den Spinner so einstellen, dass er mindestens eine Zahl beinhalten muss und maximal zweistellig sein darf. Ich meine damit nicht den Mindest- oder Maximalwert. Beispiel:

""    - leer;                 so ists falsch
"1"   - nicht leer;           so ists richtig
"11"  - nicht leer;           so ists richtig
"111" - mehr als zwei Zahlen; so ists falsch

Ich hatte schon mal sehr lange dieses Problem.

Nun möchte ich entweder auch eine eigene Fehlermeldung für diese NullPointerException haben (um z. B. .requestFocus() zu machen) oder einfach die Eingaben blockieren, wenn es, wie oben beschrieben, falsch gemacht wurde.

Mit regex kann ich schon mal einstellen, dass der Spinner eine rote Farbe bekommt (als Hinweis), wenn ein non-Integer eingegeben wurde oder zu wenige bzw. zu viele Zahlen eingegeben wurden:

if (!options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d+$") || !options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d.{0,2}$"))
    options_Spinner_StartInterval_seconds.setStyle("-fx-focus-color: #f00;");

Wenn ich aber die Anzahl der Zahlen im Spinner überprüfe, kann ich kein

spinner.requestFocus();

machen - ich kann den Spinner trotzdem verlassen.

Computer, programmieren, Java, JavaFX, Regulärer Ausdruck
Binäre Suchbäume mit Algorithmus erweitern?

Hallo liebe Community, ich will einen Algorithmus schreiben, welcher einen binären Suchbaum, mit paarweise verschiedenen Schlüsseln, automatisch erweitert. Stellen wir uns vor wir haben einen Suchbaum, diesen übergeben wir dem Algorithmus und geben ihm dem Namen T. Der Algorithmus hängt an jedes Blatt von T neue Blätter an (so viele wie möglich). Hier ein kleines Beispiel:

wird zu

Ich habe dann erstmal angefangen drauf los zu programmieren und habe auch ein bisschen was hinbekommen. Aber bei mir ist das Problem, dass wenn der Baum größer wird, dass dann kein korrekter Suchbaum mehr rauskommt. Erst habe ich einen Algorithmus geschrieben der für Bäume der Höhe 2 funktioniert, dann für die Höhe 3. Dann habe ich bemerkt, dass das aber nicht für die Höhe 4 funktioniert und dann habe ich mich gefragt ob meine Grundidee vielleicht falsch war.

Meine Idee war ansich folgende: Erstmal habe ich triviale Bäume der Höhe 0 und 1 abgedeckt. Dann kommen wir zum richtigen Algorithmus (erstmal für einen Baum mit der Höhe zwei): Man schaut sich jeden Knoten rekursiv an. Wenn das linke Kind und das rechte Kind vom Knoten beide NULL sind, dann ist der Knoten ein Blatt, nennen wir dieses Blatt y.

Dann gibt es vier Fälle für das Blatt y:

  • Das Blatt kann ein linkes Kind im linken Teilbaum sein: Dann muss der Schlüssel des linken Kindes kleiner sein, als der Schlüssel von y. Der Schlüssel vom rechten Blatt muss größer sein als der Schlüssel von y aber kleiner als der Vaterknoten von y.
  • Das Blatt kann ein rechtes Kind im linken Teilbaum sein: Dann muss der Schlüssel des linken Kindes kleiner sein, als der Schlüssel von y, aber größer sein als der Vaterknoten von y. Der Schlüssel vom rechten Kind muss größer sein als der Schlüssel von y, aber kleiner als die Wurzel vom Baum.
  • Das Blatt kann ein linkes Kind im rechten Teilbaum sein: Dann muss der Schlüssel des linken Kindes kleiner sein, als der Schlüssel von y aber größer als die Wurzel vom Baum. Der Schlüssel vom rechten Kind muss größer sein als der Schlüssel von y, aber kleiner sein als der Vaterknoten von y.
  • Das Blattt kann ein rechtes Kind im rechten Teilbaum sein: Dann muss der Schlüssel des linken Kindes kleiner sein als der Schlüssel von y, aber größer als die Wurzel des Baums. Der Schlüssel des rechten Kindes muss größer sein, als der Schlüssel von y.

Mit diesen Bedingungen, kann man dann einen Algorithmus schreiben, der funktioniert. Aber halt nur für Bäume der Höhe 2. Bei einem Baum der Höhe drei hat das dann nicht mehr funktioniert, weil es sozusagen erstmal einen linken und einen rechten Teilbaum gibt und dann davon nochmal jeweils einen linken und rechten. Meine Idee war dann einfach ob, man sich in einem rechten Teilbaum befindet oder in einem linken, aber das hat nicht geklappt. Vielleicht kann mir ja jemand eine Grundidee geben, weil meine Idee anscheinend nicht richtig funktioniert. Das implementieren mache ich selber.

Bild zu Frage
PC, Computer, Mathematik, programmieren, Java, Informatik, Algorithmus
Ich habe die java version gekauft hab sogar so ein link bekommen wo man sich java allg. Runterläd,hab alles getan jedoch funktioniert es immernoch nicht,warum?

Also ich hab mir auf meinen laptop grad auf der website von Minecraft die java edition gekauft, hab dann nochmal die antworten von meiner letzten frage gelesen und da gab es eine Antwort das ich mir erstamal java allg. Herunterladen soll sonst funktioniert’s nicht,hab es auch getan.Nachdem alles heruntergeladen war und Minecraft sogar auf dem home Bildschirm war konnte ich in Minecraft gehen,bin ich auch.Man kann da “singleplayer” “multiplayer” usw auswählen.Ich hab singleplayer genommen,hab eine neue welt erstellt und nichts wirklich nichts geändert,nur die Welt benannt und das war’s auch,so dann habe ich sie geöffnet und es kam sie ganz normale “landschaft” raus,also die Blätter von denn. Bäumen haben sich nicht bewegt,das Wasser war auch normal,also blau und ebenfalls nicht in Bewegung.

Dann hab ich eine neue welt erstellt,war aber vorher in den Einstellungen und habe da in Grafik “fabelhaft!” Ausgewählt.Dann bin ich in eine neue welt gegangen,nur dass ich diesmal kreativ modus angemacht habe und wieder war es so wie in der ersten welt..

Was hab ich falsch gemacht? Weil eigentlich wollte ich ja nur diese “landschaft” (ich glaube das nennt man seed?) dasss auch Luca(laserluca,concrafter) hat auch spielen.so jetzt bin ig ghost schon etwas enttäuscht.

Entschuldigung das,der text so lang ist,vielen vielen dank im voraus!!

(PS:in der ersten weltv hat es unglaublich gehangen und in der zweiten etwas weniger aber trotzdem immernoch etwas)

Computer, Java, Minecraft, Spiele und Gaming
Android App löscht Session automatisch bei onDestroy?

Ich habe eine App, wo man sich anmelden muss.

Die SessionID wird in der Login Activity empfangen und gespeichert. Wenn ich auf einer anderen Activity bin, hole ich die SessionID aus den ShaPref und hänge sie an den Header. Dann erhalte ich einen Response. Alles funktioniert einwandfrei.

Aber sobald ich die App schließe und den Login überspringe, dann wird ja die SessionID wieder aus den ShaPref geholt und an den Header gehängt.

Die SessionID ist weiterhin vorhanden! Dies prüfe ich anhand des Toast und Logs.

Aber ich erhalte den Response, dass ich ausgeloggt sei. Und die Session ist komplett leer.

Meine Vermutung ist:

Das die SessionID nur der Ort ist, wo die Datei mit den Werten gespeichert ist. Also das ich die SessionID an den Header hänge und dann weiß die Seite, welche Datei benutzt werden soll. Aber wenn man aus der App herausgeht, löscht Android automatisch diese Datei. Doch die SessionID-Adresse bleibt bestehen.

Fragen:

  • Wie kann ich die App schließen, ohne dass Android die Datei löscht?
  • Wo wird die Session auf dem Handy gespeichert? Ich kann es ja am PC einsehen.
  • Wie kann ich verhindern, dass Androids onDestroy etc. die Datei löscht?

Und wie kann ich dafür sorgen, dass Android bei onDestroy etc. die Datei löscht?

Wenn ich angemeldet sein möchte und ich herausgehe und wieder rein, bleibt die SessionID. Aber auf der Webseite ist sie leer. Aber wenn ich nicht angemeldet sein möchte, dann wird die ShaPref gelöscht und dann soll auch die Datei gelöscht werden.

Ich hoffe, ihr habt eine Lösung, wie man die automatische Löschung von dieser Datei bei Verlassen der App verhindert.

Ich danke euch im Voraus.

App, programmieren, Java, Android, session, Speicherort, Android Studio
Weiß jemand, wie ich die lock und conditions in java hier zu programmieren habe?

Hi, ich beschäftige mich zurzeit mit lock und conditions.

public class LockedDataObject extends DataObject {


    /** Anzahl aktueller Leser */
    int noReaders;


    /** Wahr, wenn Schreiber momentan wartend oder schreibend */
    boolean writer;


    /**
     * Condition-Variable zum Schlafenlegen von bzw. Aufwecken des Schreibers
     */
    Condition condWrite;


    /** Condition-Variable zum Schlafenlegen bzw. Aufwecken der Leser */
    Condition condRead;


    /**
     * Sperre, um alle oberen Variablen zu schützen. Bevor auf eine der
     * Variablen zugeriffen wird, muss ggf. diese Sperre erworben werden. Der
     * Erwerb der Sperre soll *nur dann* erfolgen, wenn es für die korrekte
     * Ausführung unbedingt notwendig ist. Das ist bei einem ändernden Zugriff
     * nur dann der Fall, wenn andere Threads die entsprechende Variable
     * zeitgleich lesen oder schreiben können. Bei einem lesenden Zugriff soll
     * die Sperre nicht erworben werden, wenn andere Threads zeitgleich nur
     * lesend, aber nicht schreibend, auf die entsprechende Variable zugreifen
     * können.
     */
    ReentrantLock lock;


    public LockedDataObject() {
        this.lock = new ReentrantLock();
        this.condRead = lock.newCondition();
        this.condWrite = lock.newCondition();
        this.noReaders = 0;
        this.writer = false;
    }


    public int sum() {
        // Beachten Sie durchgängig die korrekte Verwendung der Sperrvariable
        // "lock". Erwerben Sie die Sperre nur, falls unbedingt notwendig.


        // 1. Solange ein Schreiber wartet oder schreibt, schlafenlegen.


        // 2. Anzahl der Leser um 1 erhöhen.


        // 3. Summe bilden
        int sum = super.sum();


        // 4. Anzahl der Leser erniedrigen und ggf. Schreiber aufwecken.


        // 5. Summe zurueckgeben
        return sum;
    }


    public void randomSwap() {
        // Beachten Sie durchgängig die korrekte Verwendung der Sperrvariable
        // "lock". Erwerben Sie die Sperre nur, falls unbedingt notwendig.


        // 1. Anzeigen, dass ein Schreiber wartet.


        // 2. Schlafenlegen, solange noch mindestens ein Leser aktiv


        // 3. Elemente vertauschen
        super.randomSwap();


        // 4. Anzeigen, dass kein Schreiber mehr wartet/schreibt und
        // ggf. Leser aufwecken.
    }
}




Diese Aufgabe haben wir als Übung erhalten, der Dozent meinte, durch die Kommentare, sei das eine 5 Minuten Aufgabe, damit können wir mal üben.

Es sei so einfach, dass keine Lösungen nötig seien..., da ja alles kommentiert sei.

Die Aufgaben stehen bei den beiden Methoden, also was genau man zu tun hat...

Wie wprde man das lösen? Könnte das jemand kurz tun, damit ich mal sehe, wie man hier vorgeht, ich lerne mehr beim sehen einer korrekten Lösung, wenn ich ein Thema neu lerne.

Ich konnte mir zu allem was denken, außer zu: "    // 1. Anzeigen, dass ein Schreiber wartet." Wie soll man das zeigen?

Computer, Schule, programmieren, Java, Informatik
wie könnte ich diesen Java Code kürzer/besser machen?

Hangman in Java

Wie könnte man so einen Code kürzer machen ?

public class hangiman {
    public static void main(String[] args) {
        System.out.println("Starting game");

        String notUsed = "abcdefghijklmnopqrstuvwxyz";

        String[] words = new String[]{"computer", "mouse", "screen", "display", "language"};

        String randomWord = words[(int) (Math.random() * words.length)];

        System.out.println("The word has " + randomWord.length() + " letters.");

        char[] letters = new char[randomWord.length()];

        Arrays.fill(letters, '.');
        int lives = 3;

        Scanner scanner = new Scanner(System.in);

        while (lives > 0) {
            System.out.print("Lives: ");

            for (int i = 0; i < lives; i++) {
                System.out.print("♥");
            }
            System.out.println();

            System.out.println("Input: ");

            String input = scanner.nextLine();

            char letter = input.charAt(0);


            boolean isGuessCorrect = false;
            for (int i = 0; i < randomWord.length(); i++) {
                char l = randomWord.charAt(i);

                if (l == letter) {
                    letters[i] = l;
                    isGuessCorrect = true;
                }
            }
            if (!isGuessCorrect) {
                lives = lives - 1;
            }
            boolean isGameFinished = true;

            System.out.print("Word: ");


            for (char c : letters) {
                if (c == '.') {
                    isGameFinished = false;
                }
                System.out.print(c);
            }
            System.out.println();

            notUsed = notUsed.replace(letter, '.');
            System.out.println("Not used " + notUsed);

            System.out.println("----------------------------------");

            if (isGameFinished) {
                System.out.println("You won!");
                break;
            }
        }
        if (lives == 0) {
            System.out.println("You lost! The word was: " + randomWord);
        }
        System.out.println("Exiting game");
    }
}

Computer, programmieren, Java, Informatik
Spigot Tablist wird nicht richtig gesetzt?

Ich habe langsam keine Ahnung mehr was ich noch tun soll.

package game.squid.utils;

import org.bukkit.Bukkit;

import org.bukkit.ChatColor;

import org.bukkit.entity.Player;

import org.bukkit.scoreboard.Scoreboard;

import squid.game.games.BlockGame;

public class ScoreboardManager{

public static void registerScoreboard(Player p) {

for(Player all : Bukkit.getOnlinePlayers()) {

Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();

all.sendMessage("Debug1");

org.bukkit.scoreboard.Team teamBlue = board.registerNewTeam("TeamBlue");

org.bukkit.scoreboard.Team teamRed = board.registerNewTeam("TeamRed");

org.bukkit.scoreboard.Team teamYellow = board.registerNewTeam("TeamYellow");

org.bukkit.scoreboard.Team teamGreen = board.registerNewTeam("TeamGreen");

all.sendMessage("Debug3");

teamBlue.setPrefix(ChatColor.AQUA.toString() + "§bBLUE ");

teamRed.setPrefix(ChatColor.RED.toString() + "§cRED ");

teamYellow.setPrefix(ChatColor.YELLOW.toString() + "§eYELLOW ");

teamGreen.setPrefix(ChatColor.GREEN.toString() + "§aGREEN ");

all.sendMessage("Debug4");

all.setScoreboard(board);

if(Team.getTeam(p) == BlockGame.blueTeam) {

teamBlue.addEntry(p.getName());

all.sendMessage("Debug5");

continue;

}

if(Team.getTeam(p) == BlockGame.redTeam) {

teamRed.addEntry(p.getName());

all.sendMessage("Debug6");

continue;

if(Team.getTeam(p) == BlockGame.yellowTeam) {

teamYellow.addEntry(p.getName());

all.sendMessage("Debug7");

continue;

}

if(Team.getTeam(p) == BlockGame.greenTeam) {

teamGreen.addEntry(p.getName());

all.sendMessage("Debug8");

continue;

}

}

}

}

Bild zu Frage
programmieren, Java, Minecraft, Minecraft Server, Plug-in, Spigot

Meistgelesene Fragen zum Thema Java