The World Is In Your Eye 2024-04-20 11:34 采纳率: 100%
浏览 3
已结题

这两段代码有啥区别,为啥第二段代码每4行多一行空格,很迷惑

这两段代码有啥区别,为啥第二段代码每4行多一行空格,很迷惑


    int j=0;    
        for(int i=1;i<=100;i++){

            if(i%5!=0){
                System.out.print(i+"\t"); 
                j++;
                if(j%5==0){
                    System.out.println(" ");

            }
            
            }
            
        }

```java
int j=0;    
        for(int i=1;i<=100;i++){

            if(i%5!=0){
                System.out.print(i+"\t"); 
                j++;
                

            }if(j%5==0){
                    System.out.println(" ");
            
            }

```

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-20 11:35
    关注

    引自免费微信小程序:皆我百晓生

    两段代码的主要区别在于控制输出空格换行的部分逻辑结构不同。在第一段代码中,空格换行的判断与打印数字的逻辑是紧密相连的,即每当j达到5时(表示已经输出了5个数字),会打印一个空行。而第二段代码中,这部分逻辑被分开了,导致在某些情况下可能会多出一行空格。

    让我们分析一下两段代码的区别:

    第一段代码:

    int j = 0;
    for (int i = 1; i <= 100; i++) {
        if (i % 5 != 0) {
            System.out.print(i + "\t");
            j++;
            if (j % 5 == 0) {
                System.out.println(" ");
            }
        }
    }
    

    这段代码的逻辑是这样的:

    • 遍历从1到100的整数。
    • 如果当前遍历到的数字 i 不能被5整除(即 i % 5 != 0),那么就打印这个数字并增加计数器 j
    • 当计数器 j 达到5时(即 j % 5 == 0),打印一个空行,并重置计数器 j 的值。

    因此,这段代码会将数字按每5个一组排列,并在每组之间插入一个空行。

    第二段代码:

    int j = 0;
    for (int i = 1; i <= 100; i++) {
        if (i % 5 != 0) {
            System.out.print(i + "\t");
            j++;
    
        } if (j % 5 == 0) { // 注意这里没有缩进,导致条件独立
            System.out.println(" ");
        }
    }
    

    在这段代码中,由于if (j % 5 == 0)的缩进错误,它不再与前面的循环体关联,而是变成了独立的条件判断。这意味着不论是否执行了打印数字的操作,只要j达到5,就会立即打印一个空行。

    这会导致在每次迭代过程中,当j达到5时,无论是否已经打印了数字,都会立即插入一个空行。这样就会在某些地方产生额外的空行,因为即使在遍历的开始阶段,j达到5也会触发空行的打印。

    修正后的第二段代码应该像这样,保持相同的逻辑:

    int j = 0;
    for (int i = 1; i <= 100; i++) {
        if (i % 5 != 0) {
            System.out.print(i + "\t");
            j++;
            
            // 将这里缩进,使其成为循环的一部分
            if (j % 5 == 0) {
                System.out.println(" ");
            }
        }
    }
    

    现在,两段代码的逻辑是一致的,都能实现每5个数字打印一行的效果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月20日
  • 已采纳回答 4月20日
  • 创建了问题 4月20日

悬赏问题

  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
  • ¥30 关于R语言运行分区生存模型中的问题!
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)