
本文详解如何在 java 中正确判断三个输入整数中是否存在任意两个数之和恰好为 20,重点修复原代码中数组长度误用、输入数量不足及双指针算法适配性等关键错误。
本文详解如何在 java 中正确判断三个输入整数中是否存在任意两个数之和恰好为 20,重点修复原代码中数组长度误用、输入数量不足及双指针算法适配性等关键错误。
原问题要求:读入三个整数 a、b、c,判断其中是否存在一对数(即两个不同位置的数)之和等于 20,输出 true 或 false。但提供的代码存在多个根本性错误,导致无法通过含负数的测试用例(如 -5 25 8),核心问题如下:
- 数组大小错误:声明 int[] arrayOfNumbers = new int[2]; —— 只能存 2 个数,但题目明确要求读取 3 个数(a, b, c);
- 循环边界与索引越界风险:for (int i = 0; i
- 算法前提不匹配:hasArrayTwoCandidates 使用双指针法,依赖排序后首尾逼近,该方法完全支持负数(如 -5 + 25 = 20),失败根源不在算法本身,而在于输入未完整读取——负数测试用例往往依赖第三个数参与配对,但程序根本没读它。
✅ 正确做法是:申请长度为 3 的数组,准确读入全部三个整数,再应用排序+双指针。以下是修正后的完整可运行代码:
import java.util.Arrays;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] nums = new int[3]; // ✅ 正确:存储 a, b, c 共 3 个数
// ✅ 正确读取全部三个整数
for (int i = 0; i <p>? <strong>关键验证示例</strong>:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20dbae7c507.jpg" alt="Java注释规范Skills" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills" class="overflowclass">Java注释规范Skills</a>
<p class="overflowclass">当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。</p>
</div>
<a rel="nofollow" href="/xiazai/skill9868" title="Java注释规范Skills" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- 输入 1 2 3 → 所有两两和:3, 4, 5 → 输出 false ✅
- 输入 4 16 7 → 4 + 16 = 20 → 输出 true ✅
- 输入 -5 25 8 → -5 + 25 = 20 → 输出 true ✅(修复后可正确通过)
⚠️ 注意事项:
- 不要试图用固定 if (a+b==20 || a+c==20 || b+c==20) 硬编码判断——虽简单,但丧失扩展性;本题虽仅 3 数,但掌握通用双指针思想对处理任意长度数组至关重要;
- Arrays.sort() 对含负数的数组完全安全,双指针逻辑在 sum target 时左移右指针(找更小加数),天然兼容负数区间;
- 始终校验输入规模(arr.length)再调用算法,避免空指针或越界。
总结:问题本质不是“负数不工作”,而是数据未完整摄入。严谨对待输入规格(3 个数 → 数组长度=3)、用标准库工具(Arrays.sort)、结合经典算法(双指针),即可稳健解决包括负数在内的所有合法输入场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










