将对象添加到对象数组,然后从数组中打印出对象

时间:2014-10-15 20:27:08

标签: java arrays object

这基本上是一个添加或尝试将患者细节添加到对象数组的程序。患者是在医院建设者中创建的。

import java.util.*;

public class Hospital {

public static String firstName;
public static String lastName;
public static int patientID = 1;
public static int phoneNum;
private static int i = 0;
private static Hospital[] hosArray = new Hospital[100];

public Hospital(){
    firstName = "";
    lastName = "";
    patientID = 0;
    phoneNum = 0;
}

public Hospital (String fName, String lName, int pID, int pNum){
    firstName = fName;
    lastName = lName;
    patientID = patientID++;
    phoneNum = pNum; 
}

public static void scanner(){

系统会提示用户添加姓氏,姓氏,电话号码等内容。

    Scanner user = new Scanner(System.in);
    System.out.print("Enter 1 to add patient: ");
    int input = user.nextInt();

    if (input == 1){
    System.out.print("Enter first name: ");
    String fName = user.next();

    System.out.print("Enter last name: ");
    String lName = user.next();

    System.out.print("Enter phone number: ");
    int pNum = user.nextInt();

这是我尝试将每个新对象添加到数组中的地方,它似乎可以工作。当我添加一名患者时 它打印出那个病人。但是,当我尝试添加多个患者时 然后,我输入的最后一名患者打印出与患者数量相同的次数 我试图进入。 :

    if(hosArray[i] == null){
    hosArray[i] = new Hospital();
    hosArray[i] = new Hospital(fName, lName, Hospital.patientID, pNum);
    i++;
    }
    scanner();
    }
}

public int getpID(){
    return patientID;
}

public static void main(String[] args) {
    scanner();

    for (int j = 0; j < hosArray.length; j++){
        if (hosArray[j] != null )
        {
            System.out.println(hosArray[j].firstName);
        }
    }
}
}

这是我程序的输出。

Enter 1 to add patient: 1
Enter first name: joe
Enter last name: bloggs
Enter phone number: 1234
Enter 1 to add patient: 1
Enter first name: john
Enter last name: doe
Enter phone number: 4321
Enter 1 to add patient: 0
john
john

对于我的生活,我无法理解为什么它不打印阵列,我会很感激 帮助我,我可以得到。感谢。

2 个答案:

答案 0 :(得分:0)

问题是你将firstName和lastName patientID和phoneNumber定义为静态变量。每次添加新对象时,您都要设置这些变量,但该类的所有其他对象共享变量,因为它们是静态的。只有您输入的最后一位患者才会显示所有打印输出,因为静态变量由该类的所有对象共享。

我修复了你的代码,所以它会做你想做的事情,但代码仍然有些问题。对于所有患者,所有患者将具有相同的id = 1。

public class Hospital {

    public String firstName;
    public String lastName;
    public static int patientID = 1;
    public int phoneNum;
    private static int i = 0;
    private static Hospital[] hosArray = new Hospital[100];

    public Hospital() {
        firstName = "";
        lastName = "";
        patientID = 0;
        phoneNum = 0;
    }

    public Hospital(String fName, String lName, int pID, int pNum) {
        firstName = fName;
        lastName = lName;
        patientID = patientID++;
        phoneNum = pNum;
    }

    public static void scanner() {
        Scanner user = new Scanner(System.in);
        System.out.print("Enter 1 to add patient: ");
        int input = user.nextInt();

        if (input == 1) {
            System.out.print("Enter first name: ");
            String fName = user.next();

            System.out.print("Enter last name: ");
            String lName = user.next();

            System.out.print("Enter phone number: ");
            int pNum = user.nextInt();
            if (hosArray[i] == null) {
                hosArray[i] = new Hospital();
                hosArray[i] = new Hospital(fName, lName, Hospital.patientID,
                        pNum);
                i++;
            }
            scanner();
        }
    }

    public int getpID() {
        return patientID;
    }

    public static void main(String[] args) {
        scanner();

        for (int j = 0; j < hosArray.length; j++) {
            if (hosArray[j] != null) {
                System.out.println(hosArray[j].firstName);
            }
        }
    }
}

答案 1 :(得分:0)

您在Hospital类中使用静态变量。这些变量在所有Hospital对象之间共享,因此当您更新名称时,所有Hospital对象都将具有相同的名称。从每个Hospital对象的唯一属性中删除static,例如name,patiendID等。