Java - LinkedList

 
Vista:
Imágen de perfil de rocio
Val: 39
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

LinkedList

Publicado por rocio (15 intervenciones) el 22/11/2020 22:54:04
tengo dos clases, especialidad y centro

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
public class Especialidad {
 
	private String nombre;
	private int valor;
 
	Especialidad(String nombre,int valor){
		this.valor = valor;
		this.nombre= nombre;
	}
	public String getNombre() {
		return nombre;
	}
 
	public void setNombre(String nombre) {
		if (this.nombre!="Pediatria" || this.nombre!="General" || this.nombre!="Cardiologia") {
			throw new RuntimeException ("Nombre de especialdiad incorrecto");
		}
	}
 
	public int getValor() {
		return valor;
	}
 
	public void setValor(int valor) {
		if(this.valor<0) {
			throw new RuntimeException ("valor de especialidad incorrecto");
 
		}
	}
}


en el centro lo que tengo como atributo es una linkedList
LinkedList<Especialidad> especialidades = new LinkedList<>();

y un metodo

1
2
3
public  void agregarEspecialidad(String nombre, int valor) {
 
}

lo que busco es meter en la linked list el nombre de una especialidad y su valor,
pero no sabria como hacerlo para q cumpla con los getter y setter que tiene,
la finalidad que busco es
en el main que esta en centro

1
2
centro.agregarEspecialidad("Pediatria",2000);
centro.agregarEspecialidad("General",3000);

y que se agregen, alguna ayuda con respecto a esto ? se me hace complicado y debe ser uan tonteria.
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

LinkedList

Publicado por Rodrigo (623 intervenciones) el 22/11/2020 23:05:49
Creo que no requieres usar getters o setters, solo el constructor.

1
especialidades.add( new Especialidad(nombre, valor) );
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 rocio
Val: 39
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

LinkedList

Publicado por rocio (15 intervenciones) el 22/11/2020 23:13:55
claro pero pasa que el nombre de la especialidad son solo 3 tipos pediatria cardiologia y general, con lo que decis podria ingresar el nombre pepino y ponerle el valor -1
por eso habia pensado en los getter y setter para ponerle una restriccion digamos a lo q puedo ingresar
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

LinkedList

Publicado por Rodrigo (623 intervenciones) el 22/11/2020 23:19:48
Podrias hacer 2 modificaciones:
- Que el constructor invoque los setters y entonces el constructor haga el chequeo.
- Que los setters modifiquen los campos que se supone hay que setear. Ahora solo chequean, pero no setean (los setters tienen que comprobar lo que se intenta setear, no lo que tiene ahora en los campos del objeto)
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 rocio
Val: 39
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

LinkedList

Publicado por rocio (15 intervenciones) el 22/11/2020 23:22:37
- Que el constructor invoque los setters y entonces el constructor haga el chequeo.

no sabia que se podia hacer eso
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: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

LinkedList

Publicado por Yamil (2315 intervenciones) el 22/11/2020 23:23:10
Pudiera poner la restriccion a nivel del constructor o puedes crera un enum con loas valores que va a atenr la especializadad. Por ejemplo

enum Especialidad{
GENERAL
PEDRIATRIA,
CARDIOLOGIA,
}

y
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

LinkedList

Publicado por Kabuto (1381 intervenciones) el 22/11/2020 23:26:43
Por cierto, otra cosa, para comparar Strings no es recomendable usar los operadores == o !=.
En ocasiones pueden dar resultados inesperados.
1
2
3
4
public void setNombre(String nombre) {
if (this.nombre!="Pediatria" || this.nombre!="General" || this.nombre!="Cardiologia") {
throw new RuntimeException ("Nombre de especialdiad incorrecto");
}

Lo adecuado es usar el método equals().
Y al usar this, no estás comprobando el dato que se recibe, si no que estás comprobando el valor del atributo ya existente previamente.

Supongo que la intención es comprobar si el "nombre" recibido se corresponde con una de las tres especialidades admitidas.
Si corresponde, lo seteamos (que por cierto tu método no setea nada)
Si no corresponde, lanzamos excepción.
Y la comparación debería ser con AND (&&) y no con OR (||)

Si usamos OR, basta con que se cumpla una sola de las tres comparaciones para que se considere TRUE, y por lo tanto, se lanzaría la excepción.
Si pasamos como nombre "General", es un nombre válido. Pero como es distinto de "Pediatria" y al usar OR con eso basta para que toda la expresión del IF se considere TRUE, se lanzará la excepción rechazando este nombre, que en realidad es válido.

En cambio si usamos AND, las tres comparaciones han de ser ciertas para que toda la expresión se considere TRUE. De este modo, solo se rechazan los nombres que sean distintos de los tres admitidos.

Quizás sea mejor así:
1
2
3
4
5
6
public void setNombre(String nombre) {
if (!nombre.equals("Pediatria") && !nombre.equals("General") && !nombre.equals("Cardiologia"))
    throw new RuntimeException ("Nombre de especialdiad incorrecto"); //Rechazamos
else
    this.nombre = nombre; //Aceptamos
}

Aún se puede mejorar un poco.
En este caso solo hay tres especialidades, así que bueno, no queda mal hacerlo así.
Pero imagina que quieres añadir más especialidades admisibles.., el if podría ser muy largo.
Usando un switch, se puede hacer más cómodo de escribir, y fácil de entender al leerlo:

1
2
3
4
5
6
7
8
9
10
11
12
public void setNombre(String nombre) {
    switch(nombre) {
        case "Pediatria":
        case "Cardiologia":
        case "General":
        case "Obstetricia":
        case "Oncologia":
                this.nombre = nombre; //Coincide con alguno de los casos aceptables
        default: //No coincide con ninguno de los casos aceptables
                throw new RuntimeException ("Nombre de especialdiad incorrecto");
    }
}


El método setValor() también requiere ser completado.
Si el valor recibido es negativo, se lanza excepción. Bien,
Pero, ¿qué pasa si es un valor que se puede admitir? Nada, no pasa nada, no se está pasando ese valor al atributo.
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