Java使用Scanner、数组、循环及if-else时重复打印问题如何解决?
问题原因
你当前的判断逻辑写在了球员数据录入的for循环内部,每录入1个球员的进球数就会立刻执行一次判断并打印结果,这是重复打印的核心原因。你的需求是所有球员数据录入完成后,统一判断整体结果只输出一次提示,因此需要把判断逻辑和录入逻辑拆分。
解决代码
import java.util.*; public class Main{ public static void main(String[]args) { Scanner x = new Scanner (System.in); System.out.print("Enter the number of players: "); int numplay = x.nextInt(); int players[]= new int[numplay]; int y; // 新增标记位:默认所有球员进球数都不超过10 boolean allUnder10 = true; // 第一层循环:仅完成所有球员进球数的录入,存入数组 for(int i=0; i < numplay; i++) { System.out.print("Goals score by player #"+ (i+1) +": "); y = x.nextInt(); players[i]=y; } // 第二层遍历数组:判断是否有球员进球数超过10 for(int goal : players){ if(goal > 10){ allUnder10 = false; break; // 只要有一个超过就可以提前终止遍历,提升效率 } } // 最后统一输出结果 if (allUnder10) { System.out.println("Okay, fine, it's Messi"); } else { System.out.println("Not Messi"); } } }
修改说明
- 新增了布尔标记位
allUnder10,用来记录是否所有球员进球数都不超过10 - 拆分了逻辑:第一层循环只负责录入所有球员的进球数据存入数组,符合你练习数组用法的需求
- 录入完成后单独遍历数组做判断,只要存在任意一个进球数超过10的球员,就将标记位置为false
- 最后根据标记位结果仅输出一次最终提示,完全匹配你期望的输出效果
内容的提问来源于stack exchange,提问作者kakakararara
相关产品推荐
相关产品推荐

