0

我无法通过方法传递一些变量,然后让该方法返回一个值。该checkValue方法应该查看数组中的每个数组项,orderSplit如果它们有错误,则返回错误消息,否则将返回空errorMessage。但截至目前,该程序似乎根本没有执行该方法。有什么建议么?

这是我的代码示例:

public class Foo {
    public static void main(String args[]) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String order = null;
        try {
            order = br.readLine();
        } catch (IOException exc) {
            System.out.println("ERROR: A Problem has occured");
        }

        String[] orderSplit = null;
        orderSplit = order.split(" ");

        String errorMessage = "";
            checkValue(orderSplit, errorMessage);
        if (errorMessage == "") {
            System.out.println("SUCCESS");
        }

    }
    public static String checkValue(String[] orderSplit, String errorMessage) {
             // check the ordersplit values
             return errorMessage;
    }
}
4

4 回答 4

2

您不会将方法的结果分配给任何东西。将您的代码更改为:

String errorMessage = checkValue(orderSplit);

并不是说 checkValue 方法不需要任何错误消息作为参数。它将自己创建一个并将其返回给调用者。

此外,将 null 分配给您之后立即重新分配的变量,如下所示:

String[] orderSplit = null;
orderSplit = order.split(" ");

是不必要的。您只需要

String[] orderSplit = order.split(" ");

而且您永远不应该将字符串与==. ==测试两个变量是否引用同一个 String 对象。您应该使用该equals()方法,该方法测试两个字符串是否包含完全相同的字符序列:

if (errorMessage.equals("")) {
于 2012-06-23T22:11:16.637 回答
0

您没有在任何地方分配 checkValue 的返回值,只返回其参数。尝试改变

String errorMessage = "";
checkValue(orderSplit, errorMessage);

String errorMessage = "";
errorMessage = checkValue(orderSplit, errorMessage);

祝你好运

于 2012-06-23T22:14:51.323 回答
0

上面的代码只是分配""errorMessage变量并返回对 string 的引用""。这本身并没有任何作用。

我假设您有一些代码为errorMessageincheckVlaue方法分配了不同的值。对此有一些警告。字符串在java中是不可变的。在您的消息签名中,传递的值是一个值,其中包含errorMessage在调用checkValue. 如果您尝试在内部为该变量分配另一个值checkValue并返回它,您实际上是在返回一个值,该值是对不同字符串对象的引用。一旦你返回调用方法打印errorMessage将打印"",因为这是errorMessage调用方法中仍然指向的字符串对象。如果您将呼叫更改为以下内容:

String errorMessage = checkValue(orderSplit);

checkedValue to您现在正在分配从errorMessage in the calling method. This will now print whatever the result ofcheckValue`返回的参考值。

最终结果是要记住,尽管 java 中的大多数东西都是对象引用(指针),但所有方法签名实际上都是按值传递的。当您重新分配时,您不会更改指针指向的内容,而是将新指针一起分配给变量。

于 2012-06-23T22:19:31.773 回答
0

java.lang.String是不可变的。因此,无论您errorMessage在方法内部做什么,都不会在方法外部可见,因为本质上您是在创建新String对象。

正如其他答案所建议的那样,您应该真正检查该方法的返回值。

于 2012-06-23T22:21:07.847 回答