Java - Secuencia de caracteres.

 
Vista:
Imágen de perfil de Jose
Val: 13
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Secuencia de caracteres.

Publicado por Jose (6 intervenciones) el 21/11/2018 21:07:32
Hola, a ver si alguien me puede ayudar en este ejercicio. El problema es que no se como ajustar esos símbolos. Saludos y gracias.

Hay que escribir un programa que genere una secuencia de caracteres compuesta por los caracteres '>', '*' y '<'. La secuencia de caracteres tendrá siempre 10 caracteres, y será por ejemplo:

Ejemplo 1:
>>>****<<<

Ejemplo 2:
>>>>***<<<

El número de asteriscos a incluir será un número aleatorio entre 0 y 5, ambos incluidos. Para elegir un número aleatorio entre 0 y 5 se puede usar las siguiente fórmula: (int)Math.round(Math.random()*5)

El número de símbolos '>' y el número de símbolos '<', deberá ajustarse para que la cadena siempre tenga 10 símbolos. Por ejemplo, si el número de asteriscos es 4 (número par), a la izquierda y a la derecha de los asteriscos irán el mismo número de símbolos; pero si el número de asteriscos es 3 (número impar), tendrán que añadirse 4 símbolos a la izquierda y 3 a la derecha, uno más a la izquierda que a la derecha.

Para solucionar este ejercicio hay que tener en cuenta lo siguiente:
Solo al final del programa se mostrará el resultado por pantalla. Para ello, se irá construyendo la cadena concatenando los diferentes caracteres que la componen (por ejemplo, cadena=cadena+'S';).
Es obligatorio plantear 3 bucles, do while ('>>>'), while ('****') y do while para crear la tercera sección de símbolos ('<<<').

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

Secuencia de caracteres.

Publicado por Kabuto (1381 intervenciones) el 22/11/2018 01:18:09
Es más fácil de lo que parece.

Necesitarás tres variables para empezar, una para calcular los simbolos a la izquierda, otra para los de la derecha y otra para el número de asteriscos, que este valor ya te lo da el método random()

1
2
3
int cantSimbolIzq = 0;
int cantSimbolDer = 0;
int cantAsteriscos = (int)(Math.random()*6); //Esto genera un numero entre 0 y 5

Vale, a partir de aquí hay que calcular cuantos símbolos corresponden a cada lado.
Esto es sencillo, lo único a tener en cuenta es que el cálculo será ligeramente distinto si cantAsteriscos ha recibido un número par o impar.

Vamos a suponer que es par, por ejemplo, ha recibido un 2.
Primero determinamos cuantos simbolos, en total, hay que repartir, teniendo en cuenta que la cadena ha de tener 10 caracteres
1
int restantes = 10 - cantAsteriscos;//(10 - 2 = 8)

Vale tenemos 8 caracteres a repartir en ambos lados, así que nos basta con dividir entre 2 para calcular un lado, por ejemplo el derecho
1
cantSimbolDer = restantes / 2; //(8 / 2 = 4)
Vale, 4 a la derecha y como el lado izquierdo ha de medir igual, no hace falta volver a dividir, tan solo le "copiamos" el valor calculado para el derecho:
1
cantSimbolIzq = cantSimbolDer;

Vale, aquí ya tendríamos los cálculos realizados: 4 a la izquierda + 2 asteriscos + 4 a la derecha... pues ya tenemos los 10 símbolos repartidos.
Ya solo habría que construir la cadena usando tres bucles, uno para cada tipo de símbolo.

Pero esto es en el cas de que sea par el numero de asteriscos, ¿y cuando es impar?
Pues en realidad, los cálculos son prácticamente idénticos.

Vamos a suponer que cantAsteriscos ha recibido un 3.
Los símbolos restantes en total se calculan igual que antes -> 10 - 3 = 7

