为什么我的冒泡排序只能处理大约 10 位数字?

问题描述 投票:0回答:1

我是一个绝对的java初学者,并尝试编写一个冒泡排序。它似乎最多可以工作 10 位数字。我想这可能是因为我使用了int。我的名字是德语。我希望这不会打扰你。 我的代码无论如何都不应该是最优的。我只是想尝试一下。

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: ");
        int zahl = scanner.nextInt();
        
        sortiertenummer = sort(zahl);
        
        System.out.println(sortiertenummer);
        
    }
    
    public static ArrayList<Integer> sort(int a)
    {
        ArrayList<Integer> ziffern = new ArrayList<>();
        
        while (a > 0)
        {
        int b = a % 10;
        ziffern.add(b);
        a = a / 10;
        System.out.println(ziffern);
        }
        
        for (int j = 0; j <= ziffern.size() - 1; j++)
        {   
            for (int i = 0; i <= ziffern.size() - 2; 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:763644

我的输出1:3,4,4,6,6,7

我的输入2:7636449812

我的输出2:

线程“main”java.util.InputMismatchException中出现异常:对于输入字符串:“7636449812” 在 java.base/java.util.Scanner.nextInt(Scanner.java:2264) 在 java.base/java.util.Scanner.nextInt(Scanner.java:2212) 在 Main.main(Main.java:13)

因为我认为这是因为我使用的是 int,所以我将 int 更改为 double,并将 ArrayList 也更改为 double。然后我启动了程序,得到了一堆奇怪的数字,淹没了我的电源外壳。

java bubble-sort
1个回答
2
投票

我认为这是因为我正在使用

int

是的,这是正确的。

我将 int 更改为

double

这将对

a = a / 10
产生影响,从而不再是整数除法。它会使
a
具有小数值,并且变得越来越小......比如 1.981329389e-267,需要相当多的迭代才能达到 0。

double
更改为
String

        System.out.print("Welche Zahlen soll ich sortieren: ");
        String zahl = scanner.next(); // Read as string

并修改

sort
以接受字符串参数并更改加载数组的循环:

    public static ArrayList<Integer> sort(String a) // Accept string
    {
        ArrayList<Integer> ziffern = new ArrayList<>();

        // Changed the load of the ziffern array:
        for (int i = 0; i < a.length(); i++)
        {
            ziffern.add(a.charAt(i) - '0');
            System.out.println(ziffern);
        }

        // ....
    }

现在您可以自由输入一长串数字,并对其进行排序。

你也可以将涉及的数组列表更改为

ArrayList<Character>
,然后只附加字符:

        ziffern.add(a.charAt(i) - '0');

使用

char
用于:

        char zwischenspeicher = ziffern.get(i); 

现在您的输入可以是任意字符串,并且其字符将被排序。

© www.soinside.com 2019 - 2024. All rights reserved.