Java判断两数和为指定值程序:负数场景失效求助
问题分析与修复方案
核心问题
你的代码仅读取了两个输入数,但题目要求处理三个数(a、b、c):
- 数组
arrayOfNumbers被初始化为长度2,循环只读取两个值,完全遗漏了第三个输入; - 这导致所有涉及第三个数的两两组合(比如第一个数+第三个数、第二个数+第三个数)都没被检查,包括负数场景下的有效组合(例如
-5 + 25 = 20,若第三个数是25,你的代码根本不会读取它)。
修复方案
方案1:直接检查所有两两组合(最简洁高效)
对于三个数来说,直接判断所有可能的两两之和是否等于20即可,无需排序或双指针:
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); int c = scanner.nextInt(); boolean hasValidPair = (a + b == 20) || (a + c == 20) || (b + c == 20); System.out.println(hasValidPair); } }
方案2:保留双指针逻辑(适配更多元素场景)
如果想保留原有的双指针思路,只需调整数组长度以容纳三个数,并修正参数传递:
import java.util.Scanner; import java.util.Arrays; class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] nums = new int[3]; int target = 20; for (int i = 0; i < nums.length; i++) { nums[i] = scanner.nextInt(); } System.out.println(hasPairWithSum(nums, target)); } static boolean hasPairWithSum(int[] arr, int sum) { Arrays.sort(arr); int left = 0; int right = arr.length - 1; while (left < right) { int currentSum = arr[left] + arr[right]; if (currentSum == sum) { return true; } else if (currentSum < sum) { left++; } else { right--; } } return false; } }
为什么负数场景现在能正常工作
两种方案都会检查所有三个数的两两组合,无论数值正负。比如测试用例-10、30、5,方案1会检查-10+30=20,直接返回true;方案2排序后数组为[-10,5,30],双指针会先计算-10+30=20,同样返回true。
内容的提问来源于stack exchange,提问作者Shoshinmas
相关产品推荐
相关产品推荐

