0

我正在为学校的作业编写一个 for 循环。循环将写入最小数字,例如。26 并且在循环中每转 7 次都会增加,直到达到最大值,例如。112.在每个数字之间,还要写一个逗号——“,”。但不是在最后一个数字之后。

现在我的代码如下所示:

int min=26;
int max=112;

for(int i=min; i<=max; i+=7)
{
   if(i!=max)
   {
      System.out.print(i+", ");
   }
   else
   {
      System.out.print(i);
   }

}

现在最后一个数字会有一个逗号......我的问题在哪里?

4

6 回答 6

3

其他人解释说,i可能永远不等于max. 对于这样的情况,等到下一次循环迭代打印逗号更容易:

for(int i=min; i<=max; i+=7)
{
   if(i!=min)
   {
      System.out.print(", "+i);
   }
   else
   {
      System.out.print(i);
   }

}

(通常我会设置一个单独的boolean命名first来查看我是否正在经历第一次迭代;它设置为true循环之前和循环false结束时。)

PS 还有其他解决问题的方法,比如改变i==max条件或者计算实际最大值。但是,上述方法可以应用于许多与步进固定量没有任何关系的情况,并且可能不那么容易提前确定循环何时停止。

于 2013-10-14T18:20:36.410 回答
1

它永远不会进入else循环,因为在您的代码max = 112中,但您的for循环不会达到该值。(增加 7 后达到110 )。所以它只会执行'if'循环并用逗号打印字符串,然后退出。

于 2013-10-14T18:17:05.427 回答
1

12次循环后:26+7*12 = 110。它将退出循环,永远不会满足第二个条件。

int min=26;
int max=112;

for(int i=min; i<=max; i+=7) {
    if(i <= max-7)
        System.out.print(i+", ");
    else
        System.out.print(i);
}
于 2013-10-14T18:30:54.910 回答
1

由于 'i' 永远不会等于 'max',所以不会执行 else 子句。
如果'min'总是小于'max',那么你也可以这样做:

int min=26;
int max=112;

System.out.print(min);
for(int i=min+7; i<=max; i+=7)
{
    System.out.print("," + i);
}
于 2013-10-14T18:24:42.857 回答
0

你的最大值是 112,你的最小值是 26。每次迭代都增加 7。如果你从 112 中减去 26,你会看到结果不是 7 的倍数,这意味着你的循环在i正好是 112 时没有停止。相反,你的循环在i达到值 112 之前结束。这就是为什么你看到一个逗号在最后打印的字符串。

于 2013-10-14T18:18:05.443 回答
0

鉴于您的增量步骤 y ,在循环的最后一次迭代中,i可能不等于。实际上,您的循环从to运行,这不是.max726112867

如果你根据 min 和 step 计算你的最大值,你应该没问题,比如.-

int step = 7;
int min = 26;
int max = min * step;

for(int i = min; i <= max; i += step)
于 2013-10-14T18:16:51.197 回答