繁体   English   中英

在循环内定义的Java变量似乎无法在循环外识别?

[英]Java variable defined inside a loop doesn't seem to be recognized outside the loop?

我有一段代码令人困惑。 我在if / else语句中定义一个整数数组,因为该数组的长度取决于该方法的2个输入的长度。 我的问题是,在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;
    }
}

我得到的错误是在语句String result = Arrays.toString(output); Eclipse告诉我output无法解析为变量。

...而且顺便说一句,是的,我知道这不是添加两个整数数组的方法-我从更复杂的代码中简化了此过程以演示问题!

if语句之前定义output 像这样:

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;
}

if语句中声明output ,它仅具有该块作用域。

变量的范围始终是下一个封闭{ }

原因从声明开始(而不是在{ )开始

好的,您已经有了解决方案,但是我想指出的是,您可以减少方法,避免重复执行当前正在执行的代码。

您可以根据L1 > L2的结果使用conditional operators来创建数组。 而且,您应该迭代直到数组output的长度,而不是迭代到L1L2

因此,您可以尝试使用以下代码:-

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命名约定。 方法名称应以小写字母开头。

您在每个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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM