我是一个绝对的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。然后我启动了程序,得到了一堆奇怪的数字,淹没了我的电源外壳。
我认为这是因为我正在使用
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);
现在您的输入可以是任意字符串,并且其字符将被排序。