Java:在对象数组上设置变量

时间:2013-12-08 09:55:31

标签: java arrays object

public class ParkingLotApplication {

static Scanner input = new Scanner(System.in);
public static ParkingDescription[][] ParkingLot = new ParkingDescription[3][15];
public StudentDescription StudDesc = new StudentDescription();
static int i = 0;
static int j = 0;
static int parkLevel = 0;
static int parkSlot = 0;

public static void main(String[] args) {
    // TODO: Add your code here
    ParkingLotApplication PA = new ParkingLotApplication();
    PA.menu();
}

public void menu() {
    Scanner input = new Scanner(System.in);
    System.out.println("WELCOME TO CAR PARK SYSTEM");
    System.out.println("Enter your name: ");
    String nm = input.nextLine();
    System.out.println("Enter your password: ");
    int pass = input.nextInt();
    if ((nm.equals("admin12")) && (pass == 12345)) {
        Login();
    } else {
        menu();
    }
}

public void Login() {
    System.out.println("|----------------------------------|");
    System.out.println("|           Admin Menu             |");
    System.out.println("|----------------------------------|");
    System.out.println("|  N- New Registration             |");
    System.out.println("|  U- Update Data                  |");
    System.out.println("|----------------------------------|");
    char ch = input.next().charAt(0);
    switch (ch) {
        case 'N':
        case 'n':
            Reg();
            break;

        case 'U':
        case 'u':
            UpdatePark();
            break;


        default:
            System.out.println("Choose Again!");
            Login();
            break;
    }
}

public void Reg() {
    System.out.println();
    System.out.println("                               **Parking Lot**        ");
    System.out.println("    ________________________________________________________________________________");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 15; j++) {
            ParkingLot[i][j] = new ParkingDescription();
            System.out.print("   *   " + ParkingLot[i][j].getStatus());
        }
        System.out.println();
        System.out.println("    ********************************************************************************");
    }
    System.out.println("Please insert number 1-3 to choose the parking level");
    parkLevel = input.nextInt();
    System.out.println("Please insert number 1-15 to choose the parking slot");
    parkSlot = input.nextInt();

    //check available
    if (parkLevel == 1) {
        ParkingLot[0][parkSlot - 1] = new ParkingDescription();
        if (ParkingLot[0][parkSlot - 1].getAvailable() == true) {
            System.out.println("Please Enter tp: ");
            int tp = input.nextInt();
            System.out.println("Please Enter First Name: ");
            String ft = input.next();
            System.out.println("Please Enter Last Name: ");
            String lt = input.next();
            System.out.println("Please Enter Contact Number: ");
            int cn = input.nextInt();
            System.out.println("Please Enter Email Address: ");
            String ea = input.next();
            System.out.println("Please Enter Car Number: ");
            String cnb = input.next();
            System.out.println("Please Enter Date Registered : ");
            int date = input.nextInt();

            StudDesc.setStudDesc(tp, ft, lt, cn, ea, cnb, date);

            int pID = (parkLevel * 1000) + parkSlot;
            ParkingLot[0][parkSlot - 1].setPark(pID, false, StudDesc);
            System.out.println("Thanks");
            menu();
        } else {
            System.out.println("Sorry");
            menu();
        }
    } else if (parkLevel == 2) {
        ParkingLot[1][parkSlot - 1] = new ParkingDescription();
        if (ParkingLot[1][parkSlot - 1].getAvailable() == true) {
            System.out.println("Please Enter tp: ");
            int tp = input.nextInt();
            System.out.println("Please Enter First Name: ");
            String ft = input.next();
            System.out.println("Please Enter Last Name: ");
            String lt = input.next();
            System.out.println("Please Enter Contact Number: ");
            int cn = input.nextInt();
            System.out.println("Please Enter Email Address: ");
            String ea = input.next();
            System.out.println("Please Enter Car Number: ");
            String cnb = input.next();
            System.out.println("Please Enter Date Registered : ");
            int date = input.nextInt();

            StudDesc.setStudDesc(tp, ft, lt, cn, ea, cnb, date);

            int pID = (parkLevel * 1000) + parkSlot;
            ParkingLot[1][parkSlot - 1].setPark(pID, false, StudDesc);
            System.out.println("Thanks");
            menu();
        } else {
            System.out.println("Sorry");
            menu();
        }
    } else if (parkLevel == 3) {
        ParkingLot[2][parkSlot - 1] = new ParkingDescription();
        if (ParkingLot[2][parkSlot - 1].getAvailable() == true) {
            System.out.println("Please Enter tp: ");
            int tp = input.nextInt();
            System.out.println("Please Enter First Name: ");
            String ft = input.next();
            System.out.println("Please Enter Last Name: ");
            String lt = input.next();
            System.out.println("Please Enter Contact Number: ");
            int cn = input.nextInt();
            System.out.println("Please Enter Email Address: ");
            String ea = input.next();
            System.out.println("Please Enter Car Number: ");
            String cnb = input.next();
            System.out.println("Please Enter Date Registered : ");
            int date = input.nextInt();

            StudDesc.setStudDesc(tp, ft, lt, cn, ea, cnb, date);

            int pID = (parkLevel * 1000) + parkSlot;
            ParkingLot[2][parkSlot - 1].setPark(pID, false, StudDesc);
            System.out.println("Thanks");
            menu();
        } else {
            System.out.println("Sorry");
            menu();
        }
    }
}

public void UpdatePark() {
    System.out.println();
    System.out.println("                                     **Parking Lot**                   ");
    System.out.println("    ________________________________________________________________________________");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 15; j++) {
            ParkingLot[i][j] = new ParkingDescription();
            System.out.print("   *   " + ParkingLot[i][j].getStatus());
        }
        System.out.println();
        System.out.println("    ********************************************************************************");
    }
    System.out.println("Please insert number 1-3 to choose the parking level");
    parkLevel = input.nextInt();
    System.out.println("Please insert number 1-15 to choose the parking slot");
    parkSlot = input.nextInt();

    //check available
    if (parkLevel == 1) {
        ParkingLot[0][parkSlot - 1] = new ParkingDescription();
        if (ParkingLot[0][parkSlot - 1].getAvailable() == false) {
            ParkingLot[0][parkSlot - 1].showDetails();
            menu();
        } else {
            System.out.println("Sorry");
            menu();
        }
    } else if (parkLevel == 2) {
        ParkingLot[1][parkSlot - 1] = new ParkingDescription();
        if (ParkingLot[1][parkSlot - 1].getAvailable() == true) {
            ParkingLot[1][parkSlot - 1].showDetails();
            menu();
        } else {
            System.out.println("Sorry");
            menu();
        }
    } else if (parkLevel == 3) {
        ParkingLot[2][parkSlot - 1] = new ParkingDescription();
        if (ParkingLot[2][parkSlot - 1].getAvailable() == true) {
            ParkingLot[2][parkSlot - 1].showDetails();
            menu();
        } else {
            System.out.println("Sorry");
            menu();
        }
    }
}
  }

//Class parking description
public class ParkingDescription {

public static int StudID, ParkSpaceID, DReg;
public static String Status, CNum;
 public static Boolean Available = true;

  public ParkingDescription() {
// TODO: Add your code here
 }

public void setPark(int parkSpaceID, Boolean available, StudentDescription StDe)
{
  this.StudID = StDe.getStudentID();
  this.CNum = StDe.getCarNumber();
  this.DReg = StDe.getDateReg();
  this.ParkSpaceID = parkSpaceID;
  this.Available = available;
}

public Boolean getAvailable()
{
  return Available;
}

public String getStatus()
{
  if(Available == false){
    return "1";
  } else {
    return "0";
  }
}

  public void showDetails()
{
  //generate report
  System.out.println("Student ID : TP"+StudID);
  System.out.println();
  System.out.println("Car Number : "+CNum);
  System.out.println();
  System.out.println("Parking Space : L"+ParkSpaceID);
  System.out.println();
  System.out.println("Date Register : "+DReg);
}
}
 //Student class

 public class StudentDescription {

 public int StudentID, CNumber, DateReg;
 public String FName, LName, EMail, CarNum;

 public StudentDescription() {
// TODO: Add your code here
 }
   public void setStudDesc(int studentID, String fName, String lName, int cNumber, String eMail, String carNum, int dateReg)
{
  this.StudentID = studentID;
  this.FName = fName;
  this.LName = lName;
  this.CNumber = cNumber;
  this.EMail = eMail;
  this.CarNum = carNum;
  this.DateReg = dateReg;
}

public int getStudentID()
{
  return this.StudentID;
}

public String getCarNumber()
{
  return this.CarNum;
}

public int getDateReg()
{
  return this.DateReg;
}
 }

我有这个问题。当我想将一个停车细节对象设置为ParkingLot数组时,该数组将在所有数组上插入相同的数据信息。输出假设是这样的:

**Parking Lot**                   
*   1   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0  *   0   *   0   *   0   *   0
*   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0     *   0   *   0   *   0   *   0
*   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0   *   0

但我将所有输出设置为1.那么如何解决这个问题呢?感谢..

1 个答案:

答案 0 :(得分:1)

还有很多代码没有显示,例如ParkingDescription类的代码。但根据你所展示的......

在打印出所有状态的代码块中(由于某种原因,您已编码两次 - 一次在Reg中,一次在UpdatePark中),您将填充数组45个新ParkingDescription个对象,并打印每个对象的状态。也就是说,你丢弃了之前所有的ParkingDescription个对象,只打印了全新的对象。你真的不想这样做,因为它是存储用户输入的所有数据的ParkingDescription个对象。

我猜你得到全1,因为1是新ParkingDescription的状态。

<强>更新

现在您已经展示了ParkingDescription课程了,我发现问题在于您已将其字段声明为static。这意味着每个字段只有一个副本,在此类的所有实例之间共享。从字段声明中删除单词static,问题应该修复。

下次您在Stack Overflow上发布问题时,我强烈建议您在首次发布问题时发布所有代码。不要只发布你认为该错误的部分,因为如果你错了就浪费每个人的时间。