• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kopiowanie tablic n-elementowych

Object Storage Arubacloud
+2 głosów
511 wizyt
pytanie zadane 4 listopada 2022 w C# przez JoannS Początkujący (250 p.)

Cześć,

Mam dwie tablice n-elementowe i mam przekopiować wartości z tab1 do tab2, ale z przesunięciem o jedną pozycję.

Utknęłam na Array.Copy. Dobrze rozumiem, że kopiuję z tab1, od indeksu 0 do tablicy tab2, gdzie w tab2 będzie to ineks1? Na końcu powinnam określić ile elementów chcę skopiować, ale to użytkownik będzie je deklarował. Próbowałam z "rozmiar" i tab1.Length, ale Visual wyrzuca błąd -> System.ArgumentException: „Destination array was not long enough. Check the destination index, length, and the array's lower bounds. ”

Jak zadeklarować Array.Copy nie znając ilości elementów, które chce skopiować?

using System;

namespace Zadanie_4._4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Podaj liczbę elementów tablicy: ");
            int rozmiar = int.Parse(Console.ReadLine());
            int[] tab1 = new int[rozmiar];
            int[] tab2 = new int[tab1.Length];

            for (int i = 0; i < tab1.Length; i++)
            {
                Console.WriteLine("Podaj wartość {0} elementu: ", i+1);
                tab1[i]= int.Parse(Console.ReadLine());
            }
            for (int i=0; i< tab1.Length; i++)
            {
                if (tab1[i] > 0)
                {
                    tab2[i] = tab1[i];
                }
                   
            }

            Console.Write("1. ");
            for (int i =0; i< tab2.Length; i++)
            {
                Console.Write(tab2[i] + " ");
            }

            Array.Copy(tab1, 0, tab2, 1, rozmiar);
            for (int i=0; i< tab1.Length; i++)
            {
                Console.WriteLine(tab2[i]);
            }
            Console.Write("2. ");
            foreach (int x in tab2)
                Console.WriteLine(x);

            Console.ReadKey();

Dziękuję :)

2 odpowiedzi

+1 głos
odpowiedź 4 listopada 2022 przez VBService Ekspert (254,570 p.)
wybrane 4 listopada 2022 przez JoannS
 
Najlepsza

Dobrze zaczęłaś, skoro masz

wartości z tab1 do tab2, ale z przesunięciem o jedną pozycję

to jako ostatni parametr dla Array.Copy podaj rozmiar - 1 i ostatni element z tab1 skopiuj na pierwszą pozycję w tab2

[ on-line ]

Array.Copy(tab1, 0, tab2, 1, rozmiar-1);
tab2[0] = tab1[tab1.Length-1];

 

+1 głos
odpowiedź 4 listopada 2022 przez Wiciorny Ekspert (272,330 p.)
edycja 4 listopada 2022 przez Wiciorny

Problem sprowadza się do "przesunięcia elementów"
https://www.educative.io/answers/how-to-left-shift-k-elements-of-an-array
Tylko bez zachowania elementów.
Generalnie kopiowanie może być mniej efektywne szczególnie kiedy masz wszystkie elementy przesunąć, sprawdza się to tylko do faktu iż, czy elementy niekopiowane maja pozostać na tej samej pozycji, czy elementy kopiowane do nowej tablicy mają być o indeksie mniejszym o jeden z przesunięciem ,w takim razie nie byłaby ta sama odległość.
Chyba, że jak kolega dodał co będzie trochę innym rozwiązaniem element ustawić na koniec, ale nie jest to wtedy kopia z przesunięciem- chyba żę tablica jest traktowana jako sekwencja

// Java : 
void shiftRight( int [] array ) {
    int last = array[array.length-1];
    for( int index =array.length-2; index >= 0 ; index-- )
      array[index+1] = array [index];
    array[0] = last;
    System.out.print("\n Result Array: " + Arrays.toString(array));
  }

 

Podobne pytania

0 głosów
1 odpowiedź 564 wizyt
pytanie zadane 3 listopada 2022 w C# przez JoannS Początkujący (250 p.)
0 głosów
1 odpowiedź 1,555 wizyt
+1 głos
1 odpowiedź 1,511 wizyt
pytanie zadane 18 czerwca 2016 w Java przez Waszek Gaduła (4,130 p.)

92,687 zapytań

141,598 odpowiedzi

320,087 komentarzy

62,047 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...