Java编程题:求数组最小正奇数代码自测通过但平台判错求助
问题描述
要求输出数组中最小的正奇数元素,若数组中无正奇数元素则输出0。输入格式为第一行输入数组元素个数,第二行输入数组元素。
用户编写的Java代码自测正常但在线判定平台报错,代码如下:
import java.util.Scanner; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner dashka = new Scanner(System.in); int n = dashka.nextInt(); int[] a = new int[n]; int min = 0; int y = 0; for (int i = 0; i < n; i++) { a[i] = dashka.nextInt(); if (i == y && a[i] > 0) { min = a[i]; } else if ((a[i] == 0 || a[i] < 0) && i % 2 != 0) { y += 2; } if (i % 2 == 0 && a[i] > 0) { if (a[i] < min) { min = a[i]; } } } System.out.print(min); } }
代码错误分析
你的代码存在核心逻辑偏差,完全不符合题目要求:
- 仅遍历偶数索引元素:代码只处理
i%2==0的位置元素,而题目要求遍历整个数组的所有元素。 - 未判断元素是否为奇数:题目要求找的是正奇数,但代码仅判断了
a[i]>0,完全遗漏了奇数的判定条件(a[i]%2 != 0)。 - 初始化与更新逻辑混乱:
min初始化为0,会干扰正奇数的最小值判断;y变量的逻辑多余,导致初始最小值的赋值逻辑错误。
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] a = new int[n]; // 初始化min为极大值,确保第一个正奇数能覆盖它 int min = Integer.MAX_VALUE; for (int i = 0; i < n; i++) { a[i] = scanner.nextInt(); // 严格判定:正整数且为奇数 if (a[i] > 0 && a[i] % 2 != 0) { if (a[i] < min) { min = a[i]; } } } // 若min未被更新,说明无正奇数,输出0;否则输出最小值 System.out.println(min == Integer.MAX_VALUE ? 0 : min); } }
测试用例验证
- 输入1:
5 3 2 5 7 1
输出:1(数组中最小的正奇数为1)
- 输入2:
4 -1 0 2 4
输出:0(无符合条件的正奇数)
- 输入3:
3 9 3 5
输出:3
内容的提问来源于stack exchange,提问作者Дина
相关产品推荐
相关产品推荐

