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