【问题标题】:For loop only going through onceFor循环只经过一次
【发布时间】:2013-10-05 21:32:09
【问题描述】:

这是我的代码的一部分。在带有 for 循环的部分: 我一生都无法弄清楚为什么它只循环一次。我已经盯着这个看了好几个小时,想知道为什么它只做一次。 parse 等于 3,所以如果我的逻辑正确,它应该执行 3 次。谢谢。

public BigInt multiplcationHelper(BigInt B1,BigInt B2) {
    int size1 = this.num.size(), size2 = B2.num.size();// sizes of B1 and B2
    BigInt result = new BigInt();
    int parse = Integer.parseInt(B2.toString());
    int farse = Integer.parseInt(B1.toString());

    // result's num initial capacity of one more than B1's num and fill with null objects.
    result.num = new ArrayList (Collections.nCopies( size1+1, null ));

    //Both B1 and B2 are positive
    //if (B1.isPositive && B2.isPositive){ 
    for (int i = 0; i<parse; i++) {
        B1.add(B1);     
    //}
    }
    //result = B1;
    return B1;
}

【问题讨论】:

  • 您应该打印出parse 的值以确定,或者在调试器中单步执行。
  • 因为BigInt 是您自己的实现,发布代码只是为了确保您的方法addtoString 中没有任何内容

标签: java loops for-loop integer


【解决方案1】:

我认为您感到困惑的是B1.add(B1); 实际上并没有加倍B1。你可能想要B1 = B1.add(B1);。正如http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html 处的 API 所述,add() 只是返回一个新的BigInteger;它不会影响调用它的 BigInteger。

您真的需要为此使用 BigInteger 吗?值 3 应该只是一个 int(BigInteger 严重矫枉过正)。

【讨论】:

  • 是的,我需要使用 BigInteger。我通过调试器和解析是正确的数字。另外,我使用了 B1 = B1.add(B1) 但我得到的数字太高了。
  • 肯定会很高。在进行了我建议的微小更改之后,B1 的值将随着循环的每次迭代而翻倍(这是我假设你想要的)。您是否只是想创建一个返回两个 BigInts 乘积的函数?有一个非常更简单的方法可以做到这一点:使用BigInteger.multiply()(在 API 链接上阅读)。
  • 我希望创建一个返回两个 BigInts 乘积的函数。我不能使用 Big Integer 类,我必须自己实现它。我正在尝试做的是通过循环使用我创建的加法方法作为乘法方法。
  • 您实际上已经很接近了。首先,去掉函数中所有你不使用的变量:size1size2resultfarse,以及以result.num =开头的行。接下来,回到基础。如果你想将 5 x 6 相乘,另一种思考方式是从 0 开始,然后连续将 5 加 6 次。您的循环就是这样做的,但首先在初始化为 0 的循环之外创建一个计数器 BigInt。每次迭代时递增计数器。您还必须对现有循环进行另一项更改;我会让你弄清楚。
  • 我摆脱了变量并将其变成了这样:我仍然不确定为什么这不起作用。我只是无法理解为什么它没有像我想要的那样将 B1 添加到 0 5 次。 'BigInt 计数器 = new BigInt("0");计数器 = B2; for (int i = 0; i
【解决方案2】:

你的第一行是

int size1 = this.num.size(), size2 = B2.num.size();// sizes of B1 and B2

size1 的大小不是B1。试试:

int size1 = B1.num.size(), size2 = B2.num.size();// sizes of B1 and B2

【讨论】:

    猜你喜欢
    • 2015-06-09
    • 2023-03-24
    • 2019-04-06
    • 2016-01-09
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多