不兼容的类型? - Java

时间:2014-01-28 23:22:09

标签: java

制作此方法时出现不兼容类型错误消息。该方法假设将指定的元素插入列表的指定索引,但它不会覆盖该位置的任何现有数据。此方法允许添加到列表末尾之外的第一个索引。例如,如果列表的大小为10,则索引9是其逻辑结尾,但此方法允许在索引10处添加元素。

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”放入数组的这个插槽中。

6 个答案:

答案 0 :(得分:2)

您从未初始化变量copyArray。

答案 1 :(得分:1)

不应该是myArray[index] = element吗?

  • 那么在索引位置及其后的列表中已有的项目呢?你应该交换物品,还是插入并将其他一切移到右边?
  • 你在哪里初始化你的copyArray变量?它似乎是null并且始终保持为null。
  • 当方法结束且copyArray变量超出范围并消失时会发生什么?

答案 2 :(得分:1)

你得到的错误非常明显。 您不能使用除int或Integer之外的任何内容作为数组索引。

在您的代码中,您一定要使用

myArray[index] = element;

如果您想使用Java Object作为索引,您可能会阅读有关Map s的内容。简而言之,Maps是数组,其中索引可以是任意类型(原始类型除外 - int,float等)。

答案 3 :(得分:0)

数组索引总是int,所以你不能说

copyArray [index] = copyArray [element];

它会失败,因为copyArray [element]意味着在没有意义的元素索引处的copyArray

答案 4 :(得分:0)

这对我没有意义。除了你试图使用一个对象作为数组索引整数“copyArray [element]”这是非法语法的事实,你也是从0到2 *循环数组的长度,然后尝试访问该数组在超出数组边界的索引处。通过用int替换该对象来修复“不兼容类型”错误时,只要调用此方法,就会开始获取ArrayOutOfBounds异常。

答案 5 :(得分:0)

当您尝试在给定索引处访问数组的对象时,您必须使用整数。

现在你正在使用一个没有意义的物体。想象一下,您调用此方法以及现在用户可以通过传递add(3,“cat”)来调用它的方式。

当你到达这一行时:     copyArray [index] = copyArray [element];

你在copyArray [3]上说的是赋值copyArray [“cat”] ......什么?????

我认为你需要的是:     copyArray [index] = element;

另一条线也一样。

copyArray未初始化:使用数组时,必须对其进行初始化,以便编译器知道它应分配多少内存。目前你有Object [] copyArray;您需要指定所需数组的长度,例如。 Object [] copyArray = new Object [10];