Java升序/降序判断算法逻辑问题求助
Java数字序列升序/降序/混合判断代码逻辑错误排查
我是Java初学者,尝试编写判断输入数字序列升序、降序或混合顺序的算法,但逻辑存在问题:无法正确保留变量状态并在循环中校验,分支语句也无法正确执行。
预期示例
- 输入
1, 47, 89, 98, 165,256,300,0时,应输出:End of the program, numbers been entered in regular order - 输入
86,75,32,11,0时,应输出:End of the program, numbers been entered in reversed order - 输入
43, 54,11,6,7,45,44,44,44,56,33,0时,应输出:End of the program, numbers been entered in mixed or same order
我的代码版本2
boolean mixed; boolean up = true; boolean down = true; int numToAdd; System.out.println("Enter a Number:"); int previousNum = input.nextInt(); do { System.out.println("Enter a Number:"); numToAdd = input.nextInt(); if (numToAdd == 0) break; if (numToAdd > previousNum ) { up = true; } if (numToAdd < previousNum) { down = true; } mixed = !up && !down; previousNum = numToAdd; } while (numToAdd != 0); if (up = true ) { System.out.println("End of the program, numbers been entered in regular order"); } if (down = true) { System.out.println("End of the program, numbers been entered in reversed order"); } if (mixed = true) { System.out.println("End of the program, numbers been entered in mixed or same order"); }
逻辑错误排查
赋值操作替代比较操作:最后三个
if语句使用了=(赋值运算符)而非==(比较运算符)。比如if (up = true)会直接将up设置为true,导致所有分支都会被执行,这是最核心的错误。正确写法应为if (up)(直接判断布尔值)或if (up == true)。布尔变量状态维护错误:初始时
up和down都设为true,但逻辑应该是:只要出现一次不满足升序的情况(即当前数小于前一个数),就将up设为false;只要出现一次不满足降序的情况(即当前数大于前一个数),就将down设为false。当前代码中,只要有一次符合升序/降序就把对应变量设为true,会覆盖之前的错误状态,导致无法正确记录序列是否全程符合升序/降序。mixed变量计算逻辑错误:mixed = !up && !down的逻辑不成立,且每次循环都重新计算mixed没有意义。正确的混合顺序判断应该是:当up和down同时为false时,说明序列既不是全程升序也不是全程降序,即为混合;另外,当前代码未处理两数相等的情况,相等时不应改变up和down的状态(因为相等不破坏升序或降序的连续性)。
修正后的代码
boolean up = true; boolean down = true; int numToAdd; System.out.println("Enter a Number:"); int previousNum = input.nextInt(); do { System.out.println("Enter a Number:"); numToAdd = input.nextInt(); if (numToAdd == 0) break; if (numToAdd > previousNum) { // 出现升序,说明不可能是全程降序 down = false; } else if (numToAdd < previousNum) { // 出现降序,说明不可能是全程升序 up = false; } // 相等时不修改up和down previousNum = numToAdd; } while (numToAdd != 0); if (up) { System.out.println("End of the program, numbers been entered in regular order"); } else if (down) { System.out.println("End of the program, numbers been entered in reversed order"); } else { System.out.println("End of the program, numbers been entered in mixed or same order"); }
关键修改说明
- 将
up和down的状态反转:一旦出现不符合升序的情况,就标记up为false;反之标记down为false,确保变量能正确记录序列的整体趋势。 - 用
else if处理分支,避免重复判断,同时忽略相等的情况(不影响升序/降序的连续性)。 - 循环结束后统一判断结果,使用
else if确保只输出一个正确结果,避免多分支同时触发。 - 移除了冗余的
mixed变量,直接通过up和down的状态判断混合情况。
内容的提问来源于stack exchange,提问作者Brandon Nolan
相关产品推荐
相关产品推荐

