2013-10-19 65 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(); 
}