在链表上使用扫描程序



我的类中有一个任务,即使用链表和一个返回布尔值的方法,表示真或假。该方法应该检查列表是否排序(按时间顺序排序,例如 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 = falsefalse分配给sorted,然后使用false进行测试。 所以测试总是会说列表已排序。

您应该使用==而不是=

然而,许多人(包括我自己)认为variable == truevariable == 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变量。在布尔值的情况下,避免此类错误的最简单方法是直接检查变量,而不是将其与truefalse进行比较:

sorted = isSorted(tab);
if (sorted) {
System.out.println("The list is sorted");
}
else if (sorted = true){
System.out.println("The list is not sorted");        
}

相关内容

  • 没有找到相关文章

最新更新