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

使用selection sort按长度升序排列字符串数组遇异常输出求助

选择排序字符串数组的问题排查与修复

问题根源

你的选择排序逻辑存在核心错误:只记录了最小长度的字符串内容,没有记录它在数组中的索引位置。

  • 执行min = a[j]时,只是让min变量指向了a[j]的字符串,但原数组中a[j]的位置没有任何变化。
  • 最后交换a[i]和min的操作,本质上只是把a[i]的值改成了min的内容(也就是最小的字符串),但原数组中原本存放这个最小字符串的位置并没有被替换。后续循环不断将min更新为最小字符串,最终导致所有元素都被覆盖成了最小的"me"。

修正后的代码

正确的选择排序需要通过索引追踪最小元素的位置,再通过索引完成数组元素的交换:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] a = sc.nextLine().trim().split(" ");
        
        for (int i = 0; i < a.length - 1; i++) {
            // 记录当前最小元素的索引,初始为当前i的位置
            int minIndex = i;
            for (int j = i + 1; j < a.length; j++) {
                // 比较j位置元素与当前最小元素的长度
                if (a[j].length() < a[minIndex].length()) {
                    minIndex = j;
                }
            }
            // 交换当前i位置和最小元素所在位置的内容
            String temp = a[i];
            a[i] = a[minIndex];
            a[minIndex] = temp;
        }
        
        System.out.println(Arrays.toString(a));
    }
}

修正说明

  • 用minIndex记录最小长度字符串的索引,而非直接存储字符串内容
  • 内层循环中,每次找到更短的字符串时,更新minIndex为该元素的索引
  • 外层循环最后,通过索引交换数组中两个位置的元素,真正完成排序所需的位置调换

测试输入Hello Java Its me,输出将是[me, Its, Java, Hello],符合预期的按字符串长度升序排列要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:07:38