在返回之前重置值

时间:2015-08-02 18:28:32

标签: java return

我有一个简单的sumOf方法来计算几何系列的总和:

public int sumOf(int terms) {
for(int i = 0; i < terms; i++){
sum += getNextTerm();
}
int b = sum;
sum = 0;
return b;
}

求和工作正常,但正如你所看到的那样,我试图在返回之前将sum变量重置为零,但是以相当愚蠢的方式。我正在创建一个新的int并将总和存储在那里,然后重置。

有没有更好的方法来解决这个问题?

5 个答案:

答案 0 :(得分:2)

我只想使用一个局部变量。

public int sumOf(int terms) {
    int sum = 0;
    for(int i = 0; i < terms; i++){
        sum += getNextTerm();
    }
    return sum;
}

在这种情况下使用字段没什么意义,如果方法根本不改变它。

答案 1 :(得分:1)

您可以使用resetSum()方法重置变量sum,如下所示:

private void resetSum() {
        this.sum = 0;
}

接下来,您可以使用try-finally语句,如下所示:

public int sumOf(int terms) {
    try {
        for (int i = 0; i < terms; i++) {
            sum += getNextTerm();
        }
        return sum;
    } finally {
        resetSum();
    }
}

答案 2 :(得分:1)

您可以将sum声明为本地变量,以消除重置它的需要。您也可以直接返回sum,而无需使用其他中间变量b

public int sumOf(int terms) {
    int sum = 0;
    for(int i = 0; i < terms; i++){
        sum += getNextTerm();
    }
    return sum;
}

答案 3 :(得分:1)

将sum作为局部变量,然后您不需要重置它。

public int sumOf(int terms) {
    int sum = 0;
    for(int i = 0; i < terms; i++){
        sum += getNextTerm();
    }
    return sum;
}

答案 4 :(得分:1)

只需使用局部变量即可保留总和。

public int sumOf(int terms) {
  int sum = 0;
  for (int i = 0; i < terms; i++) {
    sum += getNextTerm();
  }
  return sum;
}

顺便说一句,如果你碰巧使用的是Java 8,你可以使用FP惯用语。

public int sumOf(int terms) {
  return IntStream.generate(this::getNextTerm)
                  .limit(terms)
                  .sum();
}