请求帮助:使用Java for循环实现指定数字的递减格式输出
问题分析与修复代码
你的现有代码逻辑存在以下问题:
- 内层循环的数字输出范围错误,不应该从输入的
num开始,而是要从当前外层循环的起始数字i开始递减 - 连字符的拼接逻辑混乱,导致输出格式不符合要求
- 没有处理输入为1时的特殊输出需求(即
1-1)
以下是修复后的完整代码,完全符合你要的输出格式:
import java.util.Scanner; public class DescendingSequence { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个数字:"); int num = scanner.nextInt(); scanner.close(); // 外层循环控制每组的起始数字,从输入值递减到1 for (int start = num; start >= 1; start--) { // 内层循环控制每组的行数,每行的数字个数逐行增加 for (int lineLength = 1; lineLength <= start; lineLength++) { // 处理输入为1时的特殊输出 if (start == 1) { System.out.println("1-1"); break; } StringBuilder lineContent = new StringBuilder(); // 逐个输出当前行的数字,用连字符连接 for (int currentNum = start; currentNum >= start - lineLength + 1; currentNum--) { if (lineContent.length() > 0) { lineContent.append("-"); } lineContent.append(currentNum); } System.out.println(lineContent); } } } }
代码说明
- 外层循环:
start从输入的数字递减到1,负责控制每一组的起始数字(比如输入4时,依次处理4、3、2、1四组) - 内层循环:
lineLength控制每组内的行数和每行的数字个数,从1增加到当前的start值(比如start=4时,生成4行,数字个数从1到4) - 字符串拼接:使用
StringBuilder避免频繁字符串拼接的性能问题,同时自动处理连字符的位置,确保格式正确 - 特殊处理:单独处理
start=1的情况,输出要求的1-1
测试输入4时,输出与你给出的示例完全一致:
4
4-3
4-3-2
4-3-2-1
3
3-2
3-2-1
2
2-1
1-1
内容的提问来源于stack exchange,提问作者yiyiyiy
相关产品推荐
相关产品推荐

