使用 .split 方法处理 Null 问题 & JOP.InputDialog Java

Handling Null issue with .split method & JOP.InputDialog Java

所以这是一个 uni 项目的代码片段,我对 java 来说还很新,所以请原谅任何糟糕的代码。限制之一是代码在退出/取消时不能有错误。所以我知道 JOptionPane.showInputDialog returns 上的取消按钮为空,但 'parts = temp.split(" ")' 的部分似乎出于我不知道的原因阻止输入为空?当我摆脱 parts=temp.split() 时,选择取消按钮时不会抛出异常,但显然 for 循环不会 work.So 我需要做的是没有异常或在 cancel.Any 帮助下产生的错误将不胜感激! :) ** 编辑** 我们也被禁止使用 catch、try 或 break any while loops.Must 以 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);

    }

你需要在if (input != null)里面写上parts = temp.split(" ");,并确保parts在这之前也被初始化;否则你也会在行 parts.length 中得到 NPE。 我假设 topics 不为空:

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);

    }