Jak zrobić tablicę poza pętlą?

0

witam
Otóż mam problem, który ciągle nie daje mi spokoju. Mianowicie w kodzie poniżej chciałbym aby zmienna x była tablicą która znajduje się w pętli i aby można było z jej korzystać oraz ją wypisać poza pętlą np. Wpisuje poza pętlą

Console.WriteLine("Elementy tablicy to: " +x//); // i wtedy żeby wypisywało mi taką tablicę która znajduje się w pętli. 

Proszę was bardzo o pomoc

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Podaj liczbe kolumn: ");
            int a = int.Parse(Console.ReadLine());
            Console.WriteLine("Podaj liczbę wierszy: ");
            int b = int.Parse(Console.ReadLine());

            int[,] tab = new int[a,b];
            Random rnd = new Random();
            int s=0;
            int x=0;
            int k=0;
            int i=0;

            Console.WriteLine("Wartości tablicy: ");
            for ( i = 0; i < a; i++)
            {
                
                for ( k = 0; k < b; k++)
                {
                    tab[i, k] = rnd.Next(0, 9);
                    s = tab[i, k];
                    Console.Write(s + " ");
                }
                Console.WriteLine(" ");
                
            }
            
            
            Console.WriteLine(" Pierwszy element to: " + tab[0, 0]);
            Console.WriteLine("Ostatni element to: " +s);
            Console.WriteLine(s);

            Console.ReadLine();
            
        }
    }
} 
0

Może trochę bardziej to rozjaśnij bo nic nie rozumiem.

0

chodzi mi o to jak zrobić żeby np. jak wpisze poza pętlą for

Console.WriteLine("Elementy tablicy to: " +x)

to jak napisać żeby ta zmienna x była tą tablicą, która jest w pętli i przy wywołaniu tej komendy wypisze wszystkie elementy tablicy.

Przepraszam za chaotyczne pisanie

0

Napisz swoją klasę, która opakujesz tablicę i w której nadpiszesz metodę ToString().

0

a czy mógłbyś mi napisać jak to zrobić jako kod? dopiero zaczynam programowanie w c# i nie za bardzo rozumiem :(

2

Proponuje Ci jakiś kurs przeczytać. Jak na kogoś 4 lata zarejestrowanego na forum słabo jest:

using System;
namespace ConsoleApplication1
{
    class Program
    {
        static void WypiszTablice(int[,] tab)
        {
            for (int x = 0; x < tab.GetLength(0); x++)
            {
                Console.Write("|");
                if (tab.GetLength(1) > 0)
                {
                    Console.Write("{0}", tab[x, 0]);
                }
                for (int y = 1; y < tab.GetLength(1); y++)
                {
                    Console.Write(",{0,5}", tab[x, y]);
                }
                Console.WriteLine("|");
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Podaj liczbe kolumn: ");
            int a = int.Parse(Console.ReadLine());
            Console.WriteLine("Podaj liczbę wierszy: ");
            int b = int.Parse(Console.ReadLine());

            int[,] tab = new int[a, b];
            Random rnd = new Random();
            int s = 0;
            int x = 0;
            int k = 0;
            int i = 0;

            Console.WriteLine("Wartości tablicy: ");
            for (i = 0; i < a; i++)
            {

                for (k = 0; k < b; k++)
                {
                    tab[i, k] = rnd.Next(0, 9);
                    s = tab[i, k];
                    Console.Write(s + " ");
                }
                Console.WriteLine(" ");

            }


            Console.WriteLine(" Pierwszy element to: " + tab[0, 0]);
            Console.WriteLine("Ostatni element to: " + s);
            Console.WriteLine(s);
            WypiszTablice(tab);

            Console.ReadLine();

        }
    }
}
2

Post powinien być w dziale 'Newbie'.
A rozwiązanie można napisać bardziej elegancko niż to zrobił @krwq np: z wykorzystaniem Extension Methods:

public static class ArrayExtensions
    {
        /// <summary>
        ///     Generyczna metoda rozszerzająca tablice 2-wymiarowe (dla dowolnego typu danych) o możliwość konwersji do sformatowanego tekstu
        /// </summary>
        /// <typeparam name="T">Typ danych</typeparam>
        /// <param name="items">Elementy tablicy</param>
        /// <returns>Reprezentacja tablicy 2-wymiarowej w postaci sformatowanego tekstu</returns>
        public static string SerializeTwoDimensionalArrayToString<T>(this T[,] items)
        {
            var str = new StringBuilder();

            str.Append("[");

            for(var i = 0 ; i < items.GetLength(0); i++)
            {
                str.Append("[");

                for(var j = 0; j < items.GetLength(1); j++)
                {                    
                    str.Append(items[i, j] + ((j != items.GetLength(1) - 1) ? ", " : string.Empty)); // Jakby kogoś bolała ta konkatenacja to można śmiało wyciągnąć warunek poza Append()
                }

                str.Append("]" + ((i != items.GetLength(0) - 1) ? ", " : string.Empty)); // Analogicznie jak wyżej
            }

            str.Append("]");

            return str.ToString();
        }
    }

I wykorzystanie w w kodzie (+ przykład szybkiej serializacji tabeli 1-elementowej)

// Tablica jednowymiarowa
int[] array = { 1, 2, 3, 4, 5 };

// Wypisanie wszystkich elementów z przecinkiem jako separatorem
Console.WriteLine(string.Join(", ", array));

// Tablice 2-wymiarowe
int[,] array1 = { { 1, 1 }, { 1, 2 }, { 1, 3 } };
string[,] array2 = { { "a", "b" }, { "c", "d" }, { "e", "f" } };

// Wypisanie wszystkich elementów tablicy 2-wymiarowej w sformatowany sposób
Console.WriteLine(array1.SerializeTwoDimensionalArrayToString());
Console.WriteLine(array2.SerializeTwoDimensionalArrayToString());

a jeśli nie zależy nam na formatowaniu i chcemy wszystkie element jak leci:

// Tablica dwuwymiarowa
int[,] array1 = { { 1, 1 }, { 1, 2 }, { 1, 3 } };
string[,] array2 = { { "a", "b" }, { "c", "d" }, { "e", "f" } };

:)

//Za pomocą rzutowania na właściwy typ (spłaszczamy tablicę i wyświetlamy elementy jeden po drugim oddzielone przecinkiem) 
Console.WriteLine(string.Join(",", array1.Cast<int>()));
Console.WriteLine(string.Join(",", array2.Cast<string>()));

:D

// Za pomocą serializacji JavaScriptowej (to nam nieco sformatuje ale również dostaniemy "spłaszczone" dane)
Console.WriteLine(new JavaScriptSerializer().Serialize(array1));
Console.WriteLine(new JavaScriptSerializer().Serialize(array2)); 

Ja widać ograniczeniem co do zastosowanej metody jest wyłącznie fantazja...

0

bardzo dziękuje wszystkim za odpowiedzi

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