我在问我Java中的数组初始化是否与C相同。在C中,您无法在程序运行时定义数组的大小。在Java中是否可能(或者恰如其分)?Java数组大小
public int[] createArray(int size) {
return new int[size];
}
在我来说,我有,因为我画折线面板上
g.drawPolyline(xPoints[], yPoints[], n);
感谢您的帮助
我在问我Java中的数组初始化是否与C相同。在C中,您无法在程序运行时定义数组的大小。在Java中是否可能(或者恰如其分)?Java数组大小
public int[] createArray(int size) {
return new int[size];
}
在我来说,我有,因为我画折线面板上
g.drawPolyline(xPoints[], yPoints[], n);
感谢您的帮助
您不能更改数组使用数组,而不是一个ArrayList大小,但可以使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将数组的值复制到另一个更大的数组中,不必担心它的速度,因为它是内置函数并使用JNI实现,所以它非常快速
是的,这是真的,谢谢 – user3721668
在Java中,这将是System._array_copy :) – fge
@ fge,是的,它是'arraycopy(对象src,int srcPos,对象dest,int destPos,int长度)' – starkshang
C没有Java那样的“数组”的基本概念;在C,你会
malloc(some_size * sizeof(one_element))
并影响到one_element *
(当然,这是一个严重的描述)。
在Java中,数组同样是动态分配的;如果你知道大小,在运行时,那么你就可以在特定的SomeType
数组和大小someSize
做:
final SomeType[] myArray = new SomeType[someSize];
在本质上,这是相当一致;包括事实是,在这两种情况下的数组是不可调整大小,但对如果指定了无效的指标发生了什么巨大的差别:
IndexOutOfBoundsException
;总而言之,除了使用“阵列”错误,发生的事情在C和发生的事情在Java中其实只有语法不同,以创建阵列的后果开始与...
感谢您的非常详细回答:) – user3721668
正如其他人所说,你不能这样做。而是你可以使用ArrayList(或任何其他列表),并在需要的地方,将其转换为简单的数组,像这样:
ArrayList<String> arrayList = new ArrayList<>();
String strings[] = (String[])arrayList.toArray();
在C,而该计划是你无法定义数组的大小运行。在Java中是否可能(或者恰如其分)?
是的,你可以在运行时定义一个数组的大小,只是不重新定义它。这将在堆上创建一个具有足够空间的对象来保存所需数量的基元(在基本数组的情况下)或对象引用(将它们视为指针)。
如果您想重新定义阵列的大小,您需要创建一个新阵列并复制旧阵列(System.arraycopy()
或Arrays.copyOf(...)
)。
在我来说,我有,因为我是一个面板
好上绘制折线使用数组,而不是一个ArrayList,你仍然可以使用列表并调用它toArray(...)
。这也是在运行时创建数组的一个示例。
由于您最终需要拨打Graphics.drawPolyline(...)
,您必须保留两个List<Integer>
或最好是List<Point>
,并在该列表内部构建x和y阵列。
也许你的第二个答案,与我自己来说的问题是,我有画折线不仅仅是通过INT元素组成点的名单,但几个百分点(x和y) – user3721668
@ user3721668是的,这就是我编辑它的原因。从设计的角度来看,我宁愿提供一个点列表,并在调用draw方法之前构造这两个数组。这样你就不会遇到两个数组长度不一致的错误,或者一个排序而另一个排序不正确的错误。 (另一种选择可能是使用'GeneralPath'并在那里收集坐标)。 – Thomas
确切地说,这就是我刚才所做的,它似乎工作正常 – user3721668
你怎么用'不能定义数组的大小是指当程序running'?你不能调整数组的大小,但是你可以创建一个大小为“x”的新数组,或者直接重新指定一个数组变量。 – SomeJavaGuy
我的意思是,如果有可能创建一个数组而不定义他的大小,但它会在用户输入后定义(例如) – user3721668
不,这是不可能的。您至少需要定义数组的第一维。 – SomeJavaGuy