Java - Entrada: frase, salida: frasesinespacios

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

Entrada: frase, salida: frasesinespacios

Publicado por Antonio (7 intervenciones) el 26/06/2020 17:00:13
Buenos días, me pueden ayudar? me sale un error en este ejercicio básico, consiste en ingresar una frase y como salida imprima esa frase pero sin espacios en blanco, lo estoy haciendo en eclipse, el código es:

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
30
31
32
33
34
35
36
37
38
39
40
import java.util.Scanner;
 
public class Principal {
 
	public static void main(String[] args) {
		String f1,f2;
		Scanner teclado=new Scanner(System.in);
 
		System.out.print("Escriba la frase: ");
		f1=teclado.nextLine();
 
		f2=Rpta(f1);
 
		System.out.println("frase2: "+f2);
	}
 
	private static String Rpta(String Frase) {
		String f="",t;
		int i,p;
 
		p=0;
		Frase=Frase.trim();
		for(i=0;i<Frase.length();i++) {
			if(i<Frase.length()) {
				if(Frase.substring(i,i+1).equals(" ")) {
					t=Frase.substring(p,i);
					p=i+1;
					f=f+t;
				}
 
			}
 
 
		}
		t=Frase.substring(p,1);
		f=f+t;
		return f;
	}
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Franklin
Val: 646
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Entrada: frase, salida: frasesinespacios

Publicado por Franklin (176 intervenciones) el 26/06/2020 17:05:16
String maneja un metodo llamado replace(valorBuscado,valorNuevo);


f2 = f1.replace(" ", ""); con esto ya eliminas todos los espacios y no requieres del metodo Rpta
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: 19
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

Entrada: frase, salida: frasesinespacios

Publicado por Antonio (7 intervenciones) el 26/06/2020 20:00:46
Gracias, siii. incluso se utlizaría menos código... Pero sigo teniendo mi duda porque falla el programa que mostré, creo que es por el i+1 del substring, pero para eso esta el FOR para que no utilice números fuera del rango length()....

Saludos
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 Kabuto
Val: 2.717
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Entrada: frase, salida: frasesinespacios

Publicado por Kabuto (706 intervenciones) el 27/06/2020 11:36:59
Bueno, el FOR no asegura ningún límite.

En la declaración del FOR le dices que quieres que i vaya de 0 hasta Frase.length().
Vale.

Pero si luego dentro del bucle alteras el valor de i, el FOR no se va a encargar de "vigilar" que eso no ocurra.

Y sí, cuando haces (i +1), en la última iteración del bucle haces que la i sobrepase la condición del bucle FOR y que se intente acceder a un indice dentro del String que supera sus límites.

En estos casos, cuando necesitas hacer un i+1 dentro del bucle, puedes probar a decirle al FOR que en lugar de Frase.length(), vaya hasta Frase.length() - 1
Así evitas que el indice adopte un valor fuera de rango.

1
2
3
4
5
6
7
8
9
for(i=0;i<Frase.length() - 1;i++) {
    if(i<Frase.length()) {
        if(Frase.substring(i,i+1).equals(" ")) {
            t=Frase.substring(p,i);
            p=i+1;
            f=f+t;
        }
 
    }
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: 19
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

Entrada: frase, salida: frasesinespacios

Publicado por Antonio (7 intervenciones) el 27/06/2020 16:35:51
Gracias, muy buen dato...

El programa quedó así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class Principal {
 
	public static void main(String[] args) {
		String f1,f2;
		Scanner teclado=new Scanner(System.in);
 
		System.out.print("Escriba la frase: ");
		f1=teclado.nextLine();
 
		f2=Rpta(f1);
 
		System.out.println("frase2: "+f2);
	}
 
	private static String Rpta(String Frase) {
		String f;
		f=(Frase.replace(" ",""));
 
		return f;
	}
 
}

Saludos
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 Franklin
Val: 646
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Entrada: frase, salida: frasesinespacios

Publicado por Franklin (176 intervenciones) el 27/06/2020 18:37:57
hmmm no veo necesario implementar el metodo cuando solo aplicas el replace, pero en ese caso podrías resumirlo un poco mas


1
2
3
private static String Rpta(String Frase) {
	return Frase.replace(" ",""));
}

no necesariamente necesitas definir un String para ello, como el metodo replace en si mismo retorna el String sin los espacios puedes usarlo de esa manera, resumiendo la definición y asignación, solo retorna el resultado.
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