Java技术问题:如何仅在最后一个符合条件数字打印后换行
问题分析与解决方案
核心问题
你的代码存在两个关键问题:
- 数组越界异常:循环条件
i < stopping完全错误,stopping是你输入的阈值100,而数组userValues仅包含5个元素。当循环执行到i=5时,会触发ArrayIndexOutOfBoundsException,程序直接崩溃,导致循环外的换行代码System.out.println("");根本没机会执行。 - 多余的尾部逗号:当前输出逻辑会在符合条件的最后一个数字后也添加逗号,不符合预期格式。
修复后的代码方案
方案一:先收集符合条件的元素再输出(简洁易读)
import java.util.Scanner; import java.util.ArrayList; import java.util.List; public class LabProgram { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int userInputs = scnr.nextInt(); int[] userValues = new int[userInputs]; for (int i = 0; i < userInputs; i++) { userValues[i] = scnr.nextInt(); } /* 修复后的代码 */ int stopping = scnr.nextInt(); List<Integer> validNumbers = new ArrayList<>(); // 遍历所有输入的数值,而非stopping次 for (int num : userValues) { if (num <= stopping) { validNumbers.add(num); } } // 用逗号拼接元素,直接输出并自动换行 System.out.println(String.join(",", validNumbers.stream().map(String::valueOf).toArray(String[]::new))); } }
方案二:直接输出时控制格式(无需额外集合)
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int userInputs = scnr.nextInt(); int[] userValues = new int[userInputs]; for (int i = 0; i < userInputs; i++) { userValues[i] = scnr.nextInt(); } /* 修复后的代码 */ int stopping = scnr.nextInt(); boolean isFirstValid = true; // 遍历数组所有元素,避免越界 for (int num : userValues) { if (num <= stopping) { if (!isFirstValid) { // 非第一个元素先输出逗号 System.out.print(","); } System.out.print(num); isFirstValid = false; } } // 所有符合条件的元素输出完成后换行 System.out.println(); } }
效果验证
输入5 50 60 140 200 75 100时,两种方案都会输出:
50,60,75
完美实现"75后换行"且无多余逗号的需求。
内容的提问来源于stack exchange,提问作者Osprey
相关产品推荐
相关产品推荐

