Java 在链表上使用扫描仪
我在我的类中有一个任务,就是使用一个链表和一个返回布尔值表示true或false的方法。该方法应该检查列表是否已排序(按时间顺序排序,例如1、2、7、14) 当我运行这个程序时,无论我的列表是否排序,我都不会得到任何答案。我是不是用错扫描仪了,还是怎么了Java 在链表上使用扫描仪,java,linked-list,java.util.scanner,Java,Linked List,Java.util.scanner,我在我的类中有一个任务,就是使用一个链表和一个返回布尔值表示true或false的方法。该方法应该检查列表是否已排序(按时间顺序排序,例如1、2、7、14) 当我运行这个程序时,无论我的列表是否排序,我都不会得到任何答案。我是不是用错扫描仪了,还是怎么了 Kap18包; 导入java.util.*; 导入javax.swing.*; 公共类列表{ 公共静态void main(字符串[]args){ 布尔排序; System.out.println(“写几个数字”); 扫描仪sc=新的扫描仪(Sy
Kap18包;
导入java.util.*;
导入javax.swing.*;
公共类列表{
公共静态void main(字符串[]args){
布尔排序;
System.out.println(“写几个数字”);
扫描仪sc=新的扫描仪(System.in);
LinkedList选项卡=新建LinkedList();
while(sc.hasnetint())
tab.add(sc.nextInt());
isSorted(选项卡);
如果(排序=假){
System.out.println(“列表未排序”);
}
else if(sorted=true){
System.out.println(“列表已排序”);
}
}
公共静态布尔值已排序(LinkedList选项卡){
布尔排序=真;
int i=0;
int num1=(整数)tab.get(i);
int num2;
对于(i=1;i这里有几个问题。首先,您忽略了isSorted
的返回值。其次,您将赋值为false
,然后将赋值为true
给if
语句中的排序的变量,方法是使用=
操作符,而不是=/code>。对于布尔型,最简单的方法是无效此类错误是直接检查变量,而不是将其与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");
}
您的问题是sorted=false
是将false
分配给sorted
,然后使用false
进行测试。因此测试总是说列表已排序
您应该使用=
而不是=
然而,许多人(包括我自己)认为variable==true
和variable==false
是不好的风格;例如,see。其原因是使用=
会留下一种可能,即将=
误打为=
(在大多数情况下,在布尔表达式中使用=
和!=
也是多余的。但并非所有情况都是如此。)
因此,我认为最好的写作方式是:
if (!sorted) {
System.out.println("The list is not sorted");
}
else {
System.out.println("The list is sorted");
}
或者反过来,这样就不需要对排序后的变量求反
第二个问题是,sorted
没有设置在第一位,因为您没有将isSorted
调用的结果分配给任何对象
通常,在赋值之前使用sorted
会出现编译错误。但在这种情况下,由于前面的错误,if
语句正在为sorted
赋值
最后,在列表为空的情况下,isSorted
中有一个bug。(请尝试一下,然后查看…)在主方法的if检查中,您似乎正在将排序设置为等于真/假。=
设置值,=
检查相等性。因为排序是布尔值,所以从技术上讲,您也不需要使用=
。如果(排序){/*打印已排序*/}否则{/*打印未排序*/}