为什么不使用 return 保存 String 输入变量?[复制]

Why the String input variable won't be saved using return? [duplicate]

提问人:Floatingunknown 提问时间:12/11/2022 更新时间:12/11/2022 访问量:50

问:

该方法不会接受我分配的变量作为回报。

public static String agregarMain() {
        Scanner in = new Scanner(System.in);
        for (int i = 0; i < 1; i++) {
            System.out.println("Ingresar nombre del software/topico");
            String mainSeleccion = in.nextLine();
        if (mainSeleccion == "") {
            System.out.println("Invalid Selection, please try again");
            i--;
            continue;
        }
        return mainSeleccion;
        }
    }

我希望将输入响应保存在mainSeleccion变量中。

Java 字符串 变量 方法 返回

评论

1赞 12/11/2022
将字符串与 equals 方法进行比较 docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/...,并且您的方法需要在 for 循环之后的 return 语句
0赞 Hovercraft Full Of Eels 12/11/2022
在 if 块之前声明变量
1赞 rzwitserloot 12/11/2022
这里的核心问题是,并非所有路径都指向 return 语句。顺便说一句,是的,字符串比较是错误的。关键是,重新开放 - 这不是这里的相关问题。诚然,OP,您确实应该在 SO 问题中包含编译器错误消息。
0赞 njzk2 12/11/2022
关闭 - >缺少调试信息,例如,好吧,实际错误是什么......

答:

2赞 rzwitserloot 12/11/2022 #1

通过代码的所有路径都必须指向一个语句。对此代码的一些分析表明,它应该始终这样做,但这需要知道至少会循环一次。returnfor (int i = 0; i < 1; i++)

编译器不会走那么远。因此,这不会编译。只需重新排序一些东西,它就会。另外,您还有第二个问题 - 检查引用标识,它不进行值比较。除非左手边和右手边是原语(即不是引用,因此“引用标识”首先不适用)。您可以改用 equals,或者在这种情况下,使用更惯用的 .解决这两个问题:==.isEmpty()

public static String agregarMain() {
    Scanner in = new Scanner(System.in);
    String mainSeleccion = "";
    for (int i = 0; i < 1; i++) {
        System.out.println("Ingresar nombre del software/topico");
        mainSeleccion = in.nextLine();
        if (mainSeleccion.isEmpty()) {
            System.out.println("Invalid Selection, please try again");
            i--;
        }
    }
    return mainSeleccion;
}

注意:在提出有关堆栈溢出的问题时,请包括所有相关错误。你没有,这导致了评论中的一些混乱,并关闭了你的问题。