如何让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(); }
关键修改点
- 外层循环跳过连续0:用
while循环替代原来的if,持续检查当前位置是否为0,直到找到非0元素或数组结束,同时添加边界判断防止越界。 - 内层循环跳过连续0:同样用
while循环处理内层的连续0,确保只处理非0元素。
内容的提问来源于stack exchange,提问作者michelle
相关产品推荐
相关产品推荐

