Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向节点内的数组添加整数_Java_Arrays_Integer_Add - Fatal编程技术网

Java 向节点内的数组添加整数

Java 向节点内的数组添加整数,java,arrays,integer,add,Java,Arrays,Integer,Add,所以我的问题的概念是:假设我们有节点。每个节点都有一个整数数组。现在,我们必须在数组的末尾添加一个整数。我们怎么做 以下是我迄今为止所做的工作: 已创建类节点: public class Node { private int[] data; Node next; public Node(int n, Node nxt) { data = new int[n]; next = nxt; } } 然后,动态数组列表类: public class DynamicArrayOfI

所以我的问题的概念是:假设我们有节点。每个节点都有一个整数数组。现在,我们必须在数组的末尾添加一个整数。我们怎么做

以下是我迄今为止所做的工作:

已创建类节点:

public class Node {
private int[] data;

Node next;

public Node(int n, Node nxt) {
    data = new int[n];
    next = nxt;
}

}
然后,动态数组列表类:

public class DynamicArrayOfInts {

private Node head = null; 
private int numOfElementsPerNode = 0;

public DynamicArrayOfInts(int elementsPerNode) {
    numOfElementsPerNode = elementsPerNode;
}

public void add(int e) {

}
}

您应该在
节点
类中添加一个属性,以了解当前节点数组的当前索引。我还想在
dynamicarrayofits
中添加一个属性,以保留当前节点的引用

然后在add方法中,检查当前节点的数组是否已满(这很容易完成,因为您知道索引的值和每个节点的元素数)

如果不是这样(或者如果第一个add调用的head为null),则创建一个新节点并将元素添加到其数组中,否则只需为当前节点填充数组的下一个插槽

这就是我将如何实现它

class DynamicArrayOfInts {
    private Node head, current; 
    private int numOfElementsPerNode;

    public DynamicArrayOfInts(int elementsPerNode) {
        if(elementsPerNode <= 0) 
            throw new IllegalArgumentException("elementsPerNode must be > 0");
        numOfElementsPerNode = elementsPerNode;
    }

    public void add(int e) {
        if(head == null){
            head = new Node(numOfElementsPerNode, null);
            head.data[head.index++] = e;
            current = head;
            return;
        }
        if(current.index == numOfElementsPerNode){
            Node n = new Node(numOfElementsPerNode, null);
            current.next = n;
            current = n;
        }
        current.data[current.index++] = e;
    }

    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        Node n = head;
        while(n != null){
            sb.append(Arrays.toString(n.data));
            n = n.next;
        }
        return sb.toString();
    }

    private static class Node {
        private int[] data;
        private int index;
        private Node next;

        public Node(int n, Node nxt) {
            data = new int[n];
            index = 0;
            next = nxt;
        }
    }
}
输出:

[5, 0]
[5, 7]
[5, 7][10, 0]
[5, 7][10, -1]

不幸的是,在这种情况下,您必须创建一个新数组(是的,我感觉到了您的痛苦),该数组将比
data
多出一个元素。您必须将
数据的内容
复制到新数组中,并将最后一个元素设置为
int
值。这不是很优雅,这就是为什么Mureinik建议您应该使用
节点的
ArrayList
ArrayList
)来代替。我甚至可以加强他的建议,使您的解决方案更加通用,并告诉您使用
抽象列表
,然后用
ArrayList
对其进行实例化,但与您当前的级别相比,这可能太高级了(无意冒犯,我们都在那里)。至于您的确切问题,我设想在您的Node类中使用如下方法来处理此问题

public void push(int newValue) {
    int[] newData = new int[data.length + 1];
    for (int i = 0; i < data.length; i++) {
        newData[i] = data[i];
    }
    newData[data.length] = newValue;
    data = newData;
}
公共无效推送(int newValue){
int[]newData=newint[data.length+1];
对于(int i=0;i
为什么不直接使用
ArrayList
?而不使用节点呢?分配说明我们必须使用节点。我建议用JDK的
ArrayList
替换
dynamicarrayofts
,而不是去掉
节点
类。
public void push(int newValue) {
    int[] newData = new int[data.length + 1];
    for (int i = 0; i < data.length; i++) {
        newData[i] = data[i];
    }
    newData[data.length] = newValue;
    data = newData;
}