【发布时间】:2015-10-26 19:22:13
【问题描述】:
我目前正在尝试像这样循环遍历 BigInteger...
BigInteger y;
BigInteger yu = BigInteger.valueOf(17);
for(y= new BigInteger("96");y.compareTo(yu.add(y)) < 0;y=y.add(BigInteger.ONE)){
Toast.makeText(getApplicationContext(),"y="+y,Toast.LENGTH_SHORT).show();
}
出于本示例的目的,我只使用了 96,但对于更大的数字也会发生同样的情况。当我开始程序时,屏幕变黑并且 log.cat 显示以下消息:
10-26 19:15:49.853 5043-5043/everything.ofjd.com.everythingform D/dalvikvm: GC_FOR_ALLOC freed 9202K, 48% free 16294K/30792K, paused 162ms, total 162ms
10-26 19:15:50.923 5043-5043/everything.ofjd.com.everythingform D/dalvikvm: GC_FOR_ALLOC freed 9530K, 52% free 14955K/30792K, paused 155ms, total 156ms
10-26 19:15:51.983 5043-5043/everything.ofjd.com.everythingform D/dalvikvm: GC_FOR_ALLOC freed 9037K, 55% free 14110K/30792K, paused 146ms, total 147ms
10-26 19:15:53.018 5043-5043/everything.ofjd.com.everythingform D/dalvikvm: GC_FOR_ALLOC freed 8207K, 55% free 14094K/30792K, paused 141ms, total 141ms
10-26 19:15:54.068 5043-5043/everything.ofjd.com.everythingform D/dalvikvm: GC_FOR_ALLOC freed 8172K, 55% free 14114K/30792K, paused 143ms, total 143ms
只要应用程序运行,Log.cat 就会继续记录 55%,有人知道这是为什么吗?
感谢阅读:)
【问题讨论】:
-
你认为你的 for 循环在做什么?
-
@Kayaman 你是什么意思?
-
那么,你为什么不使用
for(int i = 0;i < 17;i++),而完全没有理由地使用BigInteger? -
y.compareTo(yu.add(y)) < 0说“y 小于 y + 17”,这始终是正确的,因此您创建了一个无限循环。你想做什么? -
要明确:
9223372036854775807是long的限制。对于int循环变量,最大值为2147483647。
标签: java android for-loop memory biginteger