2014-01-28 210 views
-3

製作此方法時出現不兼容的類型錯誤消息。該方法假定在列表的指定索引處插入已標記的元素,但不會覆蓋該位置處的任何現有數據。此方法確實允許在列表末尾添加第一個索引。例如,如果列表的尺寸爲10,索引9是它的邏輯端但這種方法允許在索引10不兼容的類型? - Java

public void add(int index, java.lang.Object element) 
{ 
    int tempCap = myArray.length; 
    Object[] copyArray; 
    int count; 

    if(tempCap < index) 
    { 
     tempCap = tempCap * 2; 

     for(int i = 0; i < tempCap; i++) 
     { 
     copyArray[i] = myArray[i]; 
     } 

     copyArray[index] = copyArray[element]; 
    } 

    else 
    { 
     myArray[index] = myArray[element]; 
    } 
} 

錯誤消息添加的元素:如果索引

BasicArrayList.java:53: incompatible types 
    found : java.lang.Object 
    required: int 
     copyArray[index] = copyArray[element]; 
            ^

    BasicArrayList.java:57: incompatible types 
    found : java.lang.Object 
    required: int 
     myArray[index] = myArray[element]; 
           ^

已經被數據佔用,假設陣列中有足夠的容量,陣列應該轉移以爲新條目騰出空間。如果沒有足夠的容量,則應該將數組複製到新數組,並且新數組應該具有舊數組容量的兩倍。

另外,我不確定它們爲什麼不相容。我需要使用包裝類嗎?我想在這些代碼行中說「把這個元素,不管它是一個字符串,int,double還是char」放到這個數組的這個槽中。

+1

如果'element'是一個對象,爲什麼你會像'int'一樣使用它? – AntonH

+0

再想一想...它是什麼元素,以及'copyArray [element]'是什麼意思? – Darkhogg

+1

仔細閱讀錯誤消息。你有什麼類型,編譯器需要什麼類型?他們爲什麼不同意? – user2864740

回答

1

難道不是myArray[index] = element

  • 那麼索引位置和以後的列表中已有的項目呢?你應該交換項目,還是插入並將其他所有內容移動到右側?
  • 你在哪裏初始化你的copyArray變量?它似乎是空的,並始終保持空白。
  • 當方法結束並且copyArray變量超出範圍並消失時會發生什麼?
+0

感謝您的快速響應,我編輯了原始帖子,以便更詳細一點。對不起傢伙,新手到java這裏,和新的堆棧溢出。真的很感謝幫助。 – user3246699

1

你得到的錯誤是不言自明的。 除int或Integer之外,不能使用其他任何內容作爲數組索引。

在你的代碼一定要使用

myArray[index] = element; 

如果你想使用Java對象爲索引,你可以閱讀一些有關Map秒。簡而言之,Maps是數組,其索引可以是任意類型(除了基本類型 - int,float等)

2

您從未初始化變量copyArray。

+0

這將是一個運行時錯誤。然而好評。 – LisuBB

+0

當我說Object [] copyArray; ? – user3246699

+0

請參閱下面的答案,您需要聲明數組的長度或爲初始數組提供值。 – SeekingAlpha

0

數組索引總是詮釋所以不能說

copyArray [索引] = copyArray [元件];

這將失敗,因爲copyArray [元]指copyArray這沒有道理

0

這是沒有意義的我元素的索引。除了你試圖使用一個對象作爲數組索引整數「copyArray [element]」,這是非法的語法,你也在循環從0到2 *長度的數組,然後試圖訪問該數組在超出數組邊界的索引處。當通過用int替換該對象來解決「不兼容類型」錯誤時,每當調用此方法時,您都將開始獲取ArrayOutOfBounds異常。

0

當您嘗試訪問給定索引處的數組對象時,您必須使用整數。

現在你正在使用一個沒有意義的對象。想象一下,你調用這個方法和現在的方式,用戶可以通過傳遞add(3,「cat」)來調用它。

當你到達這條線時: copyArray [index] = copyArray [element];

你在說copyArray [3]賦值copyArray [「cat」] ...什麼?

我認爲你需要的是: copyArray [index] = element;

相同的另一行。

copyArray未初始化:處理數組時,必須初始化它,以便編譯器知道它應該分配多少內存。此刻你有Object [] copyArray;你需要指定你需要的數組長度。 Object [] copyArray = new Object [10];

+0

謝謝,現在試圖弄清楚爲什麼它告訴我copyArray從來沒有初始化......我以爲我在第四行初始化它? – user3246699

+0

try:Object [] copyArray = new Object [size_of_your_array]; – SeekingAlpha