使用.split方法和JOP.InputDialog Java处理空问题

使用.split方法和JOP.InputDialog Java处理空问题,java,exception-handling,nullpointerexception,Java,Exception Handling,Nullpointerexception,这是一个uni项目的代码片段,我对java还比较陌生,所以请原谅任何糟糕的代码。限制之一是代码在退出/取消时不得有错误。所以我知道JOptionPane.showInputDialog上的cancel按钮返回null,但“parts=temp.split”部分似乎是出于我未知的原因阻止输入为null?当我清除parts=temp.split时,选择“取消”按钮时不会引发异常,但显然for循环不起作用。因此,我需要做的是在取消时不会产生异常或错误。如有任何帮助,将不胜感激!: **编辑**我们也被

这是一个uni项目的代码片段,我对java还比较陌生,所以请原谅任何糟糕的代码。限制之一是代码在退出/取消时不得有错误。所以我知道JOptionPane.showInputDialog上的cancel按钮返回null,但“parts=temp.split”部分似乎是出于我未知的原因阻止输入为null?当我清除parts=temp.split时,选择“取消”按钮时不会引发异常,但显然for循环不起作用。因此,我需要做的是在取消时不会产生异常或错误。如有任何帮助,将不胜感激!: **编辑**我们也被禁止使用catch、try或break while循环。必须使用true/false退出

    while (X == true && flag == true) {
        input = JOptionPane.showInputDialog("Tell me more about " + topics[z]);
        String temp = input;
        if (input != null) {
            flag = true;
        }
        else if (input == null) {
            flag = false;
        }

        parts = temp.split(" ");

        for (int i = 0; i < parts.length; i++) {
            for (int x = 0; x < topics.length; x++) {
                if (parts[i].equals(topics[x])) {
                    cut = parts[i];
                    break;
                }
            }
        }
        for (int i = 0; i < topics.length; i++) {
            if (cut.equals(topics[i])) {
                z = i;
                break;
            }

        }

        input = cut;
        System.out.print(cut);
        System.out.println(z);

        X = Arrays.asList(topics[z]).contains(input);
        System.out.println(X);

    }
您需要编写parts=temp.split;内部if输入!=null,并确保在此之前已初始化部件;否则,您将在parts.length中获得NPE。 我假设主题不为空:

while (X == true && flag == true) {
        input = JOptionPane.showInputDialog("Tell me more about " + topics[z]);
        String temp = input;
        parts = new String[initialArraySize];

        if (input != null) {
            parts = temp.split(" ");
            flag = true;
        }
        else if (input == null) {
            flag = false;
        }



        for (int i = 0; i < parts.length; i++) {
            for (int x = 0; x < topics.length; x++) {
                if (parts[i].equals(topics[x])) {
                    cut = parts[i];
                    break;
                }
            }
        }
        for (int i = 0; i < topics.length; i++) {
            if (cut.equals(topics[i])) {
                z = i;
                break;
            }

        }

        input = cut;
        System.out.print(cut);
        System.out.println(z);

        X = Arrays.asList(topics[z]).contains(input);
        System.out.println(X);

    }

单击“取消”按钮时,您想要什么?我在我的eclipse控制台中得到这个消息:线程主java.lang.NullPointerException中的异常位于AMRGst2.mainAMRGst2.java:62,取消时我的控制台中基本上没有错误或红色。您需要编写parts=temp.split;内部if输入!=null,并确保在此之前已初始化部件;否则,你会得到NPE在线部分。长度以及是!!感谢堆,这已经奏效:有趣的是,一旦你看到解决方案,它似乎是如此明显哈哈