我的类中有一个任务,即使用链表和一个返回布尔值的方法,表示真或假。该方法应该检查列表是否排序(按时间顺序排序,例如 1、2、7、14)。
当我运行这个程序时,无论我的列表是否排序,我都没有得到任何答案。是我用错了扫描仪还是发生了什么?
package Kap18;
import java.util.*;
import javax.swing.*;
public class Lista {
public static void main(String[] args) {
boolean sorted;
System.out.println("Write a few numbers");
Scanner sc = new Scanner(System.in);
LinkedList<Integer> tab = new LinkedList<Integer>();
while (sc.hasNextInt())
tab.add(sc.nextInt());
isSorted(tab);
if (sorted = false){
System.out.println("The list is not sorted");
}
else if (sorted = true){
System.out.println("The list is sorted");
}
}
public static boolean isSorted(LinkedList tab){
boolean sorted = true;
int i = 0;
int num1 = (Integer)tab.get(i);
int num2;
for(i = 1; i <= tab.size() - 1; i++){
num2 = (Integer)tab.get(i);
if(num1 < num2){
num1 = num2;
}
else{
i = tab.size();
sorted = false;
}
}
return sorted;
}
您的问题是sorted = false
将false
分配给sorted
,然后使用false
进行测试。 所以测试总是会说列表已排序。
您应该使用==
而不是=
。
然而,许多人(包括我自己)认为variable == true
和variable == false
是糟糕的风格;例如,请参阅 https://stackoverflow.com/a/2661150/139985。 理由是,使用==
会留下一个字符错别字的可能性,而这个错别字只是咬了你;即将==
错误地输入为=
.
(在大多数情况下,在布尔表达式中使用==
和!=
也是多余的。 但不是全部。
所以,我想说最好的写法是:
if (!sorted) {
System.out.println("The list is not sorted");
}
else {
System.out.println("The list is sorted");
}
或者反过来,这样你就不需要否定sorted
变量。
第二个问题是sorted
没有首先设置,因为您没有将isSorted
调用的结果分配给任何内容。
通常,在分配之前,使用sorted
时会收到编译错误。 但在这种情况下,if
语句正在为sorted
赋值......由于以前的错误。
最后,在列表为空的情况下,isSorted
中存在一个错误。 (试试看...
这里有几个问题。首先,忽略isSorted
的返回值。其次,使用=
运算符而不是==
将false
然后true
分配给if
语句中的sorted
变量。在布尔值的情况下,避免此类错误的最简单方法是直接检查变量,而不是将其与true
或false
进行比较:
sorted = isSorted(tab);
if (sorted) {
System.out.println("The list is sorted");
}
else if (sorted = true){
System.out.println("The list is not sorted");
}