Java - Problema con String o Scanner

 
Vista:
Imágen de perfil de jose
Val: 64
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con String o Scanner

Publicado por jose (73 intervenciones) el 21/09/2021 18:39:55
Buenas tardes,

Estoy realizando ejercicio de Java que en la función reservar asiento, pregunta por la fila y el asiento a través de la función reservarAsiento.

Desde ahí envío los datos de teclado y el array, que abajo expongo, a la función obtenerPosicionPorFilaAsientos(avio, filaStr, asientoEleccion);

Resulta que haciendo un debug se salta la línea System.out.println("la fila " + fila + " y el asiento " + asiento + " estan en la posición " + i); del métedo obtenerPosicionPorFilaAsientos, eso ocurre cuando las variables filaStr, asientoEleccion son recogidas a través del menú de la función reservarAsiento.

1
2
3
4
if ((fila == avion[i][1]) && (asiento == avion[i][2])) {
	System.out.println("la fila " + fila + " y el asiento " + asiento + " estan en la posición " + i);
	posicion = i;
}

Sin embargo si a esas variables les doy el valor desde el código

1
2
3
filaStr = "2";
asientoEleccion = "B";
obtenerPosicionPorFilaAsientos(avio, filaStr, asientoEleccion)

o obtenerPosicionPorFilaAsientos(avio, "2","B");

funciona correctamente.

Creo que el problema está en los scanner, pero no se donde puede estar el problema.

Todos los valores son enviados como String.

1
2
3
4
5
6
7
8
String[][] avion = {
 
				{"1", "1", "A", "45821635K"},
				{"1", "1", "B", "45821635K"},
				{"1", "1", "C", "45821635K"},
				{"1", "1", "D", "45821635K"},
				{"1", "2", "A", ""},
				{"1", "2", "B", ""},


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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
void reservarAsiento(String[][] avio) {
		int filaEleccion = 0;
		String asientoEleccion = "";
		String filaStr = "";
		Scanner fila = new Scanner(System.in);
		Scanner asiento = new Scanner(System.in);
 
		int posicio;
 
		System.out.println("RESERVAR ASIENTO");
		System.out.println("################");
		System.out.print("Elija la fila del avión del 1-11:");
 
			try {
			filaEleccion = fila.nextInt();
			if ((filaEleccion < 1) || (filaEleccion > 11)) {
				System.out.println("Es mayor de 11 y menor que 1");
				reservarAsiento(avion);
			} else if ((filaEleccion > 1) || (filaEleccion < 11)) {
				System.out.println("correcto " + filaEleccion);
				filaStr = String.valueOf(filaEleccion);
			} else {
				System.out.println("Has de introducir un número");
				fila.next();
			}
 
			}  catch (InputMismatchException e) {
				System.out.println("Has de introducir un número");
				fila.next();
			}
 
			System.out.print("Elija el Asiento del A-D:");
			asientoEleccion = asiento.nextLine();
 
	System.out.println(filaStr + " " + asientoEleccion);
		//Obteniendo la posición de la fila
		posicion = obtenerPosicionPorFilaAsientos(avio, filaStr, asientoEleccion);
		System.out.println("posición :" + posicion);
 
 
	}
 
 
int obtenerPosicionPorFilaAsientos(String[][] avion, String fila, String asientos) {
 
		int posicion = 0;
		for (int i = 0; i < avion.length; i++) {
			for (int j = 0; j < avion[i].length; j = j + NUMERO_ASIENTOS_POR_FILA) {
 
				if ((fila == avion[i][1]) && (asiento == avion[i][2])) {
					System.out.println("la fila " + fila + " y el asiento " + asiento + " estan en la posición " + i);
					posicion = i;
 
				}
			}
		}
 
		if (posicion == 0) {
			return FILA_INEXISTENTE;
		} else {
 
			return posicion;
		}
 
	}

Se agradecería si alguien me pudiera echar una mano con esto.

Muchas gracias de antemano.
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

Problema con String o Scanner

Publicado por Kabuto (1381 intervenciones) el 22/09/2021 00:32:34
Yo utilizaría un único Scanner.

Y haría todas las lecturas con nextLine().

Cuando necesites leer un entero, lo haría así:
1
filaEleccion = Integer.parseInt(fila.nextLine());

Cualquier lectura hecha con algún método distinto de nextLine(), dejará en el stream de entrada de datos el carácter especial que representa la tecla ENTER (el carácter "retorno de carro"), que es el carácter que generamos al cerrar la línea cuando pulsamos ENTER para introducir un dato por teclado.

Este carácter que queda en el stream, luego puede entorpecer las siguientes lecturas.

Por eso mejor leer con nextLine(), ya que recoge la línea entera, incluido el carácter especial que cierra la línea, y así en el stream no queda nada pendiente que pueda afectar las siguientes lecturas.

Como nextLine() nos retorna un dato String, se puede parsear a otro tipo si lo necesitamos, como en el ejemplo que puse donde lo que necesitamos es un int
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