You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Java的for循环跳过数组中所有连续的0元素?

问题分析与解决方案

你的问题出在跳过0的逻辑只执行了一次,不管是外层还是内层循环,遇到0时只做单次i++或j++,遇到连续0时,下一个0不会被检查,直接进入后续处理逻辑,导致错误。

修改方案

把单次跳过0的if语句改成**while循环**,这样就能持续跳过所有连续的0,直到找到非0元素或遍历到数组末尾。同时要加边界判断,避免数组越界。

修正后的完整代码

String [] deck = {"A","2","3","4","5","6","7","8","9","T","J","Q","K"};

int [] num = {2,5,17,52,18,47,37,29,22};

String suits = "";
int fcard;
String card = "";
int fcard2;
String card2 = "";


for(int i = 0; i < num.length; i++) {
    // 跳过所有连续的0
    while (i < num.length && num[i] == 0) {
        i++;
    }
    // 若i超出数组范围,直接退出循环
    if (i >= num.length) {
        break;
    }

    if (num[i] <=13) {
        suits = "Clubs";
        fcard = num[i] - 1;
        card = deck[fcard];
    }
    else if (num[i] >=14 && num[i] <=26) {
        suits = "Diamonds";
        fcard = num[i] - 14;
        card = deck[fcard];
    }
    else if (num[i] >=27 && num[i] <=39) {
        suits = "Hearts";
        fcard = num[i] - 27;
        card = deck[fcard];
    }
    else if (num[i] >=40 && num[i] <=52) {
        suits = "Spades";
        fcard = num[i] - 40;
        card = deck[fcard];
    }

    System.out.print(suits+":"+" "+card+" ");

    for (int j = i + 1 ; j < num.length; j++) {
        // 跳过所有连续的0
        while (j < num.length && num[j] == 0) {
            j++;
        }
        // 若j超出数组范围,直接退出内层循环
        if (j >= num.length) {
            break;
        }

        if (num[j]<=13 && suits.equals("Clubs")) {
            fcard2 = num[j] - 1;
            card2 = deck[fcard2];
            System.out.print(card2+" ");
            num[j]=0;
        }
        else if ((num[j]>=14 && num[j] <=26) && suits.equals("Diamonds")) {
            fcard2 = num[j] - 14;
            card2 = deck[fcard2];
            System.out.print(card2+" ");
            num[j]=0;
        }
        else if ((num[j] >=27 && num[j] <=39) && suits.equals("Hearts")) {
            fcard2 = num[j] - 27;
            card2 = deck[fcard2];
            System.out.print(card2+" ");
            num[j]=0;
        }
        else if ((num[j] >=40 && num[j] <=52) && suits.equals("Spades")) {
            fcard2 = num[j] - 40;
            card2 = deck[fcard2];
            System.out.print(card2+" ");
            num[j]=0;
        }

    }
    // 换行分隔每组输出,可选
    System.out.println();
}

关键修改点

  1. 外层循环跳过连续0:用while循环替代原来的if,持续检查当前位置是否为0,直到找到非0元素或数组结束,同时添加边界判断防止越界。
  2. 内层循环跳过连续0:同样用while循环处理内层的连续0,确保只处理非0元素。

内容的提问来源于stack exchange,提问作者michelle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:25:14