Wartości dodatnie tablic

0

Cześć, chce skopiować wartości dodatnie z tab1 do tab2 i wypisać tab2. Debugger wskazuje na linie Array.Copy(tab1, tab1[i], tab2, tab2[i], 10).
Zadanie 4.2. tablice
int[] tab1 = new int[10] { 1, -2, 3, -4, 6, -87, -23, -7, 34, 32 };
int[] tab2 = new int[10];
for (int i = 0; i < tab1.Length; i++)
{
if (tab1[i] > 0)
{
Array.Copy(tab1, tab1[i], tab2, tab2[i], 10); //co tu jest źle psia krew!
}
}
foreach (int x in tab2)
{
Console.WriteLine(x);
}

0

Array.Copy() służy do kopiowania tablic, a ty chcesz skopiować tylko 1 wartość.

Jeśli to koniecznie musza być tablice, to możesz zrobić tak:

bool IsHigherThanZero(int value) {
  return value > 0;
}

int CountValuesHigherThanZero(int[] elements) {
  int result = 0;
  foreach(int elem in elements) {
    if(IsHigherThanZero(elem)) {
      result += 1;
    }
  }
  return result;
}

int[] GetValuesHigherThanZero(int[] elements) {
  int[] result = new int[CountValuesHigherThanZero(elements)];
  int it = 0;
  foreach(int elem in elements) {
    if(IsHigherThanZero(elem)) {
      result[it] = elem;
      it += 1;
    }
  }
  return result;
}

Jeśli chcesz wszystko w jednym przebiegu, to możesz posłużyć się funkcją Array.Resize(), na przykład tak:

int[] GetValuesHigherThanZero(int[] elements) {
  int[] result = new int[0];
  foreach(int elem in elements) {
    if(IsHigherThanZero(elem)) {
      Array.Resize(ref result, result.Length + 1);
      result[result.Length - 1] = elem;
    }
  }
  return result;
}

Ewentualnie trzeci sposób jak nie jesteś masochistą:

int[] GetValuesHigherThanZero(int[] elements) {
  return elements.Where(IsHigherThanZero).ToArray<int>();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1