我目前正在学习Java。今天我正在制作一个小程序,我输入数字,程序应该写,如果它们是否排序。
我认为我的逻辑是正确的,但我得到了一个我无法处理的错误。
foo
答案 0 :(得分:0)
让我们来看看你的aerSorterat方法。
private static boolean aerSorterat(LinkedList a) {
Collections.sort(a);
return a;
}
private static boolean意味着你的方法将返回一个true或false的布尔值。你插入list [a]然后返回[a]。没有布尔值。用你的代码你不需要那个方法。但是你必须从循环中删除if else语句,以便在用户为ex:out插入一个String之后。它会在循环中检查您的列表。如果您需要,可以使用该方法,在其中插入if else语句并返回true或false,然后使用ifsorted.aerSorterat(a)在main方法中调用该方法;
答案 1 :(得分:0)
进行替换!它适用于Java8:
1- a.stream()。sorted()。collect(Collectors.toList()创建一个新的排序列表
2-。等于(a)新列表比较当前
private static boolean ifSorted(LinkedList a) {
return a.stream().sorted().collect(Collectors.toList()).equals(a);
}
答案 2 :(得分:0)
您实际上是尝试使用Collections.sort(a)
对列表进行排序,但如果您想查看您的值是否已排序,则可以执行以下操作:像这样的循环:
private static boolean isSorted(List<Double> list) {
return ascending(list) || descending(list);
}
如果您必须同时检查两种方式,则可以使用与||
连接的两种方法轻松完成此操作,这是一种逻辑或。
单个方法只检查列表中的所有值是否比其前任更大(升序)或更小(降序)。
private static boolean ascending(List<Double> list) {
for (int i = 1; i < list.size(); i++)
if (list.get(i - 1) > list.get(i))
return false;
return true;
}
private static boolean descending(List<Double> list) {
for (int i = 1; i < list.size(); i++)
if (list.get(i - 1) < list.get(i))
return false;
return true;
}
如果其中一个值不符合前提,则只返回false。如果循环完成并保持正常,则表示所有值都已排序。
但要做到这一点,您必须将通用参数<Double>
作为参数提供给您的方法,否则您无法将这些值与<
和>
进行比较。另外,我使用List
代替LinkedList
,因为有了这个,您可以使用任何类型的List。
如果您想使用除数字之外的其他对象,则需要稍微更改一下。
首先,您要使用的对象必须实现Comparable
接口,该接口提供compareTo(...)
方法。给出的是,你可以这样,例如如下:
public boolean ascending(List<YourObject> list) {
for (int i = 1; i < list.size(); i++)
if (list.get(i-1).compareTo(list.get(i)) > 0)
return false;
return true;
}
只需将操作符换成降序。这例如可以与字符串列表一起使用。