Java - cadena arreglo

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

cadena arreglo

Publicado por Cesar (5 intervenciones) el 09/09/2019 17:25:42
hola compañero como han estado
necesito un gran favor
es que necesito construir una cadena por teclado y lo que escriba se compare con las variables que le coloque como restricciones pero no he podido.
les agradecería que me pudieran colaborar con el siguiente ejercicio que acabo de subir porque sinceramente no pude.-
entendí el problema pero no supe plantearlo en el código
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

cadena arreglo

Publicado por Kabuto (1381 intervenciones) el 11/09/2019 00:56:07
Hola.
Tras lograr entender lo que pedía el enunciado, que me ha costado un rato xD, se me ha ocurrido una solución que ha requerido muy poquito código.

Consistiría en recorrer cada carácter de la cadena y obtener su código ASCII.

Puesto que solo se admiten caracteres entre 'a' y 'z', será sencillo calcular las pulsaciones requeridas valiéndonos de los valores ASCII

Si el valor ASCII de un carácter es el 97, que equivale a la 'a', ya sabemos que solo ha requerido una pulsación para ese carácter.

Si es por ejemplo el valor 100, que es la 'd', calculamos diferencia:
100 - 97 = 3

Ese 3, significa que hay 3 caracteres "erróneos antes de llegar a la 'd', que sería la correcta.
Esos caracteres erróneos son 'a', 'b' y 'c'.
Haberlos pulsado, implica corregirlos con una pulsación de delete.
Así que esos 3 caracteres erróneos, han requerido de dos pulsaciones cada uno:
3 x 2 = 6

Tenemos 6 pulsaciones, pero repito que son únicamente para los caracteres erróneos. Nos falta una añadir una pulsación más para llegar a la letra correcta, que es la 'd'.
6 + 1 = 7

En definitiva:
1
2
3
4
diferencia = valorASCII - 97; //Diferencia nos da el número de caracteres erróneos.
pulsaciones = diferencia * 2; //Multiplicar por 2 nos da las pulsaciones que han requerido esos caracteres.
pulsaciones++; //Añadimos otra pulsación más, la que nos ha llevado al carácter correcto.
return pulsaciones; //Ya tenemos el cálculo hecho

Si más o menos te ha quedado claro el concepto, trata de escribir tú el código.

En cualquier caso, aquí te dejo cómo lo he escrito yo.
Son dos clases, la clase con el estúpido nombre de HarryAcker y el método que hace el cálculo y otra clase con un main para ponerlo a prueba.
No he programado ningún control de las restricciones solicitadas, esto te lo dejo a ti si quieres hacerlo.

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
public class HarryAcker {
 
	public int calcularDuracion(String cadena) {
		int pulsaciones = 0;
 
		/*
		 * Revisamos valor ASCII de cada carácter, y calculamos pulsaciones ha necesitado Harry
		 * Si es 97, que es la 'a', solo habrá necesitado una pulsación
		 * Si es mayor que 97, calculamos la diferencia
		 */
 
		for (int i = 0; i < cadena.length(); i++) {
			int ascii = cadena.codePointAt(i);
			if (ascii == 97) //Es una 'a'
				pulsaciones++;
			else {
				int diferencia = ascii - 97;
				//La diferencia implica pulsaciones fallidas y deletes
				pulsaciones += (diferencia * 2);
				//Por último, añadimos la pulsación que resultó correcta
				pulsaciones++;
			}
 
		}
		return pulsaciones;
	}
 
}

1
2
3
4
5
6
7
8
9
10
11
12
public class Test {
 
	public static void main(String[] args) {
		HarryAcker harry = new HarryAcker();
		Scanner teclado = new Scanner(System.in);
		System.out.print("Escriba cadena: ");
		String cadena = teclado.nextLine();
		System.out.println("Pulsaciones necesitadas: " + harry.calcularDuracion(cadena));
		teclado.close();
	}
 
}

En pantalla obtengo resultados correctos que coinciden con los ejemplos de tu PDF:
1
2
Escriba cadena: qwertyuiopasdfghjklzxcvbnm
Pulsaciones necesitadas: 676
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