2016-11-15 1 views
0

2 개의 배열을 취하고 함께 추가하는 메서드를 만들고 있습니다. (저는 초보자이며 이것은 학교 과제이며 일부 사람들은 학교 질문을보기를 싫어하지만 이미 많은 일을 해왔습니다. 지금 막 붙어 있습니다.)두 개의 배열을 내 메서드와 함께 추가하십시오.

내가 이전에했던이 다른 방법을 참조하여이 방법 메신저에서
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; 
    } 

:

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; 
    } 

이 사람은 다른 배열로 배열의 인덱스를 복사합니다. 시작 변수는 내가 처음 복사를 시작할 인덱스입니다.

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

그리고 문자열로 배열을 인쇄합니다.

문제점은 Concat 메소드에 있습니다. 첫 번째 복사본에 사용할 수 있습니다. array1을 array3에 복사합니다.

Class1.CopyTo(array1, array3, 0); 

그러나 제 2 어레이의 경우, 아무것도 추가하지 않고 I 문자열로 그것을 입력으로부터 얻을 모두이다

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

왜 첫 번째 복사본 만 작동하는지 이해할 수 없습니다.

추가 질문. 내 메인 프로그램 탭에서 더 이상 내 클래스 Class1 lab2 = new Class1(); 인스턴스로 이러한 메소드를 참조 할 수 없습니다. 하지만 lab2 대신 Class1을 사용하여 호출해야했습니다 (다른 방법으로도 작동했습니다). 동일한 클래스의 다른 메서드 내에서 메서드를 호출하려면 "정적"을 추가하고 "정적"을 추가하여 주 프로그램 탭에서 메서드를 호출하는 방법을 변경해야했습니다. 왜 내가 처음에 "정적"을 추가 한 다음 그 메서드를 호출하는 방법을 변경해야만하는지 이해하지 못했습니다. 정적으로 호출 된 2 가지 메소드를 변경해야하는 이유는 무엇입니까? 그리고 왜 내가 lab2 인스턴스로 변경된 메소드를 호출 할 수 없습니까?

대단히 죄송합니다.

+0

'<= i' 그 시작 경우에만 복사 때문에 아무것도하지 않는 CopyTo''로 두 번째 전화는 이유 절대로 사실이 아니다. 디버거에서 코드를 단계별로 실행하십시오. –

+0

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

답변

1

복사 한 두 번째 배열을 가지고하지 않는 이유는, 때문에 arr2-CopyTo 방법을 확인하고 만 복사 start이 두 번째 배열의 경우보다 큰 arr1 길이 일 때 일어날 수 i >= start, 경우 array2.

1 : 방법 Concat에서, (두 번째 CopyTo에 대한 paramenter 시작)를 int i = array1.Length + 1;+ 1를 제거

당신은 그것을 작동하게하기 위해 2 명 변경을해야합니다.

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 : 당신은 어떤 여분의 정수가없는 CopyTo에서을, 루프 내부의 if 문을 제거하고 단지 조정하고 arr2의 올바른 인덱스 등으로 복사 할 start를 사용하여 arr2에 추가 이 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

0,123,414 :
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; 
} 

지금 당신이 올바른 결과 배열을 가지고 편집 :

다음 질문에 대해서는 정적 메서드가 아닌 경우 클래스에 직접 메서드를 호출 할 수 없습니다. 일반 메서드를 호출하려면 클래스의 개체를 만들고 초기화해야합니다. Class1은 수업이고 lab2Class1 클래스의 개체입니다. 보통의 메소드를 오브젝트 lab2에 호출 할 수 있습니다 만, 메소드가 정적으로 정의되어 있지 않은 한, 클래스 Class1에 메소드를 호출 할 수 없습니다. 정적 방법에 대한 자세한 내용은 다음 링크를 확인 : 또한이 인덱싱 sourceIndex과 targetIndex되는 다른 것 하나를 사용할 수 있습니다

Java: when to use static methods

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

0

. 이것은 크게 가지

을 단순화

그림 :

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

관련 문제