Java实现IP地址octet校验时非法场景错误输出如何修复?
问题根因
你当前代码的多余输出来自于每段octet校验后额外添加的if (invalid)打印octet值的逻辑:只要任意一个octet被判定非法,invalid变量就会被置为true,后续所有octet对应的这段输出逻辑都会被触发,最终会输出全部4个octet的值,和你的需求冲突。
修复方法
直接删除4段多余的octet值输出代码即可,若需要多个非法octet的提示信息分行展示,可将原来的System.out.print改为System.out.println避免提示内容挤在同一行。调整后完整可运行代码如下:
import java.util.Scanner; public class IpValidator { public static void main(String[] args) { Scanner scan = new Scanner(System.in); // 接收4个octet输入 System.out.println("Please enter the first octet:"); int oct1 = scan.nextInt(); System.out.println("Please enter the second octet:"); int oct2 = scan.nextInt(); System.out.println("Please enter the third octet:"); int oct3 = scan.nextInt(); System.out.println("Please enter the fourth octet:"); int oct4 = scan.nextInt(); boolean invalid = false; // 校验第1个octet if (oct1 < 1 || oct1 > 255){ System.out.println("Octet 1 is invalid."); invalid = true; } // 校验第2个octet if (oct2 < 0 || oct2 > 255){ System.out.println("Octet 2 is invalid."); invalid = true; } // 校验第3个octet if (oct3 < 0 || oct3 > 255){ System.out.println("Octet 3 is invalid."); invalid = true; } // 校验第4个octet if (oct4 < 1 || oct4 > 254){ System.out.println("Octet 4 is invalid."); invalid = true; } // 所有octet合法时输出IP地址 if (!invalid) { System.out.println("IP address: " + oct1 + "." + oct2 + "." + oct3 + "." + oct4); } scan.close(); } }
效果验证
- 所有octet合法:正常输出点分十进制格式的IP地址
- 存在非法octet:仅输出对应编号的octet无效提示,不会输出任何octet值,完全符合需求
内容的提问来源于stack exchange,提问作者Orion27
相关产品推荐
相关产品推荐

