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 zum Beitrag
PC, Computer, Mathematik, programmieren, Java, Informatik, Algorithmus
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
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 zum Beitrag
programmieren, Java, Minecraft, Minecraft Server, Plug-in, Spigot

Meistgelesene Beiträge zum Thema Java