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

Java实现选择排序出现索引越界及排序结果不正确问题求助

选择排序代码问题修复

数组越界报错原因

  • 外层循环i遍历到数组最后一个下标(值为sorter.length -1)时,你执行了int lowest_number = sorter[i + 1],此时i+1等于数组长度,超出了数组下标范围(数组合法下标是0 ~ 数组长度-1)
  • printarray方法存在笔误,循环条件里的[rint.length写错,应该是print.length
  • 代码存在语法错误:sorter[i] = sorter[lowest_number}里的右括号用了大括号,应该用中括号]

排序结果错误原因

  • 找最小值的逻辑完全错误:你把lowest_number作为存储最小元素下标的变量,初始化时却赋值为sorter[i+1]的元素值,逻辑不匹配;内层循环的判断条件sorter[j] > -1和找最小值没有任何关系,没有做大小比较就直接覆盖下标
  • 没有正确初始化最小下标:每轮外层循环应该先把当前i的位置设为初始最小下标,再遍历后续元素做比较

修正后的完整代码

import java.util.Scanner;

public class Selection{
    public static void main(String[] args) {
        System.out.println("Please input a value for N");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] array = new int[n];

        for (int i =0; i < n; i++) {
            System.out.println("Please input a value for index" + i);
            int element = input.nextInt();
            array[i] = element;
        }
        select(array);
        input.close();
    }

    public static void select(int[] sorter) {
        // 最后一个元素不需要再遍历,所以循环到sorter.length-1即可
        for (int i = 0; i < sorter.length - 1; i++) {
            // 初始化最小元素的下标为当前i的位置
            int minIndex = i;
            // 从i之后的位置开始找更小的元素
            for (int j = i + 1; j < sorter.length; j++) {
                // 升序排序:如果当前元素比记录的最小元素小,更新最小下标
                if (sorter[j] < sorter[minIndex]){
                    minIndex = j;
                }
            }
            // 交换当前i位置和最小元素的位置
            int intermediate = sorter[i];
            sorter[i] = sorter[minIndex];
            sorter[minIndex] = intermediate;
            System.out.println("----------");
            printarray(sorter);
        }
    }

    public static void printarray(int[] print) {
        for (int i = 0; i < print.length; i++) {
            System.out.println(print[i]);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:27:02