2013-10-19 31 views
1

我有一个菜单系统,它将打印有关ArrayList的各种信息。在第三种情况下,我必须调用一个打印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

你知道静态和非静态方法之间的区别? –

+0

第一个错误:您正在从静态块调用非静态方法。你需要了解静态和非静态之间的区别。 – meghamind

+0

第二个错误:当一个方法返回void时,没有什么可以打印,printrecordnumber已经打印,你应该直接调用它。 – meghamind

回答

0

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

不能从静态调用非静态方法方法。 Here's更多关于为什么你不能这样做。 printrecordnumber()应该是一个静态方法。就像这样:

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));

你不能追加的空隙字符串。换句话说,printrecordnumber()应该返回一个Object。您可以从printrecordnumber返回列表的大小

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

这解决了我的问题。如果我想为我的ArrayList中的对象返回toString()方法,我会继续在另一种方法中以这种方式声明它吗? – Fluxxxy

+0

你会用'string'替换'int' @ user2897124 –

+0

@Mthethew为什么会这样? – SrikanthLingala

0

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

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

我想现在就解决了。 – Batty

0

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

否则您无法在打印功能中传递它,因为它不返回任何值。

其次,printrecordnumber应

public static int 
0

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

此外,找你可能调出一个静态方法的方法,无论是创建一个对象,或使该方法printrecordnumber静态以及

0

试试这个insted的:

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.ge tAge())该方法必须是静态的。

你也可以在你的方法返回一个int,然后你可以用字符串这样concatenat它:

case 3: 
     System.out.print("Number of records: " + printrecordnumber(vehiclearray)); 
     break; 

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

在第一个错误,printrecordnumber是一种无效的方法。因此,您需要创建该类的一个实例并使用它来访问该方法,例如x.printrecordnumber。 至于第二个例外,你需要做printrecordnumber回归方法能在情况下使用该3

+0

+1提到创建实例来调用方法而不是静态方法的唯一答案。 –

+0

这是一个,并写在所有这些简短的快速答案之前冲入:http://stackoverflow.com/questions/19469250/passing-an-arraylist-to-method-to-print-size/19469388#19469388 @AliAlamiri –

+0

@AliAlamiri我不同意。如果所有'printrecordnumber'确实是返回List的大小,为什么不把它设为静态。它节省了创建一个新的对象,只是为了获得列表的大小,即,除非OP在可以扩展的某个对象中具有此方法,并且可以覆盖'printrecordnumber'。 – SrikanthLingala

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));

虚空意味着该方法不返回任何东西,但在System.out.println它需要一个字符串。你不能简单地把System.out.println放入System.out.println。为了解决这个问题只是让你的方法返回一个INT(整数具有自动toString()方法内置),而不是打印到终端:

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

希望这有助于!

1

这个错误是由于如下原因:

  1. 您printrecordnumber的返回类型()是无效
  2. 你呼唤,从一个静态方法非静态方法(主)。

如下更改方法,它会工作

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