Ayuda en java

Buenas tardes, me puedes ayudar por favor, tengo que entregar un proyecto el lunes que viene y estoy un poco agobiado, un compañero me dejo su código, pero es muy engorroso, me gustaría sintetizarlo, hacerlo más cómodo y fácil, pero que básicamente haga lo mismo que el código que te voy a pasar, me podrías ayudar por favor, es muy importante. Muchas gracias de antemano.
import java.io.IOException;
import java.io.*;
class Nodoint {
Nodo [] siguiente;
}
class Nodo_lista{
String palabra;
Nodo_lista [] siguiente;
}
class Nodo{
char caracter;
Nodoint [] inter= new Nodoint[10];
Nodo_lista exter = new Nodo_lista();
}
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' ); }
static public int inicializarNodo(Nodo nodo, char letra) throws IOException
{          // Inicializar el nodo a insertar
nodo.exter = null;
nodo.caracter=letra;
return 0;
}
static public int insertarNodo(char letra, int repeticiones, Nodo raiz) throws IOException
{          // Inicializar el nodo a insertar
Nodo nuevoNodo = new Nodo();
if(inicializarNodo(nuevoNodo, letra)!=0){
System.out.println("Fallo al inicializar el Nodo\n");
}else{
// En caso de que sea el primer nodo a insertar.
if(raiz == null){
System.out.println("Se va a insertar el nodo raiz \n");
raiz = nuevoNodo;
}else{ // Cualquier otro nodo despues del raiz.
}
}
return repeticiones;
}
public static void main(String[] args) throws IOException{
char res;
Nodo raiz;
String frase = "";
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(input);
do {
System.out.println("Inserte una palabra y pulse ENTER");
try{ frase = reader.readLine(); }
catch(Exception e){}
System.out.println("Escribiste: " + frase + "\n");
int n[];
n = new int[27];
int longitud = frase.length();
int indice = 0;
int mayor = 0;
char letra;
do {
letra = frase.charAt(indice);
switch(letra) {
case 'a':
n[0]++;
if (mayor < 0){
mayor = 0;}
break;
case 'b':
n[1]++;
if (mayor < 1){
mayor = 1;}
break;
case 'c':
n[2]++;
if (mayor < 2){
mayor = 2;}
break;
case 'd':
n[3]++;
if (mayor < 3){
mayor = 3;}
break;
case 'e':
n[4]++;
if (mayor < 4){
mayor = 4;}
break;
case 'f':
n[5]++;
if (mayor < 5){
mayor = 5;}
break;
case 'g':
n[6]++;
if (mayor < 6){
mayor = 6;}
break;
case 'h':
n[7]++;
if (mayor < 7){
mayor = 7;}
break;
case 'i':
n[8]++;
if (mayor < 8){
mayor = 8;}
break;
case 'j':
n[9]++;
if (mayor < 9){
mayor = 9;}
break;
case 'k':
n[10]++;
if (mayor < 10){
mayor = 10;}
break;
case 'l':
n[11]++;
if (mayor < 11){
mayor = 11;}
break;
case 'm':
n[12]++;
if (mayor < 12){
mayor = 12;}
break;
case 'n':
n[13]++;
if (mayor < 13){
mayor = 13;}
break;
case '±':
n[14]++;
if (mayor < 14){
mayor = 14;}
break;
case 'o':
n[15]++;
if (mayor < 15){
mayor = 15;}
break;
case 'p':
n[16]++;
if (mayor < 16){
mayor = 16;}
break;
case 'q':
n[17]++;
if (mayor < 17){
mayor = 17;}
break;
case 'r':
n[18]++;
if (mayor < 18){
mayor = 18;}
break;
case 's':
n[19]++;
if (mayor < 19){
mayor = 19;}
break;
case 't':
n[20]++;
if (mayor < 20){
mayor = 20;}
break;
case 'u':
n[21]++;
if (mayor < 21){
mayor = 21;}
break;
case 'v':
n[22]++;
if (mayor < 22){
mayor = 22;}
break;
case 'w':
n[23]++;
if (mayor < 23){
mayor = 23;}
break;
case 'x':
n[24]++;
if (mayor < 24){
mayor = 24;}
break;
case 'y':
n[25]++;
if (mayor < 25){
mayor = 25;}
break;
case 'z':
n[26]++;
if (mayor < 26){
mayor = 26;}
break;
default:
break;
}
indice++;
}while(indice < longitud);
System.out.println("La ultima letra es la n·mero: " + mayor);
for (indice=0;indice <= mayor;indice++){
if(insertarNodo(indice,n[indice],raiz)!=0){
System.out.println("Se inserto el caracter "+indice+" con: "+n[indice]+" repeticiones");
}
if(n[indice]!=0){
System.out.println("Cantidad de letras "+indice+" en la frase es:"+n[indice]);}
}
//exter[mayor] = mayor;
System.out.println("?Quiere insertar otra palabra? S/N");
res = getChar();
}while(res != ('n'));
}
}

1 respuesta

Respuesta
1
Te paso el código que ya le pasé a otro usuario llamado cooltan (creo que es el colega del que te estás copiando):
Import java. Io.BufferedReader; 
Import java. Io.InputStreamReader; 
Import java. Util.Collections; 
Import java. Util.Enumeration; 
Import java. Util.Hashtable; 
Import java. Util.List; 
public class ContadorPalabras{ 
public static void main(String[] args){ 
try{ 
System.out.println("Escriba una palabra y pulse ENTER: \n"); 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
   String palabra = br.readLine(); 
   palabra = palabra.toUpperCase(); 
   Hashtable<Character, Integer> hash = new Hashtable<Character, Integer>(); 
   char[] caracteres = palabra.toCharArray(); 
   int valor; 
   for (char c:caracteres){ 
   if (hash.containsKey(c)){ 
   valor = hash.get(c); 
   valor++; 
   hash.put(c, valor); 
   } 
   else{ 
   hash.put(c, 1); 
   } 
   } 
   Enumeration<Character> keys = hash.keys(); 
   List<Character> sortedKeys = Collections.list(keys); 
   Collections.sort(sortedKeys); 
   char c; 
   for (char ch:sortedKeys){ 
   valor = hash.get(ch); 
   System.out.println(ch + "=" + valor); 
   } 
System.exit(0);  
}catch (Exception e){ 
e.printStackTrace(); 
System.exit(-1); 


}

Este método es más óptimo y más elegante para contabilizar los caracteres de una palabra. Solo queda meter el código para insertar el nodo por cada elemento del hash que queda al final. Cooltan no me hizo demasiado caso y siguió a su bola. Allá el.
Saludos y suerte, makitomak (o cooltan, quien sabe...):
Carlos.
Hola Carlos, gracias por contestar, coltan no se quien es, pero el se pierde tu sabiduría, una cosa, ¿sabrías hacer esa parte de meter el código para insertar los nodos?, yo tengo algo pero no se si sera así, te lo pongo por aquí.
public class Arbol {
    String palabra;
    Nodo vec[10];
    Nodoinfor vecinf[10];
    char letras[];
    public static void main(String[] args) throws IOException {
    }
    class Nodo{
        String  frase;
        Nodo  siguiente;
        public Nodo(String f){
            frase = f;
            siguiente = null;
        }
    }
    class Nodoinfor{
        int  frecu;
        Nodoinfor siguiente;
        public Nodoinfor(int n){
            frecu = n;
            siguiente = null;
        }
    }
}
No se seguir
Yo creo que tu colega ya te pasó el método de insertar nodos. No me voy a meter a depurarlo, primero porque no entiendo lo que tiene que hacer exactamente, por lo que no se si el código que te ha pasado está bien o mal, y segundo porque me supondría demasiado tiempo, del cual ahora no ando muy sobrado.
Te recomiendo que intentes hacer el ejercicio tu solo, con las indicaciones que te he dado y el código de tu colega. Si tienes alguna duda puntual, aquí estoy para resolverla.
Hola, tengo un problema cuando ejecuto el código me salta un error es el siguiente:
Exception in thread "main" java.lang.NullPointerException
Es el final del código en el for cuando hace el recorrido
Este es el código entero. Gracias es solo una dudilla, yo no lo veo a lo mejor tu si
import java.io.*;
class NInternal {
    Node[] next;
}
class NList {
    String w;
    NList[] next;
}
class Node {
    char c;
    NInternal[] i = new NInternal[10];
    NList e = new NList();
}
public class Main {
    static public char getChar() throws IOException {
        char c = (char) System.in.read();
        input();
        return c;
    }
    static public void input() throws IOException {
        while ((char) System.in.read() != '\n');
    }
    static public int initNode(Node n, char l) throws IOException {
        // Inicializar el nodo a insertar
        n.e = null;
        n.c = l;
        return 0;
    }
    static public int insertNode(char l, int r, Node root) throws IOException {
        // Inicializar el nodo a insertar
        Node newNode = new Node();
        if (initNode(newNode, l) != 0) {
            System.out.println("Fallo al inicializar el Nodo\n");
        } else {
            // En caso de que sea el primer nodo a insertar.
            if (root == null) {
                System.out.println("Se va a insertar el nodo raiz \n");
                root = newNode;
            } else { // Cualquier otro nodo despues del raiz.
            }
        }
        return r;
    }
    public static void main(String[] args) throws IOException {
        char res;
        Node root = null;
        String s = "";
        InputStreamReader input = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(input);
        do {
            System.out.println("Inserte una palabra y pulse ENTER");
            try {
                s = reader.readLine();
                s = s.toLowerCase();
            } catch (Exception e) {
            }
            System.out.println("Escribiste: " + s + "\n");
            int n[] = null;
            int tam = s.length();
            int index = 0;
            int max = 0;
            char l;
            l = s.charAt(index);
        char letras[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        for (int i=0; i<letras.length; i++){
            max= contar(s,letras);
            if (max>0) {
                    System.out.println("El texto contiene " + max + " veces la letra " + letras);
                }
            if (max>index){
                l=letras;
                //index=max;
                max=index; // Nos dice cual es la letra mas alta del alfabeto
            }
        }
                    System.out.println("La letra mas alta del alfabeto  es la "+l+"");
            for (index = 0; index <= max; index++) {
                if (insertNode((char)n[index],index, root) != 0) {
                    System.out.println("Se inserto el caracter " + index + " con: " + n[index] + " repeticiones");
                }
                if (n[index] != 0) {
                    System.out.println("Cantidad de letras " + index + " en la frase es:" + n[index]);
                }
            }
            //exter[mayor] = mayor;
            System.out.println("Desea insertar otra palabra? S/N");
            res = getChar();
        } while (res != ('n'));
}
    private static int contar(String s, char c) {
        return s.replaceAll("[^"+c+"]","").length();
    }
    }
Usa Eclipse y debugea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas