У меня есть код... но в нем у меня есть 2 сомнения.
Все в порядке? Это моя первая объектно-ориентированная программа, и я не знаю, правильна ли она на 100%.
Я хотел бы иметь возможность создавать несколько
Nurses
, а не только 1, но я не знаю, как это сделать. Прямо сейчас я бы сохранил только 1, и мне нужно сохранить несколько, не зная, сколько.
Вот код:
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());
}
}
Требуются как классы, так и java-документы... то есть ни один класс не может быть изменен...
ОБНОВИТЬ!!
Если есть сомнения, я скажу вам.
Мне необходимо иметь эту часть кода:
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());
}
}
Что я должен сделать? Функция AddNurse()
Создать X медсестер ( nombre
, apellido
y Nif
) с помощью клавиатуры.
Функция updateNurse()
Изменить медсестер.
Я не знаю, правильный ли мой код на 100%, любая помощь будет отличной!
Благодарю вас!
ФИНАЛ
У меня была проблема в том, что я не мог создать список, так как его не было в повестке дня. Окончательный код выглядит так:
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());
}
}
Затем я создал в основном классе:
static private Nurse[] nurses = new Nurse[100];
static private int contador = 0;
И в вызове функции:
case 1:
System.out.println("has escollit Alta");
Nurse n = Nurse.addNurse();
nurses[contador] = n;
contador ++;
break;
как вы говорите, не зная, сколько вам нужно создать
List
для хранения каждого созданного вами экземпляра:При создании новой медсестры:
Вы добавляете это так:
Вы также можете использовать
addNurse()
созданный вами статический метод:Или что то же самое:
Некоторые дополнения, глядя на ваш код:
ArrayList
его, потому что даже если вы им не пользуетесь, он у вас импортированNurse nurseA
Nurse
que añadasnurses.size()
para no tener problemas de descontrolMira esta demo en ideone con el metodo main y las listas de ejemplo, puedes copiartelo a tu IDE para ejecutarlo en local descomentando las lineas para crear enfermeros por consola:
PD: suerte y pregunta lo que necessites ;)
Вы можете создать ArrayList типа Nurse
и так далее
Больше информации:
Синтаксис для создания списка объектов ArrayList следующий:
ClaseDelObjeto
=> Класс, который мы будем использовать для обработки данных объекта.NombreArrayList
=> Имя ArrayList, которым мы собираемся управлять.Приведенные выше данные заменяются именами, которые мы хотим и должны использовать. Чтобы использовать этот синтаксис, мы должны импортировать необходимые библиотеки для использования ArrayList:
import java.util.ArrayList;
ПОЛЕЗНЫЕ МЕТОДЫ ДЛЯ СПИСКА МАССИВА В JAVA
Для выполнения общих операций, таких как ввод, удаление, поиск, изменение данных в ArrayList, мы найдем несколько полезных методов для этой цели:
add(X)
-> Добавить значение или объект в конец ArrayList.size()
-> Возвращает размер ArrayList.contains(X)
-> Возвращает true, если элемент X существует в ArrayList.set(i, X)
-> Измените элемент, который находится в позиции i, на новый элемент X.remove(X)
-> Удаляет элемент X или, если это не так, элемент в позиции X.get(i)
-> Получает элемент в позиции i списка массивов.He tenido que borrar parte de la respuesta porque Ariel Octavio D'Alfeo fue mas rapido, parece que usted esta usando Nurse de una manera como un nodo/arbol que crea añade nodos, de una forma mucho mas simple y que no se igual pero, para que se entienda el ejemplo, aplicando su respuesta de Ariel usted puede hacer algo asi:
Tomese como pseudo code:
Main
Usted dice que no sabe cuantas, pero no se, si se refiere a que no sabe cuantas va a almacenar a lo largo de su programa, o a que se refiere, si es a que el usuario por CLI (por consola) usted le pide un numero y estas son las que añadira, si es asi solo tiene que cambiar el 10 por el valor que le pase el usuario.
Update:
segun leo tienes que usar
showNurse
una manera sencilla seria pasarle el Array:Para el otro
updateNurse
, le pasas el Array y el string que corresponda con el nif:Notas: Tomese todo esto como pseudo code no a sido testeado ni se a creado en ningun ide (syntax), tambien es muy posible que esta no sea la forma mas eficiente ni correcta pero creo que puede usarlo como base.
1) Ваш код примерно правильный (хорошо бы применить формат), но это зависит от того, какие требования к нему должны быть, он должен иметь три свойства?, метод для отображения данных?, метод для обновления?. Что требует ваш код? Исходя из этого, можно определить, является ли он хорошим и соответствует ли он поставленным задачам.
2) Чтобы создать несколько «медсестер», вам просто нужно создать новый экземпляр, который вы делаете в своей программе, используя:
new Nurse()
.например, добавим 3 экземпляра «Медсестра»: Сначала вы создаете список объектов типа «Медсестра»:
Вы создаете экземпляры Nurse:
и добавьте их в список, используя такой метод
add()
: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: