Java 构造函数中的函数作为参数[尚未声明对象]
我这里有个大问题Java 构造函数中的函数作为参数[尚未声明对象],java,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
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;
}
}
公共类助理{
//最大金额=10
公共int staffNum=10;
私有字符串[]id;
私有布尔值可用;
私人attNm名称;
/**
*@param staffNum
*@param字符串
*@param可用
*@param name
*/
公共助理(int staffNum,String[]id,布尔值可用,attNm名称){
this.staffNum=staffNum;
this.id=id;
this.available=可用;
this.name=名称;
}
公共字符串[]getID(){
String[]tempArray=新字符串[staffNum];
对于(int x=0;x而言,有太多的事情需要处理,即:
由于main()为空,您的代码将无法运行
您的Attendant类不需要ID数组
这是您的助理课程的外观:
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;
}
}
我认为你的主要方法是空的,但我觉得一旦你的问题得到解决,你就会在其中编写代码。所以现在继续讨论你的问题
问题原因
您所犯的错误是,在创建对象之前,您试图从中提取一些内容,因此引用引用null,然后您希望在引用引用的对象(null)上执行方法
解决方案
分离循环依赖项。要创建对象,需要调用getID()
,要调用getID()
,需要创建对象。
虽然有多种方法可以解决这个问题,但下面是您可以解决问题的方法之一
在classAttendant.java
中将getID()
声明为static方法
,并将staffNum
作为方法参数。现在您可以调用此方法而无需对象。只需将点运算符
与Attendant
类名一起使用即可
总结:
将getID()
声明为static
并将staffNum
添加为参数。
公共静态字符串[]getID(int staffNum)
修改for循环内部的代码
Attendant att=new Attendant(x+1,Attendant.getID(x+1),true,attNm.Emma);
将您的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;
}
}
}
}非常确定您没有测试代码,这一行有语法错误:String[]ids=getID();
可能是这里需要的ID,这是一个数组。请参阅下面我的答案,()希望这将有助于您了解问题的原因和可能的解决方案,这将有助于本案例和未来的其他此类场景。如果您的问题得到解决,您可以将答案标记为已接受。
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;
}
}
}
public Attendant(int staffNum, String id, boolean available, attNm name) {
this.staffNum = staffNum;
this.id = id;
this.available = available;
this.name = name;