You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java选择排序程序在Eclipse运行报ArrayIndexOutOfBoundsException异常求助

异常产生原因
  • 直接触发数组越界的代码是a[minind]=a[temp];:temp变量存储的是数组元素的值,不是数组下标,你错误地将temp作为下标访问数组。你的测试输入中第一个元素为4,数组长度为4,合法下标范围是0~3,访问下标为4的数组位置自然会触发越界报错。
  • 除了越界问题外,你的选择排序逻辑还存在两处错误,即使修复越界问题也无法得到正确排序结果:
    1. 内层循环遍历范围错误:选择排序内层循环需要从i+1的位置开始查找当前轮次的最小值,不需要从0开始遍历,也不需要做len-1-i的截断,直接遍历到数组末尾即可
    2. 交换逻辑位置错误:应该在内层循环完整遍历、确定当前轮次的最小值下标之后,再执行一次交换操作,你将交换逻辑写在内层循环中,每轮内层遍历都会多次执行无意义的错误交换。
修复方案
  1. 修正交换逻辑:将a[minind]=a[temp];改为a[minind] = temp;,直接把暂存的a[i]值赋值给minind位置的元素,不需要再通过下标访问数组
  2. 调整内层循环的范围:将内层循环改为for(int j = i + 1; j < len; j++)
  3. 将交换逻辑移到内层循环外部,等找到当前轮次的最小值下标后再执行交换
  4. 可选修正:原输出中的Shorted为拼写错误,正确写法是Sorted

修正后的完整代码如下:

import java.util.Scanner;

public class SelectionShort {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the length of matrix");
        int len=sc.nextInt();
        int a[]=new int[len];
        System.out.println("Enter the series");
        for(int k=0; k<len; k++) {
            a[k] = sc.nextInt();
        }

        for(int i=0;i<len-1;i++) {
            int minind=i;
            // 修正内层循环遍历范围
            for(int j=i+1; j<len; j++) {
                if(a[j] < a[minind]) {
                    minind=j;
                }
            }
            // 修正交换逻辑并移到内层循环外
            int temp=a[i];
            a[i]=a[minind];
            a[minind]=temp;
        }
        System.out.println("Sorted array is ");
        for(int item : a) {
            System.out.print(item + " ");
        }
        sc.close();
    }
}

内容的提问来源于stack exchange,提问作者prince gujjar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:15:05