Array Frage
-
Hallo ich habe folgendes Problem:
Ich habe ein Array mit 200 Werten,
und ein zweites Array mit 30 Werten, die aber aus Array1 stammen.
Nun möchte ich dass bei einer Änderung in Array1 sich der Wert vom Element in Array2 auch ändert und umgekehrt.
Bei gleich großen Arrays wäre das Ganze kein Problem dann könnte ich sagen arr1= arr2, aber wie mach ich das mit unterschiedlich großen?
import java.io.*; public class Main { public static void main(String[] args) throws Exception { int[] x= new int[5]; for(int i=0; i< 5; i++) { x[i] = 3; } int[] y = new int[2]; y[0] = x[0]; y[1] = x[4]; y[0] += 1; y[1] += 10; for(int i=0; i<5; i++) { System.out.println(x[i]); } System.out.println(); for(int i= 0; i<2; i++) { System.out.println(y[i]); } } }
funktioniert nicht, ich schätze es liegt am new.
Wie kann ich mein Ziel erreichen?
-
shisha schrieb:
funktioniert nicht, ich schätze es liegt am new.
Es liegt nicht am new. Du kopierst ja die Werte von Array1 in Array2.
shisha schrieb:
"]ei gleich großen Arrays wäre das Ganze kein Problem dann könnte ich sagen arr1= arr2, aber wie mach ich das mit unterschiedlich großen?
Ich weiß nicht (ob du weißt), was denn passieren soll wenn der 31. Eintrag verändert wurde. Soll dann der 1. verändert werden (modulo) oder nichts geschehen?
An sich kannst du das kleine Array an beide verteilen und eine Wrappermethode schreiben wie
Wenn (index < 30), dann schreibe ins verteile Array sonst in ein privates Array
oder
Schreibe ins Array in der Position x mod ArrayLength
.
-
genau das "Wert kopieren" will ich vermeiden.
Ich möchte dass die selbe Referenz verwendet wird, da ich ein und das selbe Objekt nur unter anderem Namen ansprechen möchte.
Also y[1] == x[4] sollte in meinem Beispiel true ergeben.
In C würde ich ganz einfach einen Zeiger drauf legen, aber in Java?
-
^^versuch mal so:
class Int { public int n; public Int(int _n) {n=_n;} @Override public String toString() {return ""+n;} public void add(int _n){n+=_n;} } public class Main { public static void main(String[] args) { Int[] x = new Int[5]; for (int i = 0; i < 5; i++) { x[i] = new Int(3); } Int[] y = new Int[2]; y[0] = x[0]; y[1] = x[4]; y[0].add(1); y[1].add(10); for (int i = 0; i < 5; i++) { System.out.println(x[i]); } System.out.println(); for (int i = 0; i < 2; i++) { System.out.println(y[i]); } } }
...oder nimm 2D-arrays mit nur einem element in y-richtung
...oder vielleicht kann man 'Integer' das autoboxing abgewöhnen (weiss aber nicht, ob das geht).
-
da hab ich doch direkt das autoboxing und immutable zeugs vergessen, das problem
besteht in realität nicht, da ich ohnehin einen zusammengesetzten Datentyp verwenden muss.Aber danke, ich wusste doch da war etwas