2013-03-04 109 views
0

我嘗試編寫基於這些指令的方法時出現不兼容的類型錯誤:「一種方法需要一個int參數並在屏幕上顯示細節(名稱,出生年份等),該方法必須確保參數是有效的索引位置,如果不是,則顯示錯誤消息。 (在程序中有兩個相互使用的類別)。我已經評論我在下面的錯誤。我希望得到一些幫助。謝謝。不知道爲什麼我得到不兼容的類型

import java.util.ArrayList; 


public class Cattery 
{ 
// instance variables - replace the example below with your own 
private ArrayList <Cat> cats; 
private String businessName; 

/** 
* Constructor for objects of class Cattery 
*/ 
public Cattery(String NewBusinessName) 
{ 
    cats = new ArrayList <Cat>(); 
    NewBusinessName = businessName; 
} 

public void addCat(Cat newCat){ 

    cats.add(newCat); 
} 

public void indexDisplay(int index) { 
    if((index >= 0) && (index <= cats.size()-1)) { 
     index = cats.get(index);      //incompatible types? 
     System.out.println(index); 
    } 
    else{ 
     System.out.println("Invalid index position!"); 
    } 
} 

public void removeCat(int indexremove){ 
    if((indexremove >= 0) && (indexremove <= cats.size()-1)) { 
     cats.remove(indexremove); 
     } 
    else{ 
     System.out.println("Invalid index position!"); 
    } 
    } 

public void displayNames(){ 
    System.out.println("The current guests in Puss in Boots Cattery:"); 
    for(Cat catNames : cats){ 
     System.out.println(catNames.getName()); 

} 
} 
} 
+0

您使用'cats.add( newCat);''你不能指望用'cats.get(index);' – A4L 2013-03-04 09:08:43

回答

2

因爲你已經定義的貓是這樣的:

cats = new ArrayList <Cat>(); 

這將在index位置返回貓:

cats.get(index); 

但你已經定義指數爲int並assignign一貓去它:

index = cats.get(index); 

正確的方法從列表中獲得一個產品:

Cat cat = cats.get(index); 

要打印檢索到的貓的名字,只需運行:

System.out.println(cat.getName()); 
1

cats.get()回報Cat,和你想分配結果到int

index = cats.get(index);      //incompatible types? 

目前還不清楚該功能的目的是什麼,但喲ü可以存儲結果的cats.get()像這樣:

Cat cat = cats.get(index); 
+0

得到別的東西似乎不起作用。當我調用方法時,它只顯示文字參數輸入,而不是顯示貓的信息。 – 2013-03-04 09:12:43

+0

@JoshuaBaker:你在印刷'索引'還是'貓'? – NPE 2013-03-04 09:13:23

+0

我嘗試了兩個。當我打印索引時,我得到了文字參數輸入。當我輸入貓,當調用方法是顯示一些奇怪的東西,如「貓@ 68c6fc84」 – 2013-03-04 09:17:32

2

問題在此聲明:

index = cats.get(index); 

cats.get(指數)返回一個貓的對象。其中索引是int類型。 cat對象不能分配給int類型變量。因此它顯示類型不兼容。

一種解決方案是要做到這一點:

Cat cat = cats.get(index); 

並打印由上面的語句返回的貓,你可以在貓類中重寫toString()

做到以下幾點:

public String toString() 
{ 
    return "cat name: " + this.getName(); 
} 

使用以下語句打印Cattery信息中的Cat信息

System.out.println(cat); 
1

好了,所以在這條線:

index = cats.get(index);  

你在期待cats.get(index)返回?catsArrayList<Cat>型的 - 所以你應該找到的文檔ArrayList<E>,然後導航到get方法,並看到它的聲明如下:

public E get(int index) 

所以在ArrayList<Cat>,該get方法將返回Cat

所以,你想:

Cat cat = cats.get(index); 
0

聲明

index = cats.get(index); 

將返回貓項這裏就不再返回int值 烏爾指定目錄項爲int類型,因此爲了得到正確的輸出u hava將代碼更改爲

Cat cat=cats.get(index); 
相關問題