Java 以对象数组为参数调用方法
您好,我在运行我的方法bugScan时遇到了问题,我想这是因为我已经将myBugs声明为一个对象数组。如果有人能给我任何提示或给我指出正确的解决方向,我将非常感激:以下是所有合适的课程:Java 以对象数组为参数调用方法,java,arrays,oop,object,Java,Arrays,Oop,Object,您好,我在运行我的方法bugScan时遇到了问题,我想这是因为我已经将myBugs声明为一个对象数组。如果有人能给我任何提示或给我指出正确的解决方向,我将非常感激:以下是所有合适的课程: package mainFuncs; import java.util.Scanner; public class aBug { String species, name; int x, y, energy, id, foodpref; char symbol; public void bugScan(
package mainFuncs;
import java.util.Scanner;
public class aBug {
String species, name;
int x, y, energy, id, foodpref;
char symbol;
public void bugScan(aBug[] bugObjects, Scanner scan) {
String inSpecies, inName;
int inX, inY, inEnergy, inId;
for(int i = 0; i < bugObjects.length; i++)
{
System.out.print("Species: ");
inSpecies = scan.nextLine();
System.out.print("Name: ");
inName = scan.nextLine();
System.out.print("X position: ");
inX = scan.nextInt();
System.out.print("Y position: ");
inY = scan.nextInt();
System.out.print("Energy: ");
inEnergy = scan.nextInt();
System.out.print("ID: ");
inId = scan.nextInt();
bugObjects[i].symbol = '*';
bugObjects[i].species = inSpecies;
bugObjects[i].name = inName;
bugObjects[i].x = inX;
bugObjects[i].y = inY;
bugObjects[i].energy = inEnergy;
bugObjects[i].id = inId;
}
}
}
我的问题发生在以下行:
myBugs.bugScanmyBugs,扫描;
如果出现错误消息无法调用bugScanaBug[],则阵列类型aBug[]上的扫描器将无法接受典型参数aBug。通过自己编写的类,名称应该以驼峰大小写,因此可能出现异常。问题在于您提到的行!! myBugs是一个数组,没有任何bugScan方法 应该是这样的
new aScan().bugScan(myBugs, scan);
您在aBug类中定义了该方法,但您试图在aBug对象数组上调用它!无论如何,我认为您可以从第一个类中取出Bugscapm方法,然后将其放在第二个类中
package mainFuncs;
import java.util.Scanner;
public class aBug {
String species, name;
int x, y, energy, id, foodpref;
char symbol;
}
二等舱:
package mainFuncs;
import java.util.Scanner;
public class mainMenu {
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
aBug[] myBugs = new aBug[5];
bugScan(myBugs, scan);
System.out.print("hi");
}
public static void bugScan(aBug[] bugObjects, Scanner scan) {
String inSpecies, inName;
int inX, inY, inEnergy, inId;
for(int i = 0; i < bugObjects.length; i++)
{
System.out.print("Species: ");
inSpecies = scan.nextLine();
System.out.print("Name: ");
inName = scan.nextLine();
System.out.print("X position: ");
inX = scan.nextInt();
System.out.print("Y position: ");
inY = scan.nextInt();
System.out.print("Energy: ");
inEnergy = scan.nextInt();
System.out.print("ID: ");
inId = scan.nextInt();
bugObjects[i].symbol = '*';
bugObjects[i].species = inSpecies;
bugObjects[i].name = inName;
bugObjects[i].x = inX;
bugObjects[i].y = inY;
bugObjects[i].energy = inEnergy;
bugObjects[i].id = inId;
}
}
}
myBugs是一个数组,因此您只能对其执行数组操作。您的方法bugScan是在aBug类中定义的。如果要运行它,可以通过执行以下操作来解决:
Bug tmp = new aBug();
tmp.bugScan(myBugs, scan);
但这闻起来像是糟糕的编码,aBug类不应该承担“扫描bug”的责任。
另请注意:通过转换,类名以大写字母开头,即使应用修复程序,也会引发NullPointerException,因为您从未初始化数组。myBugs是一个数组,没有任何方法Bugscan它们都来自同一个包mainFuncs。我从一个更大的程序中获取了这一问题,并将这两个类重写到它们自己的新包mainFuncs中,以尝试找出在编译中不重要的问题。感谢您的帮助:。但这不会导致NPE吗?我不这么认为:如果有,你应该以其他方式修复它!顺便说一句,我刚刚更新了我的答案谢谢!这需要将方法更改为静态方法,但这不是最佳解决方案吗?@EliasMalik,是的。记住永远接受答案。
Bug tmp = new aBug();
tmp.bugScan(myBugs, scan);