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; } }
代码说明
- 字符串接收输入:用
scanner.nextLine()获取完整输入,不管数字串多长都能处理。 - 字符转数字:利用ASCII码差值
c - '0',把数字字符直接转成对应整数。 - 排序优化:内层循环终止条件改为
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
相关产品推荐
相关产品推荐

