Java 此for循环中有关数组长度的IllegalArgumentException错误的原因
我的程序如下所示: 输入数组为[1,2,3,4],目标为7,输出应为[2,3]Java 此for循环中有关数组长度的IllegalArgumentException错误的原因,java,algorithm,Java,Algorithm,我的程序如下所示: 输入数组为[1,2,3,4],目标为7,输出应为[2,3] public int[] twoSum(int[] nums, int target) { Map<Integer,Integer> map = new HashMap<>(); // nums.length-1 why is cannot be minus 1 for (int i = 0; i < nums.length-1; i++){ in
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
// nums.length-1 why is cannot be minus 1
for (int i = 0; i < nums.length-1; i++){
int result = target - nums[i];
if (map.containsKey(result)){
return new int[]{i,map.get(result)};
}
map.put(nums[i],i);
}
throw new IllegalArgumentException("No result.");
}
但是将搜索长度更改为+1,则会成功。
正确的代码如下所示
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
// the correct answer is no minus 1 in i < nums.length
for (int i = 0; i < nums.length; i++){
int result = target - nums[i];
if (map.containsKey(result)){
return new int[]{i,map.get(result)};
}
map.put(nums[i],i);
}
throw new IllegalArgumentException("No result.");
}
这是直截了当的:
if (map.containsKey(result)){
return new int[]{i,map.get(result)};
将中止/中断/结束封闭方法
换句话说:当满足某个条件时,该方法在循环中停止
如果该条件从未满足,则循环将重复,然后,硬编码的无条件抛出将生效
考虑到问题的编辑:这里的要点是您编写了一些非常难以理解的代码。变量的命名并没有告诉我们它们的预期用途
我只能重复刚才所说的:这段代码实现了某种算法。该算法应该识别输入数组中的这两个索引,这两个索引相加会产生一些“目标和”。该算法使用一个使用
- 作为映射键的输入数组中的值
- 该值的索引作为映射值
再次:这是您的代码,它正在执行您输入到代码中的操作,因此您应该后退一步,慢慢地,一步一步地深入了解它到底在执行什么操作。错误消息表明错误在第12行,如果您告诉我们哪一行是第12行,将非常有用。另外,用正确的方法编辑你的文章code@Abby不需要行号来标识抛出此方法的方法中的行。这一点是显而易见的。唯一一个悬而未决的问题是,为什么会出现这种情况。我感谢你能迅速接受!对不起,我的问题写错了。问题是关于评论行的。
throw new IllegalArgumentException("No result.");
if (map.containsKey(result)){
return new int[]{i,map.get(result)};