Java技术问询:通过用户输入计算索引查找对应光纤颜色
光纤颜色查询代码修正方案
原代码存在的问题
- 条件判断嵌套错误:
input >= 145的判断被包裹在input < 145的if块里,永远无法触发 - 冗余且错误的for循环:计算出
modNum后直接用它作为数组索引就能获取颜色,原循环的终止条件i == fiberColors.length永远不成立(数组长度为12,modNum范围是0-11),导致不会执行输出 - 缺失非正整数校验:用户输入0或负数时没有错误提示
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner inputNum = new Scanner(System.in); System.out.println("Enter Number..."); String[] fiberColors = {"Blue", "Orange", "Green", "Brown", "Slate", "White", "Red", "Black", "Yellow", "Violet", "Rose", "Aqua"}; int input = inputNum.nextInt(); if (input < 1 || input > 144) { System.out.println("Invalid Number/Please enter between 1 and 144"); } else { int modNum = (input - 1) % 12; System.out.println(fiberColors[modNum]); } inputNum.close(); // 关闭Scanner资源 } }
修正说明
- 重构条件判断:将非法输入(<1或>144)的判断放在一起,合法输入进入else分支处理,逻辑更直观
- 移除无用循环:直接通过计算得到的
modNum索引数组,一步获取对应颜色并输出 - 增加资源释放:调用
inputNum.close()关闭Scanner,避免资源泄漏 - 优化错误提示:统一非法输入的提示信息,覆盖所有不合法的输入情况
内容的提问来源于stack exchange,提问作者Jardo
相关产品推荐
相关产品推荐

