2014-01-28 147 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