Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法确定越界异常在哪里_Java_Indexoutofboundsexception - Fatal编程技术网

Java 无法确定越界异常在哪里

Java 无法确定越界异常在哪里,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我正在做一个项目,我们正在创建一个“高效的洗牌”方法,它接受一个数组并洗牌其中值的位置。但是,我得到了一个越界异常运行时错误,我不确定是什么导致了它 public static void selectionShuffle(int[] values) { for(int k = values.length; k > 0; k--) { int[] temp = new int[k]; double rand = Math.floor(Math.random() *

我正在做一个项目,我们正在创建一个“高效的洗牌”方法,它接受一个数组并洗牌其中值的位置。但是,我得到了一个越界异常运行时错误,我不确定是什么导致了它

public static void selectionShuffle(int[] values) {
   for(int k = values.length; k > 0; k--) {
     int[] temp = new int[k];
     double rand = Math.floor(Math.random() * k);
     int r = (int) rand;
     temp[r] = values[r];
     values[r] = values[k];  //here is where the outofbounds error resides
     values[k] = values[r];
   }
 }
这是方法,下面是运行它的代码。这是给我的,不应该改变

 private static final int SHUFFLE_COUNT = 1;
 private static final int VALUE_COUNT = 4;

 public static void main(String[] args) {
  System.out.println("Results of " + SHUFFLE_COUNT +
         " consecutive perfect shuffles:");
  int[] values2 = new int[VALUE_COUNT];
  for (int i = 0; i < values2.length; i++) {
   values2[i] = i;
   }
  for (int j = 1; j <= SHUFFLE_COUNT; j++) {
   selectionShuffle(values2);    //error is referenced here, when the method is called
   System.out.print("  " + j + ":");
   for (int k = 0; k < values2.length; k++) {
    System.out.print(" " + values2[k]);
   }
   System.out.println();
  }
  System.out.println();
 }
private static final int SHUFFLE\u COUNT=1;
私有静态最终整数值_计数=4;
公共静态void main(字符串[]args){
System.out.println(“结果”+洗牌计数+
“连续完美洗牌:”;
int[]values2=新的int[VALUE_COUNT];
对于(int i=0;i
for(int k = values.length
开始
k
out作为值的长度,但是

values[r] = values[k];  //here is where the outofbounds error resides
导致异常,因为Java数组的索引为零

您可以通过将for循环更改为来解决此问题

for(int k = values.length-1; k >= 0; k--)
线路

for(int k = values.length
开始
k
out作为值的长度,但是

values[r] = values[k];  //here is where the outofbounds error resides
导致异常,因为Java数组的索引为零

您可以通过将for循环更改为来解决此问题

for(int k = values.length-1; k >= 0; k--)
线路

for(int k = values.length
开始
k
out作为值的长度,但是

values[r] = values[k];  //here is where the outofbounds error resides
导致异常,因为Java数组的索引为零

您可以通过将for循环更改为来解决此问题

for(int k = values.length-1; k >= 0; k--)
线路

for(int k = values.length
开始
k
out作为值的长度,但是

values[r] = values[k];  //here is where the outofbounds error resides
导致异常,因为Java数组的索引为零

您可以通过将for循环更改为来解决此问题

for(int k = values.length-1; k >= 0; k--)


请发布异常堆栈跟踪。Java中的数组为零索引。在大小为
k
的数组中,索引
k
处没有元素。这是修复方法。将索引从[k]更改为[k-1]解决了它。谢谢!请发布异常堆栈跟踪。Java中的数组是零索引的。在大小为
k
的数组中,索引
k
处没有元素。这就是修复方法。将索引从[k]更改为[k-1]解决了它。谢谢!请发布异常堆栈跟踪。Java中的数组是零索引的。在大小为
k
的数组中,索引
k
处没有元素。这就是修复方法。将索引从[k]更改为[k-1]解决了。谢谢!请发布您的异常堆栈跟踪。Java中的数组是零索引的。在大小为
k
的数组中,索引
k
处没有元素。这就是修复方法。将索引从[k]更改为[k-1]解决了问题。谢谢!看到这一点,我觉得自己很笨。我将定义语句从
[k]更改为
[k-1]
这很有效,但这可能是一个更简洁的编辑。让
for
循环以0开始或结束是编写循环的惯用方法,但你的方法也很有效。我现在看到这一点,觉得自己很笨。我将定义语句从
[k]
更改为
[k-1]
,它起了作用,但这可能是一个更简洁的编辑。使用一个从0开始或结束的
for
循环是编写循环的惯用方法,但您的方法也很有效。看到这一点,我觉得自己很笨。我将定义语句从
[k]
更改为
[k-1]
,它起了作用,但这可能是一个更简洁的编辑。使用一个从0开始或结束的
for
循环是编写循环的惯用方法,但您的方法也很有效。看到这一点,我觉得自己很笨。我将定义语句从
[k]
更改为
[k-1]
它确实有效,但这可能是一个更简洁的编辑。让
for
循环以0开始或结束是编写循环的惯用方法,但您的方法也有效。