【问题标题】:Issues with function meant to swap arrray indices (Java)用于交换数组索引的函数问题(Java)
【发布时间】:2015-08-07 13:45:03
【问题描述】:

我写了一个函数,它应该交换到整数数组的索引。
我的问题是,当我尝试实现交换功能时,

我收到此错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at pa5.swap(pa5.java:24)
at pa5.nextPermutation(pa5.java:66)
at pa5.main(pa5.java:12)

这里是代码

     nextPermutation(A); //line 12, call to function in main()

     static void swap(int[] Q, int i, int j){
         int temp = Q[i]; //line 24 
          Q[i] = Q[j];
          Q[j] = temp;
       }

   swap(A, pivot, successor); //line 66 inside of nextPermutation function

我不明白为什么会出现此错误。我将不胜感激有关如何理解和解决此错误的任何提示。

【问题讨论】:

  • A的内容是什么
  • 你使用的字符串的长度是多少?
  • 你的意思是swap(A, 1, 2)吗?错误很明显:您的数组索引超出了该数组的范围。
  • length - 数组索引从 0 开始。这意味着如果有 5 个项目 - 索引 0 到 4。

标签: java arrays swap indices


【解决方案1】:

叫它

swap(A, 1, 2);

没有

swap(A, A[1], A[2]);

目前您将数组值作为ij 传递,而不是索引。

【讨论】:

  • 我的错误是,更具体地说,当我在 nextPermutation 函数中调用交换函数时发生:swap(A, pivot, successor);打印数组(A)
  • @AnnabellaSakasai A 的长度是多少,当它崩溃时,pivot 和 successor 包含什么值?
  • A的长度为5,pivot = 8,successor = 10。
【解决方案2】:

问题是您创建了一个大小为“n”的数组。现在,当您要访问 n 或 n+1 维度时,您会收到此错误。

您发布的代码不足以查明错误,但我觉得对于 n 的数组大小,您没有考虑索引从 0 开始并以 n-1 结束。

【讨论】:

  • 我的索引从 0 开始,以 n-1 结束。
  • swap 函数在程序的其他部分调用时起作用。我只是不明白在 nextPermutation() 部分中调用它时发生的问题。
  • A的大小是多少,这些参数取值pivot,后继;
  • A的长度是5,pivot = 8,successor = 10。我认为我的问题与pivot和successor的值有关。交换功能在程序的其他部分工作正常。
  • 从右边很明显,pivot 和 successor 的值都大于数组的长度。这就是为什么你会得到这个例外。现在您的问题在于这些值的生成。
【解决方案3】:

也许你想像这样交换指定索引的值:

swap(A, 1, 2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多