有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不兼容的类型?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”


共 (3) 个答案

  1. # 1 楼答案

    不是应该改成myArray[index] = element

    • 那么索引位置和其他位置已经在列表中的项目呢?你是要交换物品,还是把其他东西插入并移到右边
    • 在哪里初始化copyArray变量?它似乎是空的,并且始终保持空
    • 当方法结束,copyArray变量超出范围并消失时会发生什么
  2. # 2 楼答案

    你得到的错误是不言而喻的。 不能使用int或Integer以外的任何内容作为数组索引

    在你的代码中,你绝对应该使用

    myArray[index] = element;
    

    如果您想使用Java对象作为索引,您可以阅读一些关于Map的内容。简而言之,映射是数组,在数组中,索引可以是任意类型(除了基本类型,如int、float等)

  3. # 3 楼答案

    这对我来说毫无意义。除了试图将对象用作数组索引整数“copyArray[element]”(这是非法语法)之外,还尝试从数组长度的0到2*循环,然后尝试在超出数组边界的索引处访问该数组。当您通过用int替换该对象来修复“Compatible types”错误时,无论何时调用该方法,您都将开始获得ArrayOutOfBounds异常