有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java“变量可能尚未初始化”在何处使用开关盒进行初始化?

您好,我是新来的编码,所以很抱歉,如果这没有意义或是愚蠢的问题
我希望我的主函数从命令行获取参数来调用某些方法。我得到了错误"Variable 'newTree' might not have been initialized",我理解(我想),但我不知道如何着手修复它。我希望newTree对象在两个命令之间保持不变(即,如果第一个命令是init add 1 add 5,第二个命令是add 6,它将添加6在前一个命令中创建的树),直到输入init命令创建一个新的空树。我没有在init案例之外初始化实例,因为我认为它会在每次调用类时创建一个新对象,而不仅仅是在init作为参数输入时
非常感谢您的帮助,谢谢

public static void main(String[] args) {
    for (int i = 0; i < args.length; i++) {
        switch (args[i]) {
            case "init":
                Tree newTree = new Tree();
                break;
            case "add":
                newTree.add(args[i++]);
                break;
            case "remove":
                newTree.remove();
                break;
            case "show":
                newTree.showTree(root);
                break;
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    只需将初始化添加到null。即使你这样做,init case也必须出现,否则应用程序将崩溃

    public static void main(String[] args) {
            //init to null if "init" case isn't called this could crash...
            Tree newTree=null;
            for (int i = 0; i < args.length; i++) {
                switch (args[i]) {
                    case "init":
                        //it is now declared already
                        newTree = new Tree();
                        break;
                    case "add":
                        newTree.add(args[i++]);
                        break;
                    case "remove":
                        newTree.remove();
                        break;
                    case "show":
                        newTree.showTree(root);
                        break;
                }
            }
        }
    
  2. # 2 楼答案

    问题很简单:想想如果用户作为参数传递会发生什么

    show add 1 add 2 remove
    

    要解决这个问题,你可以

    1. 在程序运行时始终初始化树(因此不需要init命令):
    public static void main(String[] args) {
        final Tree newTree = new Tree();
    
        for (int i = 0; i < args.length; i++) {
            switch (args[i]) {
                case "add":
                    newTree.add(args[i++]);
                    break;
                case "remove":
                    newTree.remove();
                    break;
                case "show":
                    newTree.showTree(root);
                    break;
            }
        }
    }
    
    1. 如果用户试图在未初始化的情况下访问树命令,则抛出错误/不执行任何操作/显示消息:
    public static void main(String[] args) {
        Tree newTree = null;
        for (int i = 0; i < args.length; i++) {
            switch (args[i]) {
                case "init":
                    newTree = new Tree();
                    break;
                case "add":
                    // Will throw NullPointerException if not initialized
                    newTree.add(args[i++]);
                    break;
                case "remove":
                    // Will throw NullPointerException if not initialized
                    newTree.remove();
                    break;
                case "show":
                    // Will throw NullPointerException if not initialized
                    newTree.showTree(root);
                    break;
            }
        }
    }