我需要将mysql DB调用中的结果用作INT数组。问题是,当我通过IntegerList通过ResultSet检索数据,然后使用“ ArrayUtils.toPrimitive”时,我无法执行ArrayUtils.removeElement。
但是,如果我只是创建一个数组,那么我可以删除元素。

这是我的意思:

       List<Integer> rowValues = new ArrayList<>();
String MySqlResultStr;
      ResultSet rs = stmt.executeQuery(sql);
      while (rs.next()) {
          int gematria = rs.getInt("gematria");
          rowValues.add(rs.getInt(1));
       }
int[] GematriaIntArray = ArrayUtils.toPrimitive(rowValues.toArray(new Integer[0]));
System.out.println("Contents Pre: " + GematriaIntArray.length);
GematriaIntArray = ArrayUtils.removeElement(GematriaIntArray, 1);
System.out.println("Contents Pst: " + GematriaIntArray.length);
int GematriaIntArraySize = GematriaIntArray.length;
int GematriaIntTempArraySize = GematriaIntArray.length;;
int GematriaSum = 0;
int PerekIndent = 0;
for (int i = 1; i < (GematriaIntArraySize +1); i++)
{
    for (int j = 0; j < GematriaIntTempArraySize; j++)
    {
        GematriaSum = GematriaSum + GematriaIntArray[j];
        System.out.println(GematriaSum + "," + (i+PerekIndent) + "," + (i+j+PerekIndent));
    }
    GematriaSum = 0;
//--The line below does not work!
GematriaIntArray = ArrayUtils.removeElement(GematriaIntArray, i);
    GematriaIntTempArraySize = GematriaIntArray.length;
}


vs:

int[] GematriaIntArray = {1,2,3,4,5};
        System.out.println("Contents Pre: " + GematriaIntArray.length);
        GematriaIntArray = ArrayUtils.removeElement(GematriaIntArray, 1);
        System.out.println("Contents Pst: " + GematriaIntArray.length);

最佳答案

您正在索引数组之外。假设您有一个包含单个元素的数组(我将使用小写的变量名):

for (int i = 1; i < (gematriaIntArraySize +1); i++)
{
    //omitted some code
    //--The line below does not work!
    gematriaIntArray = ArrayUtils.removeElement(gematriaIntArray, i);
}


您要ArrayUtils从数组中删除元素1,尽管它只有一个元素。使用ArrayUtils.removeElement(gematriaIntArray, i - 1)并在每次迭代中计算数组的长度。遵循以下原则:

for (int i = 1; i < (gematriaIntArray.length +1); i++)
{
    for (int j = 0; j < gematriaIntTempArraySize; j++)
    {
        gematriaSum = gematriaSum + gematriaIntArray[j];
        System.out.println(gematriaSum + "," + (i+perekIndent) + "," + (i+j+perekIndent));
    }
    gematriaSum = 0;
    gematriaIntArray = ArrayUtils.removeElement(gematriaIntArray, i - 1);
    gematriaIntTempArraySize = gematriaIntArray.length;
}


我还没有检查代码的功能,只是有问题的部分,尽管那里也可能有其他问题。

10-08 09:45