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

Java新手求助:冒泡排序仅支持10位内数字?输入长数字报错

解决冒泡排序处理长数字串的问题

问题原因分析

  • int类型范围限制:Java里int的取值范围是-2147483648到2147483647,你输入的7636449812远超出这个最大值,所以scanner.nextInt()直接抛出InputMismatchException。
  • double精度丢失:换成double后,虽然能存更大的数值,但它是浮点数,对超长整数的存储会丢失精度,拆分数字时自然会得到错误结果。

正确解决方案

直接用字符串接收输入,逐个提取字符转成数字,既不受数值类型范围限制,也不会有精度问题。修改后的代码如下:

import java.util.Scanner;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Integer> sortierteNummer = new ArrayList<>();
        
        System.out.print("Welche Zahlen soll ich sortieren: ");
        String input = scanner.nextLine();
        
        sortierteNummer = sort(input);
        
        System.out.println(sortierteNummer);
    }
    
    public static ArrayList<Integer> sort(String input) {
        ArrayList<Integer> ziffern = new ArrayList<>();
        
        // 遍历字符串,将每个数字字符转成整数
        for (char c : input.toCharArray()) {
            if (Character.isDigit(c)) {
                ziffern.add(c - '0');
            }
        }
        
        // 冒泡排序逻辑(做了小优化)
        for (int j = 0; j < ziffern.size() - 1; j++) {   
            // 每轮排序后,末尾j个元素已有序,无需再比较
            for (int i = 0; i < ziffern.size() - 1 - j; i++) {   
                if (ziffern.get(i) > ziffern.get(i+1)) {
                    int zwischenspeicher = ziffern.get(i); 
                    ziffern.set(i, ziffern.get(i+1));
                    ziffern.set(i + 1, zwischenspeicher);
                }
            }
        }
        
        return ziffern;
    }
}

代码说明

  1. 字符串接收输入:用scanner.nextLine()获取完整输入,不管数字串多长都能处理。
  2. 字符转数字:利用ASCII码差值c - '0',把数字字符直接转成对应整数。
  3. 排序优化:内层循环终止条件改为ziffern.size() - 1 - j,减少不必要的比较,提升效率。

测试验证:

  • 输入763644,输出[3,4,4,6,6,7],结果正常;
  • 输入7636449812,输出[1,2,3,4,4,6,6,7,8,9],结果正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:05:32