DESKTOP-QT2JO23_20200911-孙中霞
一,问题
我的单词比较写完,可以输入单词,比较器也写了,然后最后到结果输出的时候,输出结果为 null ,每次都是这样,我以为我的比较器写错了,回头看了好几次代码,但是也没发现问题,但那个比较的数组里边它就是空的!
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class WordSort {
private String[] s;
private Scanner scanner;
public WordSort(int capicity) {
if (capicity < 2) {
throw new IllegalArgumentException("容量小于2,无法做比较");
}
//String[] s=new String[capicity]
//此时的s是局部变量,只能在这个构造方法中有效,不能在这个构造方法之外使用
//也就导致构造方法外的全局变量String[] s一直未被初始化,导致最后比较器比较的容器里边的值为空,得出结果null
s = new String[capicity];
this.scanner = new Scanner(System.in);
for (int q = 0; q < s.length; q++) {
System.out.println("请输入第" + (q + 1) + "个单词:");
s[q] = scanner.nextLine();
}
}
public void Sort() {
Comparator<String> comparator = new Comparator<>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
};
Arrays.sort(s, comparator);
}
@Override
public String toString() {
return Arrays.toString(s);
}
public static void main(String[] args) {
WordSort w = new WordSort(2);
w.Sort();
System.out.println(w);
}
}
二, 解决
我找了好久没找到,搬来了救兵同桌,也找了好久也没找到,但是后来试了很多次后,然后发现我在有参构造中将数组s重新初始化了,而且成为了局部变量,它只能在本构造中使用,但是外部的全局变量一直未被初始化,它里边的数组元素一直都是空的,所以一直在输出null,太粗心大意了,马马虎虎!
三,吐槽
自己是个马大哈也就罢了,记忆力也不得行,早上刚讲过,下午同桌说我是不是没听课,但事实是我真的认真听课了!
近期评论