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_
相关产品推荐
相关产品推荐

