System.out.println()输出其他东西

时间:2016-03-10 17:45:29

标签: java arrays

以下是我写的一些代码,我在理解时遇到了一些问题:

public static void main(String[] args){      
    try {
        int l = 14;
        int hold[] = new int[1000];

        int list [] = new int[l];
        for(int i=0;i<=l;i++){
            list[i] = hold[i];
        }

        for(int i=0;i<8;i++){
            System.out.println(list[i]);
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

我预计输出为8行0,但是14(1行输出) 根据观察,输出取决于代码中的变量l(为什么)? 我想问一下为什么会出现这种问题?

2 个答案:

答案 0 :(得分:1)

你超越数组列表的界限,这会产生异常。

正好在这里:

/

应该是l-1。

这是一个常见的初学者陷阱,所以不要担心并且永远记住每个数组或列表都是从我们拥有的大多数语言中的0开始。

答案 1 :(得分:0)

发生这种情况的原因是因为在代码的第7行中,您创建了一个for循环,它不会超出列表的范围。

每当你循环遍历一个数组时,记住你的起始索引是0,而不是1.这意味着你的大小为14的数组的元素编号从0到13(包括0和13)。

你的for循环一直到索引 14,数组大小中不存在.14。为了解决这个问题,你需要停在最后循环索引。这意味着数组的大小减去1(这将始终为您提供数组的最后一个索引)。

要解决此问题,您的代码应如下所示:

public static void main (String [] args) {
        try {
            int l = 14;
            int hold[] = new int[1000];

            int list [] = new int[l];
            for(int i=0;i<=l-1 ;i++){
                list[i] = hold[i];
            }

            for(int i=0;i<list.length;i++){
                System.out.println(list[i]);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }