编写单循环Java程序:输入1-9,输出指定奇偶排列目标序列
Java单循环实现指定数字序列输出
没问题,这有两种仅用单个循环就能满足你需求的Java方案,我给你详细拆解下思路:
方案一:通过循环索引计算目标元素
这种方法不需要额外存储,直接通过循环的位置索引来定位要输出的数字,效率很高:
public class NumberSequencePrinter { public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9}; StringBuilder result = new StringBuilder("{"); // 仅用一个for循环遍历9次,对应9个目标元素 for (int i = 0; i < numbers.length; i++) { int targetNum; if (i < 5) { // 前5次循环:取原数组中的奇数(索引0、2、4、6、8) targetNum = numbers[2 * i]; } else { // 后4次循环:取原数组中逆序的偶数(索引7、5、3、1) targetNum = numbers[7 - 2 * (i - 5)]; } result.append(targetNum).append(", "); } // 移除末尾多余的逗号和空格,补全格式 if (result.length() > 1) { result.setLength(result.length() - 2); } result.append("}"); System.out.println(result); } }
思路说明:
- 我们的目标序列分为两部分:前5个是原集合从左到右的奇数,后4个是原集合从右到左的偶数。
- 循环索引
i从0到8:- 当
i < 5时,原数组的奇数正好在2*i的索引位置(0→1,2→3,…,8→9),直接取值即可。 - 当
i >=5时,原数组的偶数在索引1、3、5、7,逆序后就是7、5、3、1。通过7 - 2*(i-5)的计算,能精准定位到这些逆序的偶数索引。
- 当
方案二:遍历收集+逆序拼接
这种写法更直观,适合新手理解,同样只用一个循环:
public class NumberSequencePrinter { public static void main(String[] args) { StringBuilder oddPart = new StringBuilder(); StringBuilder evenPart = new StringBuilder(); // 单个循环遍历1到9的所有数字 for (int num = 1; num <= 9; num++) { if (num % 2 != 0) { // 奇数直接追加到结果的前半部分 oddPart.append(num).append(", "); } else { // 偶数插入到偶数部分的开头,自动实现逆序 evenPart.insert(0, num).insert(0, ", "); } } // 拼接两部分并整理格式 String result = "{" + oddPart.toString() + evenPart.substring(2) + "}"; System.out.println(result); } }
思路说明:
- 遍历1到9的每个数字,遇到奇数直接拼接到奇数结果串里;
- 遇到偶数时,每次插入到偶数串的最开头,这样遍历完所有偶数后,偶数串自然就是逆序的(比如先处理2→"2",再处理4→"4, 2",接着6→"6, 4, 2",以此类推);
- 最后把奇数串和处理后的偶数串拼接,调整格式就得到目标序列。
两种方案都严格遵循了“仅用一个循环”的要求,运行后都会输出你要的{1,3,5,7,9,8,6,4,2}。
内容的提问来源于stack exchange,提问作者Naman
相关产品推荐
相关产品推荐

