I have a code made... but in it I have 2 doubts.
It's okay? It's my first object oriented program and I don't know if it's 100% correct.
I would like to be able to create several
Nurses
, not just 1, but I don't know how to do it. Right now I would only save 1 and I need to save several without knowing how many.
Here is the code:
package principal;
import java.util.ArrayList;
import java.util.Scanner;
/**
*
* @author MiguelAngel
*/
public class Nurse {
private String nif;
private String name;
private String lastname;
/*
TODO Constructor
Paràmetres: String nif, String name, String lastname
Accions:
- actualitzar les propietats que ens han passat per paràmetre
*/
public Nurse(String nif, String name, String lastname) {
this.nif = nif;
this.name = name;
this.lastname = lastname;
}
public String getNif(){ return nif; }
public String getName(){ return name; }
public String getLastname(){ return lastname ; }
public void setNif(String Nif){ this.nif = Nif;}
public void setName(String Name){ this.name = Name;}
public void setLastname(String Lastname){ this.lastname = Lastname ;}
/*
TODO Mètodes accessors
*/
public static Nurse addNurse() {
/*
TODO
Paràmetres: sense
Accions:
- demanar les dades per consola per crear un nou infermer (són les dades que demana el constructor)
Retorneu: L'infermer creat
*/
// carreguem
int contUser=0, cod=1; //variable llevar control usuarios ingresados
Nurse Nurse1 = new Nurse("Nif", "Name", "Lastname");
String nif = Nurse1.getNif();
String name = Nurse1.getName();
String lastname = Nurse1.getLastname();
// creem a sobre
Scanner lector = new Scanner(System.in);
System.out.println("Nif nurse??");
nif = lector.next();
Nurse1.setNif(nif);
System.out.println("Nom Nurse??");
name = lector.next();
Nurse1.setName(name);
System.out.println("Cognom Nurse???");
lastname = lector.next();
Nurse1.setLastname(lastname);
return Nurse1;
}
public void updateNurse() {
/*
TODO
Paràmetres: sense
Accions:
- demanar les dades de l'infermer per consola i modifiqueu la propietat corresponent
Nota: penseu que estem modificant l'objecte actual ...
Retorneu: no hi ha retorn
*/
Nurse Nurse1 = new Nurse("Nif", "Name", "Lastname");
System.out.println("Modifiquem Nurse ");
Scanner lector = new Scanner(System.in);
System.out.println("Nif nurse??");
String code = lector.next();
Nurse1.setNif(code);
System.out.println("Nom Nurse??");
String nom = lector.next();
Nurse1.setName(nom);
System.out.println("Cognom Nurse???");
String cognom = lector.next();
Nurse1.setLastname(cognom);
}
public void showNurse() {
System.out.println("\nLes dades de l'infermer amb nif " + this.getNif() + " són:");
System.out.println("\nNom:" + this.getName());
System.out.println("\nCognom:" + this.getLastname());
}
}
Both the classes and the java docs are obligatory... that is, no class can be modified...
UPDATE!!
When in doubt, I'll tell you.
I am required to have this part of the code:
public class Nurse {
private String nif;
private String name;
private String lastname;
/*
TODO Constructor
Paràmetres: String nif, String name, String lastname
Accions:
- actualitzar les propietats que ens han passat per paràmetre
*/
/*
TODO Mètodes accessors
*/
public static Nurse addNurse() {
/*
TODO
Paràmetres: sense
Accions:
- demanar les dades per consola per crear un nou infermer (són les dades que demana el constructor)
Retorneu: L'infermer creat
*/
return ............
}
public void updateNurse() {
/*
TODO
Paràmetres: sense
Accions:
- demanar les dades de l'infermer per consola i modifiqueu la propietat corresponent
Nota: penseu que estem modificant l'objecte actual ...
Retorneu: no hi ha retorn
*/
}
public void showNurse() {
System.out.println("\nLes dades de l'infermer amb nif " + this.getNif() + " són:");
System.out.println("\nNom:" + this.getName());
System.out.println("\nCognom:" + this.getLastname());
}
}
That I have to do? The function AddNurse()
Create X nurses ( nombre
, apellido
y Nif
) by keyboard.
The function updateNurse()
Modify the nurses.
I don't know if my code is 100% correct, any help would be great!
Thank you!
FINAL
The problem I had is that I couldn't create a list since it wasn't on the agenda. The final code looks like this:
package principal;
import java.util.Scanner;
/**
*
* @author Montse
*/
public class Nurse {
private String nif;
private String name;
private String lastname;
/*
TODO Constructor
Paràmetres: String nif, String name, String lastname
Accions:
- actualitzar les propietats que ens han passat per paràmetre
*/
public Nurse(String nif, String name, String lastname) {
this.nif = nif;
this.name = name;
this.lastname = lastname;
}
public String getNif(){ return nif; }
public String getName(){ return name; }
public String getLastname(){ return lastname ; }
public void setNif(String Nif){ this.nif = Nif;}
public void setName(String Name){ this.name = Name;}
public void setLastname(String Lastname){ this.lastname = Lastname ;}
/*
TODO Mètodes accessors
*/
public static Nurse addNurse() {
/*
TODO
Paràmetres: sense
Accions:
- demanar les dades per consola per crear un nou infermer (són les dades que demana el constructor)
Retorneu: L'infermer creat
*/
// carreguem
Nurse Nurse1 = new Nurse("Nif", "Name", "Lastname");
String nif = Nurse1.getNif();
String name = Nurse1.getName();
String lastname = Nurse1.getLastname();
// creem a sobre
Scanner lector = new Scanner(System.in);
System.out.println("Nif nurse??");
nif = lector.next();
Nurse1.setNif(nif);
System.out.println("Nom Nurse??");
name = lector.next();
Nurse1.setName(name);
System.out.println("Cognom Nurse???");
lastname = lector.next();
Nurse1.setLastname(lastname);
return Nurse1;
}
public void updateNurse() {
/*
TODO
Paràmetres: sense
Accions:
- demanar les dades de l'infermer per consola i modifiqueu la propietat corresponent
Nota: penseu que estem modificant l'objecte actual ...
Retorneu: no hi ha retorn
*/
Nurse Nurse1 = new Nurse("Nif", "Name", "Lastname");
System.out.println("Modifiquem Nurse ");
Scanner lector = new Scanner(System.in);
System.out.println("Nif nurse??");
String code = lector.next();
Nurse1.setNif(code);
System.out.println("Nom Nurse??");
String nom = lector.next();
Nurse1.setName(nom);
System.out.println("Cognom Nurse???");
String cognom = lector.next();
Nurse1.setLastname(cognom);
}
public void showNurse() {
System.out.println("\nLes dades de l'infermer amb nif " + this.getNif() + " són:");
System.out.println("\nNom:" + this.getName());
System.out.println("\nCognom:" + this.getLastname());
}
}
Then, I have created in the main class:
static private Nurse[] nurses = new Nurse[100];
static private int contador = 0;
And in the function call:
case 1:
System.out.println("has escollit Alta");
Nurse n = Nurse.addNurse();
nurses[contador] = n;
contador ++;
break;
as you say that without knowing how many you have to create an
List
a to store each instance you create:When you create a new nurse:
You add it like this:
You can also use the static method
addNurse()
you created:Or what is the same:
Some additions looking at your code:
ArrayList
it because even if you don't use it you have it importedNurse nurseA
Nurse
you addnurses.size()
it to avoid problems of lack of controlLook at this demo in ideone with the main method and the example lists, you can copy it to your IDE to run it locally by uncommenting the lines to create nurses by console:
PS: good luck and ask what you need ;)
You could create an ArrayList of type Nurse
and so on
More info:
The syntax to create the ArrayList of Objects is as follows:
ClaseDelObjeto
=> The class that we are going to use to handle the data of the object.NombreArrayList
=> The name of the ArrayList that we are going to manipulate.The above is data that is replaced with the names that we want and should use. To use this syntax we must import the necessary libraries to use the ArrayList:
import java.util.ArrayList;
USEFUL METHODS FOR AN ARRAYLIST IN JAVA
To perform common operations such as entering, deleting, searching, modifying data in an ArrayList, we will find some useful methods for this purpose:
add(X)
-> Add a value or object to the end of the ArrayList.size()
-> Returns the size of the ArrayList.contains(X)
-> Returns true if element X exists in the ArrayList.set(i, X)
-> Modify the element that is in position i, for the new element X.remove(X)
-> Deletes element X or failing that the element at position X.get(i)
-> Gets the element at position i of the Array List.I had to delete part of the answer because Ariel Octavio D'Alfeo was faster, it seems that you are using Nurse in a way like a node/tree that creates adds nodes, in a much simpler way and I don't know the same but, For the example to be understood, applying Ariel's answer you can do something like this:
Take as pseudo code:
Main
You say that you don't know how many, but I don't know, if you mean that you don't know how many you are going to store throughout your program, or what you mean, if it is that the user via CLI (by console) you ask for a number and these are the ones that will be added, if so, you only have to change the 10 for the value that the user passes to it.
Update:
according to leo you have to use
showNurse
a simple way would be to pass the Array:For the other
updateNurse
, you pass the Array and the string that corresponds to the nif:Notes: Take all this as pseudo code, it has not been tested or created in any ide (syntax), it is also very possible that this is not the most efficient or correct way, but I think you can use it as a base.
1) Your code is roughly correct (it would be good to apply a format), but it depends on what requirements it must have, it must have three properties?, a method to display the data?, a method to update?. What does your code require? Based on that, it can be determined if it is good and meets the objectives.
2) To create several "Nurses", you simply have to create a new instance which you do in your program using:
new Nurse()
.for example let's add 3 instances of "Nurse": First you create a list of objects of type Nurse:
You create instances of Nurse:
and add them to the list using the method
add()
like so:Sobre si el programa está bien, si compila técnicamente está bien. Si se ejecuta como lo espera, está aún mejor. Si la pregunta hace referencia a si está bien de acuerdo a la metodología de análisis, diseño y programación orientado a objetos, es relativo. Ni en la misma literatura hay consenso sobre cuáles características logran ajustarse a estos requisitos. Aún así, trataré de mencionar los clásicos rasgos:
null
,""
," "
pueden ser seteadas a estos atributos. No sería nada bueno tener una enfermera con nombre Diana y apellidonull
por ejemplo. Encapsulamiento trata, primero, de cómo ocultamos la representación de los datos y segundo, de cómo validamos que estos datos estén correctos. La propiedadnif
no es clara, supongo yo que representa un número de identificación: una cualidad del encapsulamiento es que es decisión suya que esta propiedad sea de tipo entera o String, una tiene ventajas sobre las otras, dependiendo del uso que le dé a esta información. Supongo yo que no hay ninguna restricción para estos valores por lo que en últimas cumple el propósito.Nurse
sean estrictamente necesarios para interactuar. En este momento es obligatorio que todo objeto de tipoNurse
sea creado con estos campos. Es una regla estricta, pero así lo ha decidido usted, no hay ningún error en esto.Nurse
cuenta con un método para crear un objeto de su tipo, aprovechando los métodosstatic
disponibles en Java. Para algunos autores estos métodos rompen el principio orientado a objetos (¿es reponsabilidad de la claseNurse
crear objetos de su tipo? (diferentes al constructor, obviamente)). Otros autores por el contrario manifiestan que es correcto (patrón de diseño Builder o Factory). Mi opinión personal es que estos deberían diseñarse con el único objetivo de crear objetos, delegando el ingreso de datos a clases auxiliares. Su claseaddNurse
no sólamente se está encargando de crear el objeto, sino de interactuar con métodos de clase que sirven para pedir datos al usuario (Scanner
).Nurse
debe ser otorgada a una clase auxiliar (normalmente sería la que usa para invocar los métodos de esta clase o construir objetos de este tipo)El método
addNurse
podría implementarse así:aparte de cambiar el nombre (pues en realidad este método sólo crea objetos de este tipo) se auxilia en el constructor para retornar un objeto con los datos enviados. Es responsabilidad de la clase que invoca este método pedir los datos (
nif
,name
,lastName
) para construir el objeto e incluso, validar si son correctos, ya que la claseNurse
no lo hace.Pienso que el método
update
es redundante. Para actualizar un objeto hacemos uso de sus métodos seters públicos, por lo que delegamos la responsabilidad de actualizar los valores de cada objeto a la clase que los invoca.El método
showNurse
es correcto. Sin embargo (más práctica de Java que orientado a objetos) es muy bueno implementar un método llamadotoString()
que realiza exactamente lo mismo que este método: la diferencia radica en que al imprimir un objeto de tipoNurse
se invoca automáticamente el métodotoString()
con el formato que haya diseñado, por ejemplo:Aunque ya le han respondido, puede crear varios objetos de tipo
Nurse
de varias formas. Si conoce de antemano cuántos objetos necesita, use un arreglo:si no conoce cuántos objetos son y necesita ir creando conforme el programa se ejecuta, cree un Array:
e inserta en este arreglo cada objeto que quiera ir creando: