如果您被允许使用另一个 int 数组作为后备数组,那么这段代码对您来说应该足够了:
public class ArrayOfInt{
private final int[] array;
public ArrayOfInt(int size) {
array=new int[size];
}
public int length() {
return array.length;
}
public int get(int index) {
return array[index];
}
public void put(int index, int value) {
array[index]=value;
}
}
int[]
但是它会缺少一种内置数据类型的功能。那是int[]
可迭代的,因此for-each
循环可以应用于int[]
,但不能高于类。因此,要使其可迭代,您必须将上面的代码更改为:
import java.util.Iterator;
public class ArrayOfInt implements Iterable<Integer>{
private final int[] array;
public ArrayOfInt(int size) {
array=new int[size];
}
public int length() {
return array.length;
}
public int get(int index) {
return array[index];
}
public void put(int index, int value) {
array[index]=value;
}
@Override
public Iterator<Integer> iterator() {
return new Iterator() {
private int current_index;
@Override
public boolean hasNext() {
return current_index<array.length;
}
@Override
public Integer next() {
return array[current_index++];
}
@Override
public void remove() {
throw new UnsupportedOperationException("Cannot Resize Underlying Array");
}
};
}
}
正如您在上面看到的,我们使用Iterator<Integer>
的Iterator<int>
asint
不是引用类型,而是原始类型。这将在程序运行时强制进行一些自动装箱和拆箱。因此for-each
,类上的循环ArrayOfInt
不会像结束时那样有效int[]
。
但是,如果不允许您将其int[]
用作 int 的底层数组,那么您就必须ArrayOfInt
以完全不同的方式对类进行编码。首先,您必须决定您将使用哪种数据结构ArrayOfInt
。(我更喜欢平衡二叉搜索树,其节点在构建过程中仅按一次键排列,其中每个节点的键是它的索引。在这种情况下iterator()
该类的方法ArrayOfInt
将返回树的有序遍历。)然后您必须为该数据结构编写至少 2 个类: (1)ArrayOfInt
和 (2) NodeOfInt
。这些节点对象如何通过索引链接和搜索,取决于您选择的数据结构。祝一切顺利。
[这部分答案是在提问者添加更多信息后添加的]
更改这段代码:
public int ArrayOfInt(int size)
{
arr = new int[size];
return size;
}
对此:
public ArrayOfIntegers(int size)
{
arr = new int[size];
}
并更改这行代码:
ArrayofIntegers d = new ArrayofIntegers();
到这一行:
ArrayofIntegers d = new ArrayofIntegers(10); // Now your array size is fixed at 10
// For an array of size 15 , use statement: ArrayofIntegers d = new ArrayofIntegers(15);
你得到一个 NullPointerException 因为;在 Java 中,每个数组(无论是int[]
or float[][]
or String[]
or AnyClass[]
or SomeClass[][]
)都是class Object
. 因此,当您的类ArrayOfIntegers
创建了一个新对象时,一个名为arr
(在名为的对象内d
)的对象会自动初始化为null
. arr[index]=value;
因此,试图访问arr
(a )的语句null
引发了 NullPointerException。
[以下几行与您的 nullpointerexception 无关,但我仍在添加它们以获得有效的代码]
你的功能public void put(int index, int value)
应该是这样的:
public void put(int index, int value)
{
arr[index]=value;
System.out.print(arr[index]);
}
或这个:
public void put(int index, int value)
{
System.out.print(arr[index]=value);
}
但不是这个:
public void put(int index, int value)
{
arr[index]=value;
System.out.print(arr[index]=value);
}
它在代码中创建冗余(重复语句)。