Java - Mezclar cadenas

 
Vista:
sin imagen de perfil
Val: 7
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Mezclar cadenas

Publicado por Juan (10 intervenciones) el 22/12/2020 17:28:38
Buenas a todxs:

Ante todo, gracias por la ayuda. Estoy haciendo un ejercicio y me salta constantemente la excepción java.lang.StringIndexOutOfBoundsException. El ejercicio consiste en escribir un programa en Java que:

- lea dos cadenas de caracteres por teclado de longitud al menos cinco caracteres cada una;
- genere una nueva cadena cuyo resultado va a ser la mezcla de los caracteres de las dos cadenas anteriores intercalando carácter a carácter;
- muestre por pantalla esa nueva cadena resultante.
- La cadena final debe construirse con StringBuilder.

Por otra parte, en el código no debe aparecer ningún "throws" ni debe ser necesario capturar ninguna excepción. Debo escribir correctamente tu programa para que no se "salga" de las cadenas y así evitar esas posibles excepciones.

La primera parte la tengo bien, el problema viene cuando tengo que hacer el bucle para mezclar las cadenas. Aquí mi código:

1
2
3
4
5
6
String primeraCadena, segundaCadena, terceraCadena;
StringBuilder resultado = new StringBuilder ();
 
for (int i=0; i < primeraCadena.length()+segundaCadena.length(); i++){
terceraCadena = primeraCadena.substring(i,i++) + segundaCadena.substring(i,i++) ;
System.out.print(terceraCadena);

Entiendo que el error viene porque el string que se genera tiene un tamaño mayor a los anteriores, pero es imposible para mi encontrar la solución.

Toda ayuda es bienvenida!

Juan
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Mezclar cadenas

Publicado por Rodrigo (623 intervenciones) el 22/12/2020 18:33:32
Sugiero usar 2 indices, uno por cada string y en casa vuelta copiar desde el string correspondiente, si el indice sigue siendo valido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Mezclar cadenas

Publicado por Juan (10 intervenciones) el 22/12/2020 23:24:24
Buenas de nuevo:

Ante todo muchísimas gracias por tu respuesta.

No termino de comprender muy bien lo que me dices. ¿Te refieres a algo así? Pego el código entero porque no hay manera de encontrar la solución:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
String primeraCadena, segundaCadena, combinacion;
StringBuilder resultado = new StringBuilder ();
Scanner teclado = new Scanner(System.in);
 
do {
    System.out.print("Introduce una cadena de 5 o más caracteres: " );
    primeraCadena=teclado.nextLine();
    if (primeraCadena.length() < 5){
        System.out.println("Cadena no válida.");
    }
}while (primeraCadena.length() < 5);
 
 
do {
    System.out.print("Introduce otra cadena de 5 o más caracteres: " );
    segundaCadena=teclado.nextLine();
    if (primeraCadena.length() < 5){
        System.out.println("Cadena no válida.");
    }
}while (segundaCadena.length() < 5);
 
 
for (int i=0; i < primeraCadena.length()+segundaCadena.length(); i++){
    if (primeraCadena.indexOf(i) < primeraCadena.length()) {
        primeraCadena.substring(i,i++);
    }
    if (segundaCadena.indexOf(i) < segundaCadena.length()) {
        segundaCadena.substring(i,i++);
    }

Entiendo la lógica de lo que me dices pero me sigue saltando el error y no sé a que puede deberse...

Mil gracias de nuevo, supongo que los comienzos son difíciles.

Juan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Mezclar cadenas

Publicado por Rodrigo (623 intervenciones) el 22/12/2020 23:52:42
No exactamente.
Usa 2 indices, digamos i y j.
Usa i para copiar desde uno de los strings, usa j para el otro.
Cambia la condicion del for para que se termine cuando ambos indices ya no sean validos, o sea, hayan llegado mas alla del ultimo caracter.
En cada iteracion preguntas si el indice i no ha llegado al final del primer string, y si es el caso, copias el caracter i-esimo del primer string, sino, no haces nada.
Lo mismo con j, pero usando el segundo string.
En caso que copies algo, aumentas el indice, sino copias nada, no aumentas nada.

Dado que no hay incremento siempre, talvez se vea mejor cambiar el for por un while.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Mezclar cadenas

Publicado por juan (10 intervenciones) el 23/12/2020 12:30:46
Mil gracias de nuevo por la paciencia y por tu ayuda.

Digamos que ya tengo el resultado que busco:

1
2
3
4
5
6
7
8
9
10
11
12
13
int totalCaracteres = primeraCadena.length()+segundaCadena.length();
int totalPrimeraCadena = primeraCadena.length();
int totalSegundaCadena = segundaCadena.length();
 
for (int i=0; i < totalCaracteres; i++){
    if (i < totalPrimeraCadena){
        x = primeraCadena.substring(i,i+1);
    System.out.print (x);
    }if (i < totalSegundaCadena){
        z = segundaCadena.substring(i,i+1);
    System.out.print(z);
    }
}

El problema es que no consigo el resultado usando un bucle, el método append y el método substring para ir obteniendo las diferentes subcadenas necesarias para conformar el resultado.

Además, consigo el resultado imprimiendo dentro de los bucles, pero no soy capaz de hacerlo construyendo en una instancia de la clase StringBuilder,


1
2
3
4
System.out.println();
System.out.println("RESULTADO:");
System.out.println("----------------------------");
System.out.println(AQUI DEBERÍA IR EL STRINGBUILDER, ¿NO?);

Muchas gracias de nuevo por tu labor y ayuda.


Juan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Mezclar cadenas

Publicado por juan (10 intervenciones) el 23/12/2020 14:03:49
Hola de nuevo Rodrigo:

Revisando mi código y comprobando tu mensaje acabo de dar con la tecla. Simplemente tenía que añadir el append tras el índice.

No habría podido hacerlo sin tu ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar