我有一个菜单系统,可以打印有关ArrayList的各种信息。在我的第三种情况下,我必须调用一个方法来打印arraylist的大小。我试图调用的方法是同一个类的一部分。这些是我收到的错误消息。我该如何解决这些问题?
错误:
non-static method printrecordnumber(ArrayList<vehicle>) cannot be referenced from a static context
case 3: System.out.println("Number of records: " + printrecordnumber(vehiclearray));
错误:
'void' type not allowed here
case 3: System.out.println("Number of records: " + printrecordnumber(vehiclearray));
这是我的代码:
//Menu System
do{
System.out.println("Enter number of option or stop to stop the program\n1. Print all data\n2. Print all data (Sorted)\n3. Print number of records\n4. Print Bicycles and Trucks from the sorted data\n5. Print vehicles from area code 987");
try{
String option = input.next();
if((option.equals("stop"))) {
System.exit(0);
}
int optionint = Integer.parseInt(option);
switch (optionint){
case 1:
break;
case 2:
break;
case 3:
System.out.println("Number of records: " + printrecordnumber(vehiclearray));
break;
case 4:
break;
case 5:
break;
}
}
catch (NumberFormatException e){}
}while(true);
//Main Method Ending Bracket
}
public void printrecordnumber(ArrayList<vehicle> vehiclearray){
System.out.println(vehiclearray.size());
}
答案 0 :(得分:1)
在第一个错误中,printrecordnumber是一个void方法。因此,您需要创建该类的实例并使用它来访问该方法,例如x.printrecordnumber。 至于第二个例外,你需要使printrecordnumber成为一个返回方法,以便能够在案例3中使用它
答案 1 :(得分:1)
error: non-static method printrecordnumber(ArrayList) cannot be referenced from a static context case 3: System.out.println("Number of records: " + printrecordnumber(vehiclearray));
“静态方法属于类本身,非静态(或实例)方法属于从该类生成的每个对象。如果您的方法执行的操作不依赖于其类的各个特征,使它静态(它将使程序的足迹更小)。否则,它应该是非静态的。“ - Static method vs. Non static methods
要修复此错误,只需将方法设为静态:
public static void printrecordnumber(ArrayList<vehicle> vehiclearray){
System.out.println(vehiclearray.size());
}
现在转到第二个错误:
error: 'void' type not allowed here case 3: System.out.println("Number of records: " + printrecordnumber(vehiclearray));
Void意味着该方法不返回任何内容,但在System.out.println
中它需要一个String。您不能简单地将System.out.println
放入System.out.println
。要解决这个问题,只需让你的方法返回一个int(内置一个自动的toString()方法)而不是打印到终端:
public static int printrecordnumber(ArrayList<vehicle> vehiclearray){
return vehiclearray.size();
}
希望这有帮助!
答案 2 :(得分:1)
此错误原因如下:
按如下方式更改您的方法,它将起作用
public static int printrecordnumber(ArrayList<vehicle> vehiclearray){
return vehiclearray.size();
}
答案 3 :(得分:0)
错误:非静态方法printrecordnumber(ArrayList)不能 从静态上下文案例3引用:System.out.println(“Number of 记录:“+ printrecordnumber(vehiclearray));
您无法从静态方法调用非静态方法。 Here's更多关于为什么你不能这样做的原因。 printrecordnumber()
应该是一个静态方法。像这样:
public static void printrecordnumber(ArrayList<vehicle> vehiclearray){
System.out.println(vehiclearray.size());
}
错误:此处不允许使用'void'类型案例3:System.out.println(“Number 记录:“+ printrecordnumber(vehiclearray));
你不能在String中附加一个void。换句话说,printrecordnumber()应该返回一个Object。您可以从printrecordnumber返回List的大小
public static int printrecordnumber(ArrayList<vehicle> vehiclearray){
return vehiclearray.size();
}
答案 4 :(得分:0)
将printrecordnumber的返回类型更改为int。 并使其静态引用其他静态方法。 使用
public static int printrecordnumber(ArrayList<vehicle> vehiclearray)
{
return vehiclearray.size();
}
答案 5 :(得分:0)
您的函数printrecordnumber必须返回一个整数。
否则你无法在print函数中传递它,因为它不会返回任何值。
其次,printrecordnumber应该是
public static int
答案 6 :(得分:0)
你打印void
,在String
中返回printrecordnumber
(或int或long),而不是将其打印到控制台。
此外,你可能用静态方法调用方法,要么创建一个对象,要么使方法printrecordnumber
也是静态的
答案 7 :(得分:0)
试试这个:
case 3:
System.out.print("Number of records: ");
printrecordnumber(vehiclearray);
break;
和
public static void printrecordnumber(ArrayList<vehicle> vehiclearray){
System.out.println(vehiclearray.size());
}
在第一种情况下,你不能将void与一个字符串连接起来,而在第二种情况下,如果你没有一个你的方法作用的对象(来自John.getAge()),那么该方法必须是静态的
您还可以在方法中返回一个int,然后可以将其与字符串连接起来:
case 3:
System.out.print("Number of records: " + printrecordnumber(vehiclearray));
break;
和
public static int printrecordnumber(ArrayList<vehicle> vehiclearray){
return vehiclearray.size();
}