我有一个代码......但我有两个疑问。
没关系?这是我的第一个面向对象的程序,我不知道它是否 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
a 来存储您创建的每个实例的情况下:当您创建新护士时:
你像这样添加它:
您还可以使用
addNurse()
您创建的静态方法:或者有什么相同之处:
查看您的代码的一些补充:
ArrayList
它是因为即使您不使用它,您也已将其导入Nurse nurseA
Nurse
添加时更新它nurses.size()
,避免失控问题使用 main 方法和示例列表在 ideone 中查看此演示,您可以将其复制到您的 IDE 以在本地运行它,方法是取消注释通过控制台创建护士的行:
PS:祝你好运,问你需要什么;)
你可以创建一个 Nurse 类型的 ArrayList
等等
更多信息:
创建对象的 ArrayList 的语法如下:
ClaseDelObjeto
=> 我们将用来处理对象数据的类。NombreArrayList
=> 我们要操作的 ArrayList 的名称。以上是替换为我们想要和应该使用的名称的数据。要使用这种语法,我们必须导入必要的库来使用 ArrayList:
import java.util.ArrayList;
JAVA 中数组的有用方法
为了在 ArrayList 中执行常见的操作,例如输入、删除、搜索、修改数据,我们将找到一些有用的方法:
add(X)
-> 将值或对象添加到 ArrayList 的末尾。size()
-> 返回 ArrayList 的大小。contains(X)
-> 如果元素 X 存在于 ArrayList 中,则返回 true。set(i, X)
-> 修改位置 i 的元素,为新元素 X。remove(X)
-> 删除元素 X 或删除位置 X 处的元素。get(i)
-> 获取 Array List 的位置 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 类型的对象列表:
您创建 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: