Java - Ayuda con Clases Java

 
Vista:

Ayuda con Clases Java

Publicado por Aprendiz (5 intervenciones) el 24/07/2021 19:57:58
Buenos días!
Intento ejercitar con ejs de clases. Mi código es el siguiente: Por pantalla se pide que se introduzca los datos de un jugador y el programa necesito que contemple 2 situaciones:
1. Que al introducir el último dato del primer jugador, tras dar enter me notifique si está eliminado o no.
2. Que al introducir el último dato del primer jugador, tras dar enter y empezar a introducir los datos del segundo jugador en lugar de hacer 1 me diga cuál de los dos es mejor (atendiendo a sus puntajes que ponderan según el tipo de jugada, c1, c2, c3 y de si se está eliminado o no)

Mi programa es éste pero no distingue las dos situaciones a la salida:

public class ProblemaBaloncesto {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Introduzca nombre del jugador, las canastas de tipo 1,2,3 y el nº de faltas");
Jugador j1 = new Jugador(input.nextLine(), input.nextInt(), input.nextInt(), input.nextInt(), input.nextInt());

if (input.hasNextLine()) {
Jugador j2 = new Jugador(input.nextLine(), input.nextInt(), input.nextInt(), input.nextInt(),
input.nextInt());

if (j1.eliminado(j1) || j2.c1 + j2.c2 * 2 + j2.c3 * 3 > j1.c1 + j1.c2 * 2 + j1.c3 * 3) {
System.out.println(j2.nomb + "es mejor que " + j1.nomb);

} else if (j2.c1 + j2.c2 * 2 + j2.c3 * 3 < j1.c1 + j1.c2 * 2 + j1.c3 * 3 || j2.eliminado(j2)) {
System.out.println(j1.nomb + "es mejor que " + j2.nomb);

} else {
System.out.println("Están empate");
}

} else {

if (j1.eliminado(j1)) {
System.out.println(j1.nomb + "está eliminado");
} else {
System.out.println(j1.nomb + "no está eliminado");
}
}
}
}

///// y la segunda clase/////

public class Jugador {
public String nomb;
public int c1;
public int c2;
public int c3;
public int faltas;

public Jugador(String nombre, int _c1, int _c2, int _c3, int fault) {
nomb = nombre;
c1 = _c1;
c2 = _c2;
c3 = _c3;
faltas = fault;

}

public boolean eliminado(Jugador j) {

if (j.faltas < 5) {
return false;
} else {
return true;
}
}
}


Muchísimas gracias por su tiempo!
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

Ayuda con Clases Java

Publicado por Aprendiz (5 intervenciones) el 24/07/2021 22:51:32
Amigos, creo que con IF(has.Next) funciona mejor. Ya que el anterior se ahorraba un intro antes de dar el segundo nombre y no estaba bien aquello. Ahora sé que entra al if cuando introduzco el segundo nombre.

El problema es que siempre entra a ese IF aún cuando sólo doy datos para un jugador y presiono dos veces intro, vamos, que no contempla el ELSE correspondiente a ese IF principal. Agradecería mucho vuestra ayuda, me supone un gran valor para mí.

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

Ayuda con Clases Java

Publicado por Kabuto (1381 intervenciones) el 24/07/2021 23:54:38
hummm...
Eso de construir objetos directamente usando lecturas de Scanner como argumentos para el constructor, lo veo arriesgado...

En cualquier caso, siempre que en un programa hacemos lecturas de valores numéricos (con nextInt(), o nextFloat(), o nextDouble()...) y también lecturas de cadenas con nextLine().... vamos a tener problemas.


Para evitarlos, conviene hacer TODAS las lecturas con nextLine().
Y si necesitamos un valor numéricos, parseamos las lecturas al tipo de dato que necesitamos.

Por ejemplo, esta línea:
1
Jugador j1 = new Jugador(input.nextLine(), input.nextInt(), input.nextInt(), input.nextInt(), input.nextInt());

Convendría sustituirla por esta:

1
Jugador j1 = new Jugador(input.nextLine(), Integer.parseInt(input.nextLine()), Integer.parseInt(input.nextLine()), Integer.parseInt(input.nextLine()), Integer.parseInt(input.nextLine()));
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

Ayuda con Clases Java

Publicado por Aprendiz (5 intervenciones) el 25/07/2021 00:17:37
Muchísimas gracias por contestar! Consideraré eso seriamente pero picando y picando creo que mi problema está con el uso de ese If.
me explico con un mini codigo que tiene el mismo problema q mi ejercicio.

1
2
3
4
5
6
7
8
9
10
11
12
public class Incremento {
 public static void main (String [] args){
Scanner input = new Scanner(System.in);
System.out.println("Escriba");
 
	if(input.hasNext()){
			System.out.println("holi");
	 }else {
		 System.out.println("adiós");
	 }
	 }
 	}


/// en este caso, si no introduzco nada y me limito a picar intros, se queda en blanco. Nunca da de salida ese adiós. Si me pudieras explicar el buen uso de ese hasNext() estaría muy agradecido. Un saludo y gracias de verdad por leerme.
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