Vale, hay que repartir 7 símbolos en ambos lados.Sabemos que 4 iran a la izquierda y 3 a la derecha, pero, ¿como le decimos a Java que haga este reparto?

Si te fijas, al hacer la division entera tal y como hemos hecho antes ( o sea, sin decimales), en este caso obtendríamos el valor correcto para la derecha
1
cantSimbolDer = restantes / 2;  // 7 / 2 = 3 (en realidad es 3,5, pero como usamos variables int, esa parte decimal no se va a recoger.

Genial, pues ahora para la parte izquierda, igual que antes, copiamos el valor calculado para la derecha, con la diferencia de que le sumamos 1 más.
1
cantSimbolIzq = cantSimbolDer + 1; // Izquierda será 3 + 1 = 4

Y ahora si, tendríamos 4 a la izquierda + 3 asteriscos + 3 a la derecha. 10 símbolos correctamente repartidos.

En definitiva, los pasos a seguir serían:
- Declarar 3 variables para izquierda, derecha y asteriscos.
- Asteriscos recibe un random entre 0 y 5
- Preguntaremos si el valor recibido en Asteriscos, es par o impar. Esto lo hacemos con el operador módulo (si asteriscos % 2 == 0, es par)
- Si es par calculamos los simbolos restantes a rellenar (10 - asteriscos) y dividimos entre 2 para repartir en partes iguales a ambos lados.
- Si es impar, hacemos el mismo calculo y division, con la diferencia de que al lado izquierdo le sumanos un símbolo extra
- Usamos tres bucles para crear una cadena, cada bucle insertará la cantidad de símbolos calculados a la izquierda, asteriscos y derecha.
- Imprimimos la cadena en pantalla.

Intenta hacerlo siguiendo estos pasos. Si te atascas pregunta. Es la mejor (casi la única) forma de aprender, atascarse y tener que preguntar.
Si miras un código ya resuelto, sin haberte atascado previamente, se aprende muchísimo menos.

Aún así, yo te dejo aquí un código ya resuelto. Tú decides cuándo mirarlo.
Te aseguro que es mejor no mirarlo, sin previamente haberlo intentado, fallado y preguntar por qué fallas o por qué no consigues realizar una determinada cosa.
Un saludo.
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
41
42
43
public final class Secuencia {
 
	public static void main(String[] args) {
 
		int cantSimbolIzq = 0;
		int cantSimbolDer = 0;
		int cantAsteriscos = (int)(Math.random()*6); //Esto genera un numero entre 0 y 5
 
		if (cantAsteriscos % 2 == 0) //Es par, izquierda y derecha mediran lo mismo
		{
			cantSimbolDer = (10 - cantAsteriscos) / 2;
			cantSimbolIzq = cantSimbolDer; //Miden lo mismo
		}
		else //Es impar, la izquierda medirá uno mas que la derecha
		{
			cantSimbolDer = (10 - cantAsteriscos) / 2;
			cantSimbolIzq = cantSimbolDer + 1;
		}
 
		//Creamos el String
		StringBuilder cadena = new StringBuilder();
		//Lo lógico sería usar bucles for, pero usaremos while por exigencias del enunciado
		int i = 0;
		do {
			cadena.append('>');
			i++;
		} while(i < cantSimbolIzq);
		i = 0;
		while(i < cantAsteriscos){
			cadena.append('*');
			i++;
		}
		i = 0;
		do {
			cadena.append('<');
			i++;
		} while(i < cantSimbolDer);
 
		//Mostramos String
		System.out.println(cadena.toString());
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Jose
Val: 13
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Secuencia de caracteres.

Publicado por Jose (6 intervenciones) el 22/11/2018 10:02:20
Hola, muchas gracias por vuestra respuestas.

Respecto a lo que decía Kabuto, tenía razón respecto a que era fácil, lo que ocurría es que no sabía ajustar esos símbolos, ya que yo no usaba ningún if.

De nuevo gracias por vuestra ayuda. 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