Foros del Web » Programación para mayores de 30 ;) » Java »

error de un novato

Estas en el tema de error de un novato en el foro de Java en Foros del Web. Hola a todos: Estoy empezando con esto de JAVA y me he creado este programita para probar el tema de hacer clases: ------------------------------------------------------------------- import java.io.*; ...
  #1 (permalink)  
Antiguo 12/02/2014, 04:51
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 1 mes
Puntos: 2
error de un novato

Hola a todos:

Estoy empezando con esto de JAVA y me he creado este programita para probar el tema de hacer clases:
-------------------------------------------------------------------
import java.io.*;

public class CadenasCaracteres {

public class LaCadena{
String contenido;
char contenidoInverso[];
int longitudContenido;

//constructor de la clase
public LaCadena(String miCadena)
{
this.cambiarContenido(miCadena);
}
//fin del constructor

//método para cambiar los atibutos.
void cambiarContenido(String miCadena)
{
//int longitudContenido;
int posicion=0, i=0;

//this.longitudCadena=0;
this.contenido=miCadena;

longitudContenido=this.contenido.length();
for(i=longitudContenido;i>=0;--i)
{
this.contenidoInverso[posicion++]=this.contenido.charAt(i);
}
}
//fin metodo cambiar atributos

//metodo para mostrar los atributos
void mostrarAtributos()
{
System.out.println("EL CONTENIDO DEL OBJETO ES: " + this.contenido);
System.out.println("LA LONGITUD DEL CONTENIDO ES: " + this.longitudContenido);
System.out.println("EL CONTENIDO AL REVES ES: " + this.contenidoInverso.toString());
}
}


public static void main(String[] args) {
// TODO Apéndice de método generado automáticamente

LaCadena miFrase = new LaCadena("Esta es la frase");

miFrase.mostrarAtributos();

}

}
------------------------------------------------------------------

Cuando lo ejecuto, me da el siguiente error en la consola y que no se que me quiere decir:

-----------------------------------------------------------
Exception in thread "main" java.lang.Error: Problema de compilación no resuelto:
No hay ninguna instancia delimitadora del tipo CadenasCaracteres que sea accesible. Hay que calificar la asignación con una instancia delimitadora de tipo CadenasCaracteres (por ejemplo, x.new A(), siendo x una instancia de CadenasCaracteres).

at CadenasCaracteres.main(CadenasCaracteres.java:48)
-------------------------------------------------------------------

¿Alguien me puede decir que me quiere decir este error?. Gracias.
  #2 (permalink)  
Antiguo 12/02/2014, 05:33
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: error de un novato

Has creado una clase dentro de otra clase, aunque eso se puede hacer, no si estás empezando y no como pretendes usarla.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 12/02/2014, 09:05
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: error de un novato

Gracias Xerelo por tu respuesta. ¿Me podrçías decir cómo tengo que hacerlo?. He modificado el código y he hecho esto:

1º: creo un fichero llamado "CadenasCaracteres.java" con el código


import java.io.*;

public class CadenasCaracteres {




public static void main(String[] args) throws IOException{
// TODO Apéndice de método generado automáticamente


LaCadena miFrase = new LaCadena("Esta es la frase");


miFrase.mostrarAtributos();

}

}

2º: creo otro fichero en el proyecto llamado "LaCadena.java" con el código

public class LaCadena{
String contenido;
String contenidoInverso;
int longitudContenido;

//constructor de la clase
public LaCadena(String miCadena)
{
this.cambiarContenido(miCadena);
}
//fin del constructor

//método para cambiar los atibutos.
void cambiarContenido(String miCadena)
{
//int longitudContenido;
int posicion=0, i=0;

//this.longitudCadena=0;
this.contenido=miCadena;

this.longitudContenido=this.contenido.length();
this.contenidoInverso="";
for(i=longitudContenido;i>=0;--i)
{
this.contenidoInverso=this.contenidoInverso + this.contenido.charAt(i);
}
}
//fin metodo cambiar atributos

//metodo para mostrar los atributos
void mostrarAtributos()
{
System.out.println("EL CONTENIDO DEL OBJETO ES: " + this.contenido);
System.out.println("LA LONGITUD DEL CONTENIDO ES: " + this.longitudContenido);
System.out.println("EL CONTENIDO AL REVES ES: " + this.contenidoInverso.toString());
}
}

3º: El programa no funciona, la salida que tengo por consola es:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8
at java.lang.String.charAt(Unknown Source)
at LaCadena.cambiarContenido(LaCadena.java:29)
at LaCadena.<init>(LaCadena.java:12)
at CadenasCaracteres.main(CadenasCaracteres.java:15)



Gracias de nuevo por tu ayuda.
  #4 (permalink)  
Antiguo 12/02/2014, 10:43
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: error de un novato

Te lo está diciendo el mensaje de error.

Dónde
Cita:
LaCadena.cambiarContenido(LaCadena.java:29)
Por qué
Cita:
java.lang.StringIndexOutOfBoundsException: String index out of range: 8
Sin saber cuál es la línea 29 diría que el problema lo tienes aquí

Cita:
for(i=longitudContenido;i>=0;--i)
{
this.contenidoInverso=this.contenidoInverso + this.contenido.charAt(i);
}
La longitud de una cadena de 8 caracteres es 8, pero las posiciones van del 0 al 7, y tú le estás pidiendo la posición 8.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 12/02/2014, 11:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 1 mes
Puntos: 2
[RESUELTO]Respuesta: error de un novato

Muchas gracias. Hay que ver que despiste, que tenía que empezar el bucle en la posición que me da la longitud -1 y no simplemente en la longitud.

Gracias de nuevo.

Etiquetas: clase, metodo, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:13.