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

また、文字列を。と比較しないでください====2つの変数が同じStringオブジェクトを参照しているかどうかをテストします。equals()2つの文字列にまったく同じ文字シーケンスが含まれているかどうかをテストするメソッドを使用する必要があります。

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文字列への参照を返します""。これ自体は何もしません。

errorMessageincheckVlaueメソッドに異なる値を割り当てるコードがあると想定しています。これにはいくつかの注意点があります。文字列はJavaでは不変です。メッセージ署名で渡される値は、へerrorMessageの呼び出し時のコンテンツへの参照を含む値checkValueです。内部でこの変数に別の値を割り当ててcheckValue返すと、実際には別の文字列オブジェクトへの参照である値が返されます。呼び出し元のメソッドに戻ると、これは呼び出し元のメソッドでまだ指している文字列オブジェクトであるため、印刷errorMessageが出力されます。通話を次のように変更した場合:""errorMessage

String errorMessage = checkValue(orderSplit);

checkedValue toこれで、 errorMessagecheckValue`から返される参照値が割り当てin the calling method. This will now print whatever the result ofられます。

ネットアウトは、Javaのほとんどのものがオブジェクト参照(ポインター)であるにもかかわらず、すべてのメソッドシグネチャが実際には値によって渡されることを覚えておくことです。再割り当てするときは、ポインターが指すものを変更するのではなく、変数に新しいポインターをまとめて割り当てます。

于 2012-06-23T22:19:31.773 に答える
0

java.lang.String不変です。したがって、基本的に新しいオブジェクトerrorMessageを作成しているため、メソッドの内部で行ったことはメソッドの外部には表示されません。String

他の回答が示唆しているように、メソッドからの戻り値を実際に確認する必要があります。

于 2012-06-23T22:21:07.847 に答える