Varför försvinner värderna från en array när en ny array läggs till Java.

Permalänk

Varför försvinner värderna från en array när en ny array läggs till Java.

Hej av någon anledning så fungerar detta inte som det logiskt sätt borde då det är exakt samma process men det fungerar inte som det ska. Jag vill kunne kombinera tre stycken arrays och min lösning var denna som inte verkar fungera även om den i mitt huvud borde fungera. Tackar i förväg.
Resultatet jag får ut när jag kör koden är.

Array 1: 1 2 3
Array 2: 4 5 6
Array 3: 7 8 9
Combined array:
Combined array: 1 2 3 4 5 6
Combined array: 1 2 3 4 5 6
Combined array: 1 2 3 0 0 0 7 8 9 (Problemet är här det borde bli 1 2 3 4 5 6 7 8 9).

public class TripleArray { public static int[] combineArray(int[] arrayA, int[] arrayB) { int aLen = arrayA.length; int bLen = arrayB.length; int[] returnArray = new int[aLen+bLen]; System.arraycopy(arrayA, 0, returnArray, 0, bLen); System.arraycopy(arrayB, 0, returnArray, aLen, bLen); return returnArray; } public static void printArrayB(int[] arrAB) { System.out.print("Combined array: "); for(int i = 0; i < arrAB.length; i++) { System.out.print(arrAB[i]+" "); } System.out.println(" "); } public static void printArrayA(int[] a, int[] b, int[] c) { System.out.print("Array 1: "); for(int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } System.out.println(" "); System.out.print("Array 2: "); for(int i = 0; i < b.length; i++) { System.out.print(b[i]+" "); } System.out.println(" "); System.out.print("Array 3: "); for(int i = 0; i < c.length; i++) { System.out.print(c[i]+" "); } System.out.println(" "); } public static void main(String[] args) { // TODO Auto-generated method stub int currentSize = 0; int[] arr1 = {1,2,3}; int[] arr2 = {4,5,6}; int[] arr3 = {7,8,9}; printArrayA(arr1,arr2,arr3); int[] arrAB = new int[currentSize]; printArrayB(arrAB); arrAB = combineArray(arr1, arr2); printArrayB(arrAB); int[] arrABC = arrAB; printArrayB(arrABC); arrAB = combineArray(arrABC, arr3); printArrayB(arrAB); } }

Visa signatur

Så jag kommer ihåg. [code][/code]

Permalänk
Hedersmedlem

Första anropet till arraycopy bör ta aLen och inte bLen som sista argument, annars blir det problem om de är olika längd -- som de är vid sista anropet från main.

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Medlem

System.arraycopy(arrayA, 0, returnArray, 0, bLen);
=>
System.arraycopy(arrayA, 0, returnArray, 0, aLen);

längden på vad som ska kopieras är fel

#tooSlow

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk

Tackar till er båda, det löste problemet.

Visa signatur

Så jag kommer ihåg. [code][/code]