-3

Im making a presentation as homework about it, there's barely any information of it, i been working with chatgpt and some youtube video, my question is, whenever i write same numbers, for example, changing the 1 next to a 3, for a 3, so this way 3 and 3 compete, the program ends up leaving a 0 in my finish array, i also need help with any addition you could add to it, or correction. This is my code:


import java.util.Scanner;

class Jugador {

    int valor;

    public Jugador(int valor) {
        this.valor = valor;
    }

    public int getValor() {
        return valor;
    }
}

class Nodo {

    Jugador jugador;
    Nodo izquierda;
    Nodo derecha;

    public Nodo(Jugador jugador) {
        this.jugador = jugador;
    }

    public Nodo(Nodo izquierda, Nodo derecha) {
        this.izquierda = izquierda;
        this.derecha = derecha;
    }
}

class ArbolTorneo {

    Nodo raiz;

    public ArbolTorneo(Jugador[] jugadores) {
        raiz = construirArbol(jugadores, 0, jugadores.length - 1);
    }

    private Nodo construirArbol(Jugador[] jugadores, int inicio, int fin) {
        if (inicio == fin) {
            return new Nodo(jugadores[inicio]);
        }
        int mitad = (inicio + fin) / 2;
        Nodo izquierda = construirArbol(jugadores, inicio, mitad);
        Nodo derecha = construirArbol(jugadores, mitad + 1, fin);
        Nodo padre = new Nodo(izquierda, derecha);
        padre.jugador = seleccionarGanador(izquierda.jugador, derecha.jugador);
        return padre;
    }

    private Jugador seleccionarGanador(Jugador a, Jugador b) {
        return (a.getValor() <= b.getValor()) ? a : b;
    }

    public Jugador obtenerCampeon() {
        return raiz.jugador;
    }

    public void eliminarCampeon() {
        int valorCampeon = raiz.jugador.getValor();
        reemplazarJugador(raiz, valorCampeon);
        recalcularGanadores(raiz);
    }

    private void reemplazarJugador(Nodo nodo, int valorBuscado) {
        if (nodo.izquierda == null && nodo.derecha == null) {
            if (nodo.jugador.getValor() == valorBuscado) {
                nodo.jugador = new Jugador(Integer.MAX_VALUE);
            }
            return;
        }
        reemplazarJugador(nodo.izquierda, valorBuscado);
        reemplazarJugador(nodo.derecha, valorBuscado);
    }

    private void recalcularGanadores(Nodo nodo) {
        if (nodo.izquierda == null) {
            return;
        }
        recalcularGanadores(nodo.izquierda);
        recalcularGanadores(nodo.derecha);
        nodo.jugador = seleccionarGanador(nodo.izquierda.jugador, nodo.derecha.jugador);
    }
}

class TournamentSort {

    public int[] ordenar(int[] arreglo) {
        Scanner leer = new Scanner(System.in);
        Jugador[] jugadores = new Jugador[arreglo.length];
        for (int i = 0; i < arreglo.length; i++) {
            jugadores[i] = new Jugador(arreglo[i]);
        }
        ArbolTorneo torneo = new ArbolTorneo(jugadores);
        int[] salida = new int[arreglo.length];
        System.out.println("Iniciando Tournament Sort...");
        System.out.println("Presiona ENTER para comenzar.");
        leer.nextLine();
        for (int i = 0; i < arreglo.length; i++) {
            System.out.println("\n===============================");
            System.out.println("Ronda " + (i + 1));
            Jugador campeon = torneo.obtenerCampeon();
            int valorCampeon = campeon.getValor();

            if (valorCampeon == Integer.MAX_VALUE) {
                // Ya no hay jugadores reales → rompemos el ciclo
                break;
            }

            salida[i] = valorCampeon;
            System.out.println("Campeón extraído: " + campeon.getValor());
            System.out.print("Arreglo de salida: ");
            mostrarArreglo(salida);
            torneo.eliminarCampeon();
            System.out.println("Presiona ENTER para continuar...");
            leer.nextLine();
        }
        return salida;
    }

    private void mostrarArreglo(int[] arr) {
        System.out.print("[ ");
        for (int n : arr) {
            if (n == 0) {
                System.out.print("_ ");
            } else {
                System.out.print(n + " ");
            }
        }
        System.out.println("]");
    }
}

public class Main {

    public static void main(String[] args) {
        int[] jugadores = {10, 4, 12, 9, 3, 1, 7, 8};
        TournamentSort ts = new TournamentSort();
        int[] ordenado = ts.ordenar(jugadores);
        System.out.println("\n===============================");
        System.out.println("Resultado final ordenado:");
        for (int n : ordenado) {
            System.out.print(n + " ");
        }
    }
}
New contributor
AV_Dev is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
5
  • 1
    Hello and Welcome to Stack Overflow! Please see How to debug small programs. Commented Nov 26 at 20:54
  • I'll give you a hint: Take a close look at the number of replacements reemplazarJugador(...) does in the broken case for a single invocation of eliminarCampeon(). Commented Nov 26 at 21:26
  • 1
    I would say this is not enough code to help you out Commented Nov 26 at 22:31
  • Please read How to Ask. Commented 2 days ago
  • my advice: stop using chatgpt, stop looking at youtube videos. Since this is homework, your course notes should contain sufficient information to start with. Also, don't put all your code in a single file. It'll just make it more difficult than it needs to be to maintain. Commented 2 days ago

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.