这可能不是一个好的实现,但我想知道为什么我的排序不起作用。我唯一能做的就是从列表中删除“文本”。也许在sort()
方法中使用list并不是一个好习惯,我应该使用数组,但我想看到它可以用List
来完成。
public class MyProgram {
public static void main(String[] args) {
// Text from TextField.
String unorderedMixedText = "10 text 2 43 -12 0 41";
String[] toArrray = unorderedMixedText.split(" ");
List<Integer> numbers = new ArrayList<>();
// To get only numbers in text.
for(int i = 0; i < toArrray.length; ) {
try {
numbers.add(Integer.parseInt(toArrray[i]));
i++;
} catch (NumberFormatException e) {
i++;
}
}
// Unordered
Arrays.stream(toArrray).forEach(s -> System.out.print(s + " "));
// Empty line
System.out.println();
sort(numbers);
// Ordered
numbers.stream().forEach((number) -> System.out.print(number + " "));
}
private static void sort(List<Integer> list) {
for(int i = 0; i < list.size() -1; i++) {
for(int j = i+1; j < i; j++){
if(list.get(i) > list.get(j)) {
int big = list.get(i);
int small = list.get(j);
list.set(i, small);
list.set(j, big);
}
}
}
}
}
我从我的程序中得到了这个输出。
10 text 2 43 -12 0 41
10 2 43 -12 0 41
答案 0 :(得分:3)
你的循环中存在问题:
for(int j = i+1; j < i; j++){
if(list.get(i) > list.get(j)) {
int big = list.get(i);
int small = list.get(j);
list.set(i, small);
list.set(j, big);
}
i + 1总是&gt;我所以你的循环没有工作
答案 1 :(得分:1)
作为您的方法的替代方法,您可能想知道Comparator
,这是一个可用于任意比较集合(如Lists和ArrayLists)的类。例如,对于您的示例,我们可以执行以下操作:
import java.util.*;
public class Test {
public class NaturalNumbers implements Comparator<Integer> {
// natural comparison is strictly based on what the result
// of "a minus b" is. So let's just do that!
public int compare(Integer a, Integer b) {
return a.intValue() - b.intValue();
}
}
public static void main(String[] args) {
new Test();
}
public Test() {
String s = "1 cats 5432 one two 32 63 12 364 -243 13 lol";
// turn that into a list of valid Integers:
List<String> _terms = Arrays.asList(s.split(" "));
ArrayList<Integer> terms = new ArrayList<Integer>();
for(String term: _terms) {
try {
terms.add(Integer.parseInt(term));
} catch (Exception e) {}
}
// sort that list using a natural ordering comparator:
Collections.sort(terms, new NaturalNumbers());
System.out.println(terms.toString());
}
}
我们定义一个字符串列表,拆分它然后丢弃所有&#34;这些不是数字&#34;元素,然后我们在结果的整数列表上运行一个自然排序比较器。成功,生成的排序列表从-243开始,到5432结束。
事实上,我们在技术上甚至不需要比较器通过自然排序对数字进行排序,因为没有明确的比较器Collections.sort(list)
无论如何都会根据自然顺序排序,但坦率地说我是假设的这是家庭作业,明天你将被要求以完全不同的方式对这个列表进行排序。现在你知道你将如何实现这一目标。
答案 2 :(得分:0)
问题是即使你告诉sort()
使用该列表,它实际上也不会返回它。
1.替换
private static void sort(List list)
with
private static List sort(List list)
更改
sort(numbers);
to
numbers = sort(numbers);
在最后添加return list;