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

Kopiowanie tablic n-elementowych

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+2 głosów
641 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 (256,320 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 (278,610 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ź 853 wizyt
pytanie zadane 3 listopada 2022 w C# przez JoannS Początkujący (250 p.)
0 głosów
1 odpowiedź 1,746 wizyt
+1 głos
1 odpowiedź 1,563 wizyt
pytanie zadane 18 czerwca 2016 w Java przez Waszek Gaduła (4,130 p.)

93,173 zapytań

142,184 odpowiedzi

321,967 komentarzy

62,499 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1149p. - dia-Chann
  2. 1131p. - Łukasz Piwowar
  3. 1124p. - CC PL
  4. 1118p. - Łukasz Eckert
  5. 1097p. - Michal Drewniak
  6. 1081p. - Marcin Putra
  7. 1076p. - rucin93
  8. 1047p. - Piotr Aleksandrowicz
  9. 1000p. - ssynowiec
  10. 967p. - rafalszastok
  11. 947p. - Adrian Wieprzkowicz
  12. 842p. - Dawid128
  13. 826p. - Michał Telesz
  14. 819p. - Mariusz Fornal
  15. 814p. - Mikbac
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...