我有一个文本文件被读取并填充到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
答案 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
代替(例如LinkedList
或ArrayList
)。然后,您可以使用theList.size()
查看它实际拥有的条目数。
答案 2 :(得分:0)
一旦声明一个数组,其大小保持不变,如String[] s= new String[7];
,它的大小为8,因为数组索引从0开始而不是1,如果再次重新声明,数组的大小会改变