【问题标题】:How to save the last integer used in a for-loop如何保存for循环中使用的最后一个整数
【发布时间】:2013-03-06 03:25:09
【问题描述】:

我目前正在开发一个程序,我需要保存最后使用的整数的值。

让我们考虑一下这种情况:

   for (int i = 1;i<=28123;i++){
        if (isAbundant(i)){
            if (i*2 <= 28123){
                sum2 += i*2;
            }
            if (i + [the previous value of i] <= 28123){
                sum2 += i + [the previous value of i];
            }
        }
    }

如何让previous value of i 实际代表i 的先前值?我需要将i 保存为另一个变量吗?如果是这样的话,i不就变成现在的i了吗?

如果您发现问题集来自:请不要评论问题本身。请直接回答问题。

【问题讨论】:

  • 使用一些变量来存储值怎么样?
  • for-loop 之前定义int i; 并像这样使用它for(i = 1;i&lt;=28123;i++)int i = 1; + for(;i&lt;=28123;i++) 这样变量ifor 的范围之外是可见的块。

标签: java for-loop save


【解决方案1】:

尽管提出问题的方式(方式不花钱),但在循环之外定义 int i:

int i=0;
for (i = 1;i<=28123;i++){
    if (isAbundant(i)){
        if (i*2 <= 28123){
            sum2 += i*2;
        }
        if (i + (i-1) <= 28123) { //your only ++ing i, so previous value is always i-1
            sum2 += i + (i-1);
        }
    }
}

//i is now accessable here

【讨论】:

  • 谢谢,这正是我需要的。
【解决方案2】:

试试这个。但是,您可能需要根据您的要求处理第一次迭代的特殊情况。

int pre = 0;
for (int i = 1; i <= 28123; i++) {
    if (isAbundant(i)) {
        if (i * 2 <= 28123) {
            sum2 += i * 2;
        }
        if (i + pre <= 28123) {
            sum2 += i + pre;
        }
    }
    pre = i;
}

【讨论】:

  • 删除了反对票,因为它可能对我给它的目的有点苛刻。这是由于 pre 的不必要定义,在这种情况下 pre 完全是多余的,只会浪费处理时间
猜你喜欢
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 2015-08-04
相关资源
最近更新 更多