构造函数中的函数作为参数[尚未声明的对象]

时间:2016-09-16 03:00:53

标签: java

我在这里遇到了很大的问题

public class Attendant {

    //Max. amount = 10
    public int staffNum = 10;
    private String[] id;
    private boolean available;
    private attNm name;



    /**
     * @param staffNum
     * @param strings
     * @param available
     * @param name
     */
    public Attendant(int staffNum, String[] id, boolean available, attNm name) {
        this.staffNum = staffNum;
        this.id = id;
        this.available = available;
        this.name = name;
    }


    public String[] getID(){

        String[] tempArray = new String[staffNum];

        for(int x=0; x<staffNum;x++){
            tempArray[x] = ("Att" + (x+1));
            System.out.println(tempArray[x]);
            }

        return tempArray;
        }               
}

以上是我的专业课 就在下面是我的主要

public class Main {

    public static void main(String[] args) {

    }

    public static void createAtt(){

        for(int x=0; x<10;x++){
            Attendant att = new Attendant(x+1, att.getID(), true, attNm.Emma);
        }           
    }
}

我的问题是我需要从构造函数创建10个服务员。但这些ID来自服务员课程。从技术上讲,我认为我必须首先申报服务员。 但是这里需要从类中获取ID。 此外,它应该只在循环的每次迭代中获得一个ID。(每次迭代从数组中获取下一个ID)

如果可能的话: 有没有办法让enum类中的方法发送或使用,以便我可以将其称为参数。[在我的emma只是为了测试]

我真的不知道如何计算这些。 我在谷歌上找不到类似的东西。 请。

3 个答案:

答案 0 :(得分:1)

有太多事情需要照顾,即:

  1. 您的代码无法在main()为空时运行
  2. 您的Attendant课程不需要一系列ID。
  3. 这就是你的Attendant类应该是这样的:

    public class Attendant {
        private String id; // not an array
        // your rest of fields
    
        public Attendant(int staffNum, String id, boolean available, attNm name) {
            // modified --------------- ^^^^^^^^
        }
    
        //accessors, so on for the others
        public String getId() {
            return id;
        }
    }
    

答案 1 :(得分:1)

我认为您的主要方法为空,但我觉得一旦您的问题得到解决,您就会在其中编写代码。所以现在继续讨论你的问题。

问题原因 你正在做的错误是在创建一个试图从中提取东西的对象之前,因此引用引用null然后你想要在引用引用的对象(null)上执行一个方法。

<强>解决方案 消除循环依赖。对于对象创建,您需要调用getID()并调用您希望创建对象的getID()。 虽然有多种方法可以解决这个问题,但下面是解决问题的方法之一。

在课程getID()中将static method声明为Attendant.java,并将staffNum作为方法参数。现在您可以在不需要对象的情况下调用此方法。您只需要将dot operatorAttendant班级名称一起使用。

总结:

  1. getID()声明为static并添加staffNum作为参数。 public static String[] getID(int staffNum)

  2. 修改for循环中的代码。

  3. Attendant att = new Attendant(x+1, Attendant.getID(x+1), true, attNm.Emma);

答案 2 :(得分:1)

将你的getId()移动到你的主:

public class Main {

public static void main(String[] args) {

    int staffNum = 10;
    String []ids = getID(staffNum); 
    for(int x=0; x<staffNum;x++){
       Attendant att = new Attendant(x+1, ids[x], true, attNm.Emma);
    }
}



public static String[] getID(int staffNum){

  String[] tempArray = new String[staffNum];

  for(int x=0; x<staffNum;x++){
      tempArray[x] = ("Att" + (x+1));
      System.out.println(tempArray[x]);
  }

  return tempArray;
}

}
}

并且还要更改您的Attendant以获取String id而不是数组。

public Attendant(int staffNum, String id, boolean available, attNm name) {
   this.staffNum = staffNum;
   this.id = id;
   this.available = available;
   this.name = name;

}