2017-10-20 2 views
3

Die Frage ist, ein Programm zu schreiben, das zwei Arrays von jeweils 10 ganzen Zahlen, a und b, benötigt. c ist ein Array mit 20 ganzen Zahlen. Das Programm sollte Array a und b in das Array c setzen, die ersten 10 ganzen Zahlen von c aus Array a, die letzteren 10 aus b. Dann sollte das Programm c anzeigen. Dies ist der Code, den ich bisher habe. Es druckt die Werte von ArrayA in ArrayC, aber ich weiß nicht, wie man die Werte von ArrayB in ArrayC druckt, ohne die bereits in ArrayC (ArrayB) vorhandenen Informationen zu überschreiben.Kopieren von zwei Arrays in ein Array

public class questionTwo 
{ 
    public static void main(String[] args) 
    { 
    int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
    int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 
    int [] arrayC = new int [20]; 

    for (int i = 0; i < arrayA.length; i++) 
     arrayC[i] = arrayA[i]; 

    for (int i = 0; i < arrayB.length; i++) 
    { 
     int element = 9; 
     arrayC[element] = arrayB[i]; 
     element++; 
    } 


    System.out.println("The values of ArrayC are: "); 

    for(int val : arrayC) 
    { 
     System.out.println(val); 
    } 

    } 
} 

Antwort

3

Sie waren wirklich nah dran! Ihre zweite Schleife initialisiert element bis 9 jedes Mal, wenn Sie es nur am Anfang 10 einmal zuweisen sollen:

int element = 10; 
for (int i = 0; i < arrayB.length; i++) 
{ 
    arrayC[element] = arrayB[i]; 
    element++; 
} 
+0

Es hat funktioniert! Vielen Dank!! – Malia

+4

"Es hat funktioniert!": Bist du sicher? Du hättest 31, 14, 5, 12, 50, 80, 100, 29, 58, 57, 9, 13, 156, 78, 36, 46, 86, 98, 63, 2' für dein Endergebnis bekommen, aber ich wette, du hast statt dessen "31, 14, 5, 12, 50, 80, 100, 29, 58, 9, 13, 156, 78, 36, 46, 86, 98, 63, 2, 0". 'Element' sollte um 10 (oder noch besser,' arrayA.length', nicht 9) gestartet haben. –

+0

Ja, ich habe diesen Fehler bemerkt, also habe ich ihn auf 10 gesetzt und es hat funktioniert – Malia

5

Bevor erklärt wird, wie Sie Ihren aktuellen Code könnten beheben, würde ich zum ersten Mal schlägt vor, Sie erstellen arrayC die Längen mit von arrayA und arrayB (hier hat das gleiche praktische Ergebnis, aber es hat den Vorteil, dass Sie mehr Elemente arrayA oder arrayB hinzufügen können, ohne den Code zu ändern). Als nächstes würde ich in echtem Code System.arraycopy verwenden, um die Kopien auszuführen. Und verwenden Sie Arrays.toString(int[]) zum Drucken. Wie,

int[] arrayA = { 31, 14, 5, 12, 50, 80, 100, 29, 58, 57 }; 
int[] arrayB = { 9, 13, 156, 78, 36, 46, 86, 98, 63, 2 }; 
int[] arrayC = new int[arrayA.length + arrayB.length]; 
System.arraycopy(arrayA, 0, arrayC, 0, arrayA.length); 
System.arraycopy(arrayB, 0, arrayC, arrayA.length, arrayB.length); 
System.out.println(Arrays.toString(arrayC)); 

Wie für Ihre Original-Code, verwenden arrayA.length und i, um den Offset korrekt zu erhalten. Wie,

int[] arrayC = new int[arrayA.length + arrayB.length]; 
for (int i = 0; i < arrayA.length; i++) { 
    arrayC[i] = arrayA[i]; 
} 
for (int i = 0; i < arrayB.length; i++) { 
    arrayC[i + arrayA.length] = arrayB[i]; 
} 
0

Die zweite Schleife ist falsch. Sie können den Folgecode

int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 
int [] arrayC = new int [20]; 

System.arraycopy(arrayA, 0, arrayC, 0, arrayA.length); 
System.arraycopy(arrayB, 0, arrayC, arrayA.length, arrayB.length); 

System.out.println("The values of ArrayC are: "); 

for(int val : arrayC) { 
    System.out.println(val); 
} 
0

Ihre zweite Schleife ist falsch, weil Sie jedes Mal element zu 9 innerhalb der Schleife setzen; Daher wird der Wert immer beim Beginn der nächsten Iteration zurückgesetzt. Sie können es außerhalb der Schleife bewegen, um das Ergebnis zu erzielen, das Sie suchen. Außerdem würde ich empfehlen, arrayC basierend auf den Längen von arrayA und arrayB zu konstruieren, auf diese Weise können Arrays beliebiger Länge kombiniert werden.

Darüber hinaus würde ich auch empfehlen, den Code zu verschieben, um die Arrays zu einer Methode zu kombinieren, um die Dinge sauber und für zukünftige Bemühungen wiederverwendbar zu halten.

public class questionTwo { 

    private static int[] combineArrays(int[] arrayA, int[] arrayB) { 
    int[] arrayC = new int[arrayA.length + arrayB.length]; 
    int idx = 0; 

    for (int x : arrayA) { 
     arrayC[idx] = x; 
     idx++; 
    } 

    for (int x : arrayB) { 
     arrayC[idx] = x; 
     idx++; 
    } 

    return arrayC; 
    } 

    public static void main(String[] args) { 
    int[] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
    int[] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 

    int[] arrayC = combineArrays(arrayA, arrayB); 

    System.out.println("The values of ArrayC are: "); 

    for(int val : arrayC) { 
     System.out.println(val); 
    } 
    } 

} 

Auch ist es oft eine schlechte Praxis, die primitiven Arrays von Java zu verwenden. Sehen Sie sich List und verwandte Objekte für flexiblere und umfassendere Optionen an.

0

Machen Sie Ihre Funktion dynamisch, während Sie mehr Elemente zu Ihren Arrays hinzufügen müssen. Ich habe noch nicht getestet, aber ich hoffe es funktioniert.

public class questionTwo 
{ 
    public static void main(String[] args) 
    { 
    int [] arrayA = {31, 14, 5, 12, 50, 80, 100, 29, 58, 57}; 
    int [] arrayB = {9, 13, 156, 78, 36, 46, 86, 98, 63, 2}; 
    int [] arrayC = new int [arrayA.length + arrayB.length]; 

    for (int i = 0; i < arrayA.length; i++) 
     arrayC[i] = arrayA[i]; 

    int element = arrayA.length; 
    for (int i = 0; i < arrayB.length; i++) 
    { 
     arrayC[element+i] = arrayB[i]; 
    } 

    System.out.println("The values of ArrayC are: "); 

    for(int val : arrayC) 
    { 
     System.out.println(val); 
    } 

    } 
} 
Verwandte Themen