gpt4 book ai didi

Java 数组大小初始化

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:35 25 4
gpt4 key购买 nike

我正在阅读 Herbert Schildt 的《Java:初学者指南(第 5 版)》一书,我一直注意到一种声明数组的特殊方法。

这是我自己的例子来体现这种做法:

public int[] generateArray(int size) {
int[] x = new int[size+1];
return x;
}
int[] y = generateArray(3);

现在,这位作者所做的是始终创建具有 +1 大小的数组。我不明白他为什么要这样做。是否避免了 ArrayOutOfBounds 异常?此外,如果他已经打算将其递增 1,为什么不直接发送 4 而不是 3?

这是他书中的一个例子,用来澄清这个问题的歧义:

// A dynamic queue.
class DynQueue implements ICharQ {
private char q[];
private int putLoc, getLoc;
public DynQueue(int size) {
q = new char[size+1]; //allocate memory
putLoc = getLoc = 0;
}
}

最佳答案

这种习惯可能类似于 C 等语言中的某些类型的数组,它们使用空字节作为终止“哨兵”来指示数组的结尾;一个例子是 "C-strings" , 采用 char[]char * 的形式。

话虽这么说,Java 不是 C,我也不清楚作者为什么选择这样做。这是一种误导,绝对会被视为不良做法。

您关于这样做以减轻 ArrayOutOfBounds 异常的评论也可能是正确的,但是创建一个与预期大小不同的数组并不是正确的方法。

编辑:

根据您给出的示例,我会说这种创建“误导性大小”数组的习惯的应用只不过是代码旨在解决的问题的函数。

例如,DynQueue 可能是以这种方式构造的,因为第一个或最后一个索引表示要与数组中的其余数据以某种方式区分的数据......也许q[0](队列的第一个元素)表示 the char,它是某些算法或处理中要考虑的“下一个” (可以说它位于“行的最前面”),但尚未从数组中清除。

(这仍然没有改变它的完成方式值得怀疑的事实。)

关于Java 数组大小初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com