Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 此for循环中有关数组长度的IllegalArgumentException错误的原因_Java_Algorithm - Fatal编程技术网

Java 此for循环中有关数组长度的IllegalArgumentException错误的原因

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

我的程序如下所示: 输入数组为[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++){
        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)};