Java实现IP地址octet校验及无效项提示功能问题咨询
原代码存在的问题
- if判断语句末尾多写了英文分号
;,会直接截断判断逻辑,导致后续大括号内的错误提示无论条件是否成立都会执行 - 校验逻辑写反:当前判断条件是「八位组处于合法范围」时触发错误提示,实际应该是不满足合法范围时才输出错误
- 缺少全局错误标记,无法判断所有八位组是否全部校验通过,也没有合法IP的输出逻辑
合法校验规则(按要求)
- 第1个八位组:取值范围
1~255合法 - 第2个八位组:取值范围
0~255合法 - 第3个八位组:取值范围
0~255合法 - 第4个八位组:取值范围
1~254合法
修正后可直接运行的完整代码
import java.util.Scanner; public class IpCheck { public static void main(String[] args) { Scanner scan = new Scanner(System.in); // 标记是否存在非法八位组,初始值为无错误 boolean hasInvalid = false; System.out.println("Please enter the first Octet:"); int oct1 = scan.nextInt(); if (!(oct1 >=1 && oct1 <=255)) { System.out.println("Octet one is incorrect."); hasInvalid = true; } System.out.println("Please enter the second Octet:"); int oct2 = scan.nextInt(); if (!(oct2 >=0 && oct2 <=255)) { System.out.println("Octet two is incorrect."); hasInvalid = true; } System.out.println("Please enter the third Octet:"); int oct3 = scan.nextInt(); if (!(oct3 >=0 && oct3 <=255)) { System.out.println("Octet three is incorrect."); hasInvalid = true; } System.out.println("Please enter the fourth Octet:"); int oct4 = scan.nextInt(); if (!(oct4 >=1 && oct4 <=254)) { System.out.println("Octet four is incorrect."); hasInvalid = true; } // 所有八位组都合法时输出IP地址 if (!hasInvalid) { System.out.println("IP Address: " + oct1 + "." + oct2 + "." + oct3 + "." + oct4); } scan.close(); } }
逻辑说明
- 用
hasInvalid布尔变量记录是否出现过非法八位组,只要有一个八位组不合法就标记为true - 去掉了if语句末尾的多余分号,确保只有条件成立时才执行对应逻辑
- 所有校验逻辑和输出格式完全匹配题目给出的要求,运行结果和示例完全一致
内容的提问来源于stack exchange,提问作者Orion27
相关产品推荐
相关产品推荐

