Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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 - Fatal编程技术网

在java中链接对象引用

在java中链接对象引用,java,arrays,Java,Arrays,所以我在java中做这个项目,其中一个对象a有一个数组,a。然后,获取数组的一部分并将其分配给另一个对象s,这样s中的值改变了a中的值。我对这件事很生气,我就是不明白。有一个概念,我错过了 public class IntArray implements IntSequence { int[] a; public IntArray(int size) { a = new int[size]; } public int length() { } public int get(int

所以我在java中做这个项目,其中一个对象a有一个数组,a。然后,获取数组的一部分并将其分配给另一个对象s,这样s中的值改变了a中的值。我对这件事很生气,我就是不明白。有一个概念,我错过了

public class IntArray implements IntSequence {

int[] a;

public IntArray(int size) {
    a = new int[size];
}

public int length() {
}

public int get(int index) {
    return a[index];
}

public void set(int index, int value) {
    a[index] = value;
}

public IntSequence subSequence(int index, int size) {
}

public static void main(String[] args) {
    IntSequence a = new IntArray(5);
    a.set(0, 11);
    a.set(1, 22);
    a.set(3, 33);
    // some more values

    IntSequence s = a.subSequence(2, 2);
    s.set(0, 100);
    s.set(1, 200);

    System.out.println(a.get(2)); // prints 100. 

    }
}


public interface IntSequence {
int length();

int get(int index);

void set(int index, int value);

IntSequence subSequence(int index, int size);
}

有人能给我一个正确的方向吗?谢谢。

有很多方法可以做到这一点

我认为最简单的方法是创建一个新类作为子序列

public class SubSequence implements IntSequence {
    private int[] a;
    private int start;
    private int size;

    public constructor(int[] arr, int start, int size) {
        this.a = arr;
        this.start = start;
        this.size = size;
    }

    public int get (int index){
        return a[start + index];
    }

    public IntSequence subSequence(int start, int size) { 
        return new SubSequence(a, start, size);
    }
    // And so on
}
另一种方法是返回一个匿名类。您必须将变量设置为final,才能从匿名类访问它们。这稍微好一点,因为您不需要构造函数,只需调用
subSequence
方法就可以从现有列表创建列表

public IntSequence subSequence(final int start, final int size) {

    return new IntSequence() {
        public int length() {
            return size;
        }
        public int get(index) {
            return a[start + index ]
        }
        ... and so on
    }
}

此代码没有错误检查,您应该添加它以确保不会超出数组边界,

子序列正文在哪里?我必须编写它,我对这一点太感兴趣了,无法理解这个
IntSequence
类是怎么来的?它是一个初始化每个方法的接口。你能不能在你的问题中加入IntSequence接口?我想说的是,没有简单的方法,例如,不创建支持类。这对我来说更有意义,但(不幸的是)只能使用原始方法和类来完成。@Brent我不确定你的意思,这些是原始方法。第二个例子甚至不需要一个具体的类。对不起,这对我来说是新的。它必须遵循框架。@Brent我的第二个示例是,只要您可以将变量更改为final,就可以直接插入到缺少的方法体中的代码。如果不能,可以创建本地最终引用。如果有一些要求,你应该将其张贴在问题中,而不是慢慢地透露(无论是谁试图帮助你,都会导致更多的工作)