Error clase insertarnodo java

Hola buenas, espero que me puedas ayudar, tengo exo un proyecto pero a la hora de ejecutarlo me saltan varios fallos sobre todo en la clase insertar_Nodo y en la parte final en el aux que guarda aux.siguiente. Y quería saber si me podrías decir donde esta el fallo y cual seria su solución. Te pongo el código. Muchas Gracias de antemano
import java.io.IOException;
import java.io.*;
class Nodoint {    
    Nodo [] siguiente;
}
class Nodo_lista{
    String palabra;
    Nodo_lista [] siguiente;
}
class Letra{
    char caracter;
    int repeticiones=0;
}
class Nodo{
    Letra letra;
    Nodo [] inter = new Nodo[10];
    Nodoint [] inter2= new Nodoint[10];
    Nodo_lista exter = new Nodo_lista();
    public Nodo (Letra letra)
    {
        this.letra.caracter = letra.caracter;
        this.letra.repeticiones = letra.repeticiones;
        this.exter = null;
    }
    static public int insertarNodo(Letra nuevaletra) throws IOException
    {    // Inicializar el nodo a insertar
        if(nuevaletra.caracter < this.letra.caracter){
            this.insertarNodo(nuevaletra);
        }
        else
        {
            Nodo nuevoNodo = new Nodo(nuevaletra);
            nuevoNodo.exter = null;    
        }
        // En caso de que sea el primer nodo a insertar.
        System.out.println("Se va a insertar un nodo NO raiz \n");
        this.inter[this.letra.repeticiones] = new Nodo(nuevaletra);
        return letra.repeticiones;
    }    
}
public class Holamundo {
    static public char getChar() throws IOException
    {
        char ch = (char) System.in.read();
        input();
        return ch;
    }
    static public void input() throws IOException
    {   while ( (char) System.in.read() != '\n' );  }
    public static void main(String[] args) throws IOException{
        char res;
        Nodo root = null;
        //Nodo [] nodos;
        //nodos = new Nodo[10];
        //nodos[0]= new Nodo();
        //nodos[0].caracter = 'a';        
        String frase = "";
        InputStreamReader input = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(input);
        // read in user input
        //String frase = "ala";       
        do {
            System.out.println("Inserte una palabra y pulse ENTER");
            try{ frase = reader.readLine(); }
            catch(Exception e){}
            System.out.println("Escribiste: " + frase + "\n");
            Letra n[] = new Letra[27];       
            int longitud = frase.length();
            int indice = 0;
            int mayor = 0;
            char letra;
            char letra_mayor='a';
            do {
                letra = frase.charAt(indice);
                switch(letra) {
                    case 'a':
                        n[0].repeticiones++;
                        n[0].caracter=letra;
                        if (mayor < 0){
                            mayor = 0;letra_mayor=letra;}
                        break;
                    case 'b':
                        n[1].repeticiones++;
                        n[1].caracter=letra;
                        if (mayor < 1){
                            mayor = 1;letra_mayor=letra;}
                        break;
                    case 'c':
                        n[2].repeticiones++;
                        n[2].caracter=letra;
                        if (mayor < 2){
                            mayor = 2;letra_mayor=letra;}
              ...

1 respuesta

Respuesta
1
Te he mirado así el código por encima y he visto que en el método:
static public int insertarNodo(Letra nuevaletra) throws IOException
    {    // Inicializar el nodo a insertar
        if(nuevaletra.caracter < this.letra.caracter){
            this.insertarNodo(nuevaletra);
        }
        else
        {
            Nodo nuevoNodo = new Nodo(nuevaletra);
            nuevoNodo.exter = null;    
        }
        // En caso de que sea el primer nodo a insertar.
        System.out.println("Se va a insertar un nodo NO raiz \n");
        this.inter[this.letra.repeticiones] = new Nodo(nuevaletra);
        return letra.repeticiones;
    }    
}
Si te fijas estás llamando a insertarNodo dentro de insertarNodo. Deberías hacer el método insertarNodo definiendo lo que hace primero y luego ya lo usarás más adelante.
Me podrías poner como quedaría por favor, es muy urgente, te estaría eternamente agradecido por favor. Mil gracias por adelantado
A ver, ten en cuenta que si quieres definir un método no puedes llamar a ese mismo método dentro de si mismo, al hacerlo estarías entrando en un bucle infinito porque no dejaría de llamarse a si mismo continuamente.
Tienes que pensar que quieres hacer en ese método, ¿no entiendo bien lo que quieres hacer en insertarNodo pero en tu actual método insertarNodo la linea donde vuelves a llamar al método insertarNodo la sustituiría por lo que de verdad quieres que haga que supongo que será insertar la letra en inter o inter2 no? Bueno si no fuera insertar en esos pues donde quieras pero cambia esa linea de código y añade la letra a donde quieres y ya estaría esa parte. Luego prueba a ver si sigues teniendo problemas.
Hola, buenas gracias por responder, si básicamente lo que quiero es insertar la letra como bien has dicho, es decir ir insertando como dice el código, lo que ocurre es que no se como hacerlo, no tengo mucho conocimiento en java, por eso te pido ayuda, es que lo tengo que entregar el lunes y no se hacer eso, seria pedir mucho que me pusieras el código como quedaría por favor. Me harías ese favor!? Muchas Gracias de antemano please
Pues a ver, como ya tienes puesto en el código:
 this.inter[this.letra.repeticiones] = new Nodo(nuevaletra);
En teoría estás insertando en inter[en la posicion repeticiones] un nuevo nodo con la letra nueva letra.
Pues para insertar la letra tienes que hacer eso mismo en el array donde guardes las letras. Si fuera en inter2 sería:
inter2[posicion donde lo quieres]= new Nodo(nuevaletra); //creas un nuevo nodo con la letra y lo guardas en la posicion del array que quieres.
Si tienes que guardar la nueva letra en una lista (no en un array) entonces simplemente tienes que llamar a la lista y usar el método add:
Listanodos. Add(new Nodo(nuevaletra)); //añades a la listanodos un nuevo nodo con la nueva letra. En tu codigo no sé si es exter la lista de nodos, de ser así sería:
exter.add(new Nodo(nuevaletra));
Así es lo que se me ocurre, sino te funciona cuéntame que quieres hacer, que quieres insertar y donde y para qué porque viendo solo el código tengo algunas dudas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas