【发布时间】: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来自“第一原则”的循环索引开始/结束值。)