【问题标题】:Method taking in 2 arguments (array of ints, and a single int)采用 2 个参数的方法(整数数组和单个整数)
【发布时间】:2014-04-12 23:11:10
【问题描述】:

我创建了一个方法,给定一个数字数组和一个整数 n,它计算整数 n 的最长出现时间。例如1 0 0 0 1 1 1 1,给定数字 1,最长的序列是 4。我现在只是使用 0 和 1 来保持简单,但是我真的坚持实现我的主要方法来测试这个功能 - 我从命令行读取时,我不确定如何分隔整数“n”和整数数组,我希望能得到一些指针/帮助。这是我的代码:

public class OneB {

public static int longestSeq(int[] nums, int n) {


    int max = 0;
    int curLength = 0;

    for (int i = 0; i < nums.length; i++) {
        if (i == n) {
            curLength++;
            if (curLength > max)
                max = curLength;
        } else
            curLength = 0;
    }
    return max;
}


public static void main(String[] args) {  

    int[] nums = new int[args.length-2];
    int n = Integer.parseInt(args[args.length-1]);

    for (int i = 0; args.length-1 > i; i++) {
        nums[i] = Integer.parseInt(args[i]);
    }


    int result = longestSeq(nums, n);
    System.out.println(result);


      }
}

我的目标是将命令行中的最后一个数字用作整数 n,而之前的所有内容都将用作数组 nums。

输入 1 1 0 0 0 1 1 1 1 1(最后一个 1 是我的“n”值 - 4 是预期的输出”)我收到错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at OneB.main(OneB.java:26)

【问题讨论】:

  • 那为什么要创建比arg列表小2个元素的数组呢?
  • 如果我在命令行输入 1 0 0 0 1,args.length 将是 5,索引 4 将是我的 n 值,并且数组将在索引 3 处停止,因此(args.length-2) - 但是我不完全确定我的想法是正确的。
  • 你是对的,你没有以正确的方式思考它。
  • 想想吧!如果您的命令行有 5 项长,则其中 4 项需要进入您的数组。所以你的数组需要有 4 个元素长。 4 个元素的数组将被寻址 0..3.
  • (关于这一切,尝试使用一些记忆的“公式”x 应该是 y-1 或其他任何东西通常不是一个好主意,而是计算出数组尺寸和for来自“第一原则”的循环索引开始/结束值。)

标签: java arrays methods int


【解决方案1】:

检查 ArrayOutOfBounds 的 JavaDoc。 然后在您的代码中放置一个断点(您已经掌握了确定哪一行所需的信息)并慢慢地单步执行您的代码,观察变量的所有值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多