3

私を困惑させているコードのセクションがあります。配列の長さはメソッドへの2つの入力の長さに依存するため、if/elseステートメント内で整数配列を定義します。私の問題は、if / elseステートメントの外では、変数の定義が失われているように見えることです。

import java.util.Arrays;

public class test {

  public String AddArrays(int [] arg1, int [] arg2) {
    int L1 = arg1.length;
    int L2 = arg2.length;
    if (L1 > L2) {
        int[] output = new int[L2];
        for (int i = 0; i < L2; i++) {
            output[i] = arg1[i] + arg2[i];
        }
    } else {
        int[] output = new int[L1];
        for (int i = 0; i < L2; i++) {
            output[i] = arg1[i] + arg1[i];
        }
    }
    String result = Arrays.toString(output);
    return result;
    }
}

私が得るエラーは、Eclipseが変数に解決できないことをString result = Arrays.toString(output);教えてくれるステートメントにあります。output

...ちなみに、はい、これは2つの整数配列を追加する方法ではないことを私は知っています-問題を示すために、これをより複雑なコードから減らしました!

4

4 に答える 4

5

outputifのステートメントを定義します。このような:

int[] output;
int L1 = arg1.length;
int L2 = arg2.length;
if (L1 > L2) {
    output = new int[L2];
    for (int i = 0; i < L2; i++) {
        output[i] = arg1[i] + arg2[i];
    }
} else {
    output = new int[L1];
    for (int i = 0; i < L2; i++) {
        output[i] = arg1[i] + arg1[i];
    }
}
String result = Arrays.toString(output);
return result;
}

outputステートメント内で宣言するifと、そのブロックスコープしかありませんでした。

于 2013-02-01T20:33:54.813 に答える
3

変数のスコープは常に次の囲み{ }です。

その宣言から始まる原因の (ではなく{)

于 2013-02-01T20:34:49.840 に答える
2

さて、あなたはすでに解決策を持っていますが、私はあなたが現在行っているコードの重複を避けるためにあなたのメソッドを減らすことができることを指摘したいと思います。

conditional operatorsの結果に応じて配列を作成するために利用できますL1 > L2。そして、まで繰り返すのではなく、配列の長さまで繰り返す必要がありL1ます。L2output

したがって、以下のコードを使用してみることができます:-

public String addArrays(int [] arg1, int [] arg2) {
    int L1 = arg1.length;
    int L2 = arg2.length;

    int[] output = L1 > L2 ? new int[L2]: new int[L1];

    for (int i = 0; i < output.length; i++) {
        output[i] = arg1[i] + arg2[i];
    }

    return Arrays.toString(output);
}

また、Javaの命名規則に従ってください。メソッド名は小文字のアルファベットで始める必要があります。

于 2013-02-01T20:40:29.077 に答える
0

各 if/else ステートメント内で、出力変数をローカル変数として宣言しています。これを修正するには、最初に外部で宣言してから調整し、結果を返します。これにより、括弧内のスコープに保持されます{ }

public String AddArrays(int [] arg1, int [] arg2) {
    int L1 = arg1.length;
    int L2 = arg2.length;
    int[] output;
    if (L1 > L2) {
        output = new int[L2];
        for (int i = 0; i < L2; i++) {
            output[i] = arg1[i] + arg2[i];
        }
    } else {
        output = new int[L1];
        for (int i = 0; i < L2; i++) {
            output[i] = arg1[i] + arg1[i];
        }
    }
    String result = Arrays.toString(output);
    return result;
}
于 2013-02-01T20:38:40.780 に答える