1

我有一个菜单系统,可以打印有关 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());
}
4

8 回答 8

1

在第一个错误中, printrecordnumber 是一个 void 方法。因此,您需要创建该类的一个实例并使用它来访问方法 egxprintrecordnumber。至于第二个异常,您需要将 printrecordnumber 设置为返回方法才能在案例 3 中使用它

于 2013-10-19T18:13:51.473 回答
1

error: non-static method printrecordnumber(ArrayList) cannot be referenced from a static context case 3: System.out.println("Number of records: " + printrecordnumber(vehiclearray));

“静态方法属于类本身,非静态(或实例)方法属于从该类生成的每个对象。如果您的方法所做的事情不依赖于其类的个别特征,请制作它静态(它会使程序的占用空间更小)。否则,它应该是非静态的。” -静态方法与非静态方法

要修复此错误,只需将方法设为静态:

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其中需要一个字符串。您不能简单地将 a 放入 aSystem.out.printlnSystem.out.println。要解决这个问题,只需让您的方法返回一个 int(ints 有一个内置的自动 toString() 方法)而不是打印到终端:

public static int printrecordnumber(ArrayList<vehicle> vehiclearray){
   return vehiclearray.size();
}

希望这可以帮助!

于 2013-10-19T18:15:17.220 回答
1

此错误是由于以下原因造成的:

  1. 您的 printrecordnumber() 的返回类型为 void
  2. 您正在从静态方法(主要)调用非静态方法。

如下更改您的方法,它将起作用

public static int printrecordnumber(ArrayList<vehicle> vehiclearray){
    return vehiclearray.size();
}
于 2013-10-19T18:15:31.157 回答
0

错误:无法从静态上下文中引用非静态方法 printrecordnumber(ArrayList) 案例 3:System.out.println("记录数:" + printrecordnumber(vehiclearray));

您不能从静态方法调用非静态方法。这里有更多关于为什么你不能这样做。printrecordnumber()应该是静态方法。像这样:

public static void printrecordnumber(ArrayList<vehicle> vehiclearray){
   System.out.println(vehiclearray.size());
}

error: 'void' type not allowed here case 3: System.out.println("记录数:" + printrecordnumber(vehiclearray));

您不能将 void 附加到字符串。换句话说, printrecordnumber() 应该返回一个对象。您可以从 printrecordnumber 返回列表的大小

public static int printrecordnumber(ArrayList<vehicle> vehiclearray){
   return vehiclearray.size();
}
于 2013-10-19T18:06:07.527 回答
0

将 printrecordnumber 的返回类型更改为 int。并使其静态以从其他静态方法中引用。利用

public static int printrecordnumber(ArrayList<vehicle> vehiclearray)
{
    return vehiclearray.size();
}
于 2013-10-19T18:06:56.970 回答
0

您的函数 printrecordnumber 必须返回一个整数。

否则你不能在 print 函数中传递它,因为它不返回任何值。

二、printrecordnumber应该是

public static int
于 2013-10-19T18:07:11.220 回答
0

你正在打印void,返回一个String(或int,或long)printrecordnumber而不是将它打印到控制台。

此外,您可能会从静态方法中调用该方法,或者创建一个对象,或者也使该方法printrecordnumber成为静态方法

于 2013-10-19T18:07:14.337 回答
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();
}
于 2013-10-19T18:08:28.817 回答