为什么我的数组仍然填充了7个元素而不是6个元素?

时间:2017-09-10 16:45:53

标签: java arrays

我有一个文本文件被读取并填充到3个阵列中,每个阵列大小为7。我正在测试看我的程序是否会识别出只有6个元素,如果我从文本文件中删除一个数字,但是当我打印出每个数组的数组长度时,它们仍然是长度为7而我不是确定为什么。

    public static void main(String[] args) throws NoSuchElementException {



    String file = "input.txt";
    String text = "";
    double [] breakfast = new double [7];
    double [] lunch = new double [7];
    double [] dinner = new double [7];
    try {
        Scanner s = new Scanner(new File(file));
        for (int i = 0;i<7;i++)
        {
            breakfast[i] = s.nextInt();
            lunch[i] = s.nextInt();
            dinner[i] = s.nextInt();


        }
    }
    catch(NoSuchElementException n) {           
    }
    catch(FileNotFoundException e) {
        System.out.println("file not found");
    }

    if (breakfast.length != 7 || lunch.length != 7 || dinner.length != 7) {
            System.out.println("Your file will not work with this program. Please select another.");
                    System.exit(0);
    }

    System.out.println(breakfast.length);
    System.out.println(lunch.length);
    System.out.println(dinner.length);

文本文件中没有数字:

    800 1000 800
    450 845 1200
    1800 250 400
    0 1500 1800
    600 500 1000
    700 1400 1700
    675 400 900

文本文件中缺少一个数字:

    800 1000 800
    450 845 1200
    1800 250 400
    0 1500 1800
    600 500 1000
    700 1400 1700
        400 900

3 个答案:

答案 0 :(得分:2)

无论您是修改集合的元素,您的集合仍将是您初始化它的大小。

如果初始化大小为7的新数组,它将保持双精度的默认值:[0,0,0,0,0,0,0]。这个大小是最终的,你只能改变每个元素的值,而不是它的存在。 除非使用新大小重新声明整个数组,否则无法删除元素,并复制元素。

答案 1 :(得分:2)

因为你说你想要七个点(new double [7])而你已经填写了0并继续i < 7。那就是0 1 2 3 4 5 6 - 七个循环。

另请注意,稍后您的检查if (breakfast.length != 7)等将永远不会成立,因为数组的length在您创建时是固定的(并且您已使用长度为7)。未使用的条目具有类型的默认值(0的情况下为int)。

您可能需要List代替(例如LinkedListArrayList)。然后,您可以使用theList.size()查看它实际拥有的条目数。

答案 2 :(得分:0)

一旦声明一个数组,其大小保持不变,如String[] s= new String[7];,它的大小为8,因为数组索引从0开始而不是1,如果再次重新声明,数组的大小会改变