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,太粗心大意了,马马虎虎!

三,吐槽

自己是个马大哈也就罢了,记忆力也不得行,早上刚讲过,下午同桌说我是不是没听课,但事实是我真的认真听课了!