AI刷题:版本号比较 | 豆包MarsCode AI刷题
题面
代码结构
-
主类和主方法:
java 代码解读 复制代码 public class Main { public static void main(String[] args) { // 测试用例 System.out.println(solution("0.2.1", "0.1.1")); System.out.println(solution("1.0.1", "1") == 1); System.out.println(solution("7.5.2.4", "7.5.3") == -1); System.out.println(solution("1.0", "1.0.0") == 0); } }
Main
类包含一个main
方法,用于执行程序。- 在
main
方法中,调用solution
方法并打印结果,测试不同的版本号比较。
-
版本比较方法:
java 代码解读 复制代码 public static int solution(String version1, String version2) { String[] v1 = version1.split("\."); String[] v2 = version2.split("\."); for (int i = 0; i < v1.length || i < v2.length; ++i) { int x = 0, y = 0; if (i < v1.length) { x = Integer.parseInt(v1[i]); } if (i < v2.length) { y = Integer.parseInt(v2[i]); } if (x > y) { return 1; } if (x < y) { return -1; } } return 0; }
详细讲解
-
输入参数:
version1
和version2
是两个字符串,表示要比较的版本号。
-
分割版本号:
java 代码解读 复制代码 String[] v1 = version1.split("\."); String[] v2 = version2.split("\.");
- 使用
split("\.")
方法将版本号字符串按点号分割成数组。每个数组元素对应一个修订号。
- 使用
-
比较修订号:
java 代码解读 复制代码 for (int i = 0; i < v1.length || i < v2.length; ++i) { int x = 0, y = 0; if (i < v1.length) { x = Integer.parseInt(v1[i]); } if (i < v2.length) { y = Integer.parseInt(v2[i]); } if (x > y) { return 1; } if (x < y) { return -1; } }
-
使用
for
循环遍历修订号,循环条件是i < v1.length || i < v2.length
,这意味着只要有一个版本号还有修订号未比较,就继续循环。 -
在每次循环中,初始化
x
和y
为 0。然后根据当前索引i
,从v1
和v2
中提取修订号并转换为整数。 -
比较两个修订号:
- 如果
x > y
,返回1
,表示version1
更新。 - 如果
x < y
,返回-1
,表示version2
更新。
- 如果
-
-
返回相等结果:
java 代码解读 复制代码 return 0;
- 如果所有修订号都相等,循环结束后返回
0
,表示两个版本号相同。
- 如果所有修订号都相等,循环结束后返回
能力提升
1. 字符串处理能力
- 分割字符串:使用
split("\.")
方法将版本号字符串按点(.
)分割成数组。这要求对字符串操作有一定的理解,尤其是正则表达式的使用。 - 数组操作:将分割后的字符串数组进行遍历,处理每个版本号的各个部分。
2. 数字转换能力
- 字符串转整数:使用
Integer.parseInt()
方法将字符串转换为整数。这是处理版本号比较时的关键步骤,因为版本号的每一部分都需要作为数字进行比较。
3. 控制流与逻辑思维
- 循环与条件判断:使用
for
循环遍历版本号的每一部分,并通过if
语句进行条件判断,比较两个版本号的大小。这锻炼了对控制流的理解和逻辑思维能力。 - 处理不同长度的版本号:代码能够处理不同长度的版本号(例如 "1.0" 和 "1.0.0"),这需要考虑到数组的边界条件。
4. 方法设计与返回值
- 方法的设计:定义了一个
solution
方法,接受两个版本号字符串作为参数,并返回比较结果。这锻炼了方法的设计能力和函数式编程的思维。 - 返回值的使用:通过返回值来表示比较结果(1 表示第一个版本号更大,-1 表示第二个版本号更大,0 表示相等),这要求对函数返回值的意义有清晰的理解。
5. 测试与验证
- 测试用例的设计:在
main
方法中,设计了多个测试用例来验证solution
方法的正确性。这锻炼了对代码测试和验证的能力,能够帮助开发者确保代码的功能符合预期。
总结
此题锻炼了字符串处理、数字转换、控制流、方法设计和测试验证等多方面的编程能力。通过理解和实现这段代码,开发者可以提高自己的编程技能,尤其是在处理字符串和数组时的能力。