2016-11-15 1 views
0

Ich mache eine Methode, die 2 Arrays und fügt sie zusammen. (Ich bin ein Neuling und dies ist eine Schulaufgabe, und ich habe gelernt, dass einige Leute hier keine Schulfragen sehen wollen. Aber ich habe schon eine Menge Arbeit gemacht, ich stecke jetzt einfach fest.)Hinzufügen von zwei Arrays mit meinen eigenen Methoden.

public static int[] Concat(int[] array1, int[] array2) //array1 = 1, 2, 3, 4, 5 array2 = 6, 7, 8, 9, 10. 
    { 
     int i = array1.Length + 1; 
     int[] array3 = new int[array1.Length + array2.Length]; 
     Class1.CopyTo(array1, array3, 0); 
     Class1.CopyTo(array2, array3, i); 
     Class1.PrettyPrint(array3); 
     return array3; 
    } 

In diesem im Verfahren 2 zu anderen Verfahren unter Bezugnahme I zuvor taten:

public static int[] CopyTo(int[] arr1, int[] arr2, int start) 
    { 

     for(int i = 0; i < arr1.GetLength(0); i++) 
     { 
      if (start <= i) 
      { 
       arr2[i] = arr1[i]; 
      } 
     } 
     return null; 
    } 

dieser ist Indizes eines Arrays in ein anderes Array zum Kopieren. Die Startvariable ist der Index, in dem ich zuerst mit dem Kopieren beginnen werde.

public static int[] PrettyPrint(int[] intArray) 
    { 
     string result = string.Join(", ", intArray); 
     Console.WriteLine(result); 
     return null; 
    } 

Und dies druckt ein Array in einer Zeichenfolge aus.

Das Problem liegt in der Concat-Methode. Es funktioniert für die erste Kopie. Wo ich Array1 in Array3 kopiere.

Class1.CopyTo(array1, array3, 0); 

Aber für die zweite Reihe, fügt er nichts und alles, was ich von der Eingabe es bekommen als String aus ist:

1, 2, 3, 4, 5, 0, 0, 0, 0 , 0.

Ich verstehe nicht, warum nur die erste Kopie funktioniert.

Auch eine Follow-up-Frage. In meinem Hauptprogramm Registerkarte konnte ich nicht mehr verweisen diese Methoden mit einer Instanz meiner Klasse Class1 lab2 = new Class1();. Aber ich musste sie anrufen, indem ich Klasse1 anstelle von lab2 benutzte (was für meine anderen Methoden funktionierte). Um eine Methode innerhalb einer anderen Methode in derselben Klasse aufrufen zu können, musste ich "statisch" hinzufügen und durch Hinzufügen von "statisch" musste ich ändern, wie ich die Methode in meiner Hauptprogramm-Registerkarte aufruft. Ich habe nicht wirklich verstanden, warum ich zuerst "statisch" hinzufügen und dann ändern musste, wie ich die Methode nenne. Warum musste ich die 2 Methoden, die zu statisch aufgerufen wurden, ändern? Und warum konnte ich diese veränderten Methoden nicht mit der Instanz lab2 aufrufen?

Sorry für die lange Frage!

+0

Der Grund Ihrer zweiten Anruf 'CopyTo' tut nichts, weil Sie nur, wenn kopieren' start <= I' und dass ist niemals wahr. Durchlaufen Sie Ihren Code im Debugger. –

+0

http://stackoverflow.com/questions/1547252/how-do-i-concatenate-two-arrays-in-c – Slai

Antwort

1

Der Grund, warum Sie das zweite Array kopiert nicht mit, so ist da CopyTo Methode überprüft und Kopien arr2 nur, wenn i >= start, die es nicht passieren kann, wenn start größer als arr1 Länge ist, was der Fall für Ihre zweite Array ist array2.

Sie müssen zwei Änderungen vornehmen, um damit es funktioniert:

1: in Concat Methode, entfernen Sie die + 1 zum int i = array1.Length + 1; (Paramenter für die zweite CopyTo starten).Sie haben keine zusätzlichen Zahlen:

public static int[] Concat(int[] array1, int[] array2) //array1 = 1, 2, 3, 4, 5 array2 = 6, 7, 8, 9, 10. 
{ 
    int i = array1.Length; // + 1; 
    int[] array3 = new int[array1.Length + array2.Length]; 
    Class1.CopyTo(array1, array3, 0); 
    Class1.CopyTo(array2, array3, i); 
    Class1.PrettyPrint(array3); 
    return array3; 
} 

2: in CopyTo, entfernen Sie die if Anweisung innerhalb der Schleife und fügen Sie einfach auf die arr2 die start mit auf den richtigen Index von arr2 einzustellen und zu kopieren wie dies:

public static int[] CopyTo(int[] arr1, int[] arr2, int start) 
{ 

    for (int i = 0; i < arr1.GetLength(0); i++) 
    { 
     arr2[start + i] = arr1[i]; 

     /*if (start <= i) 
     { 
      arr2[i] = arr1[i]; 
     }*/ 
    } 
    return null; 
} 

Jetzt haben Sie den richtigen Ergebnis-Array: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

EDIT:

Für Ihre Follow-up-Frage können Sie keine Methoden direkt zu Klassen aufrufen, es sei denn, diese Methoden sind statische Methoden. Sie müssen ein Objekt der Klasse erstellen und initialisieren, um normale Methoden aufzurufen. Class1 ist Ihre Klasse und lab2 ist Ihr Objekt der Class1 Klasse. Sie können normale Methoden für das Objekt lab2 aufrufen, aber Sie können Methoden nicht zu seiner Klasse Class1 aufrufen, außer diese Methoden sind statisch definiert. Weitere Informationen über die statischen Methoden prüfen diese Links:

Java: when to use static methods

Static Classes and Static Class Members (C# Programming Guide)

0

Sie auch zwei Indizes man die source ist und die andere die targetIndex verwenden können. Dies wird erheblich die Dinge vereinfachen

Illustration:

public static int[] CopyTo(int[] arr1, int[] arr2, int startSource, int startTarget) 
     { 
      int index = startTarget; 
      for (int i = startSource; i < arr1.GetLength(0); i++) 
      {  
       arr2[index++] = arr1[i]; 
      } 
      return null; 
     } 

public static int[] Concat(int[] array1, int[] array2) //array1 = 1, 2, 3, 4, 5 array2 = 6, 7, 8, 9, 10. 
     { 
      int i = array1.Length + 1; 
      int[] array3 = new int[array1.Length + array2.Length]; 
      Class1.CopyTo(array1, array3, 0,0); 
      Class1.CopyTo(array2, array3, 0, array1.Length); 
      Class1.PrettyPrint(array3); 
      return array3; 
     } 

     // Unchanged 
     public static int[] PrettyPrint(int[] intArray) 
     { 
      string result = string.Join(", ", intArray); 
      Console.WriteLine(result); 
      return null; 
     } 

enter image description here

Verwandte Themen