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

C# Metody Tablice Wypełnienie Tablicy losowymi wartościami

VPS Starter Arubacloud
0 głosów
3,821 wizyt
pytanie zadane 26 stycznia 2019 w C# przez boniek Nowicjusz (190 p.)

Witam chciałem stworzyć w C# program  w którym za pomocą wielu osobnych metod mógłbym zainicjować tablicę, wypełnić ją losowymi liczbami, sprawdzić która wartość tablicy jest największa itd. Do każdej czynności osobna metoda.

No i już na samym początku mam problem, ponieważ moja metoda służąca do losowania cały czas zwraca mi tylko jedną losową wartość. Program działa ale tablica jest wypełniona tymi samymi wartościami. Czy ktoś wie jak to rozwiązać ?

using System;

class Program
{
 static int[] Liczby(int rozmiar)
 {
 int[] tab = new int[rozmiar];

 for (int i = 0; i < rozmiar; i++)
 {
tab[i]=Losuj();
 }
 return (tab); // zwraca tablicę
 }
 static int Losuj()
 {
 Random r = new Random();
return  r.Next(0,11);
 }
 static void Main(string[] args)
 {
 int[] tab1 = Liczby(5); // wywołanie metody
 for (int i = 0; i < tab1.Length; i++)
 {
 Console.Write(tab1[i] + " ");
 }
 Console.ReadKey();
 }
}

 

2 odpowiedzi

+1 głos
odpowiedź 26 stycznia 2019 przez marcin99b Szeryf (81,480 p.)
wybrane 7 kwietnia 2019 przez boniek
 
Najlepsza

Po pierwsze, nie 

return (tab); 

tylko 

return tab;

 

A po drugie, dlaczego wszystko na statycznych?
Nie lepiej zrobić tak?
 

private readonly Random random;

i w konstruktorze
{
   this.random = new Random();
}

i wtedy też odpada sens metody losuj(), bo wystarczy random.Next()

do tego do wyświetlania, używaj pętli foreach(), a nie for()

Pewnie ostatecznie nie rozwiąże to problemu, ale kod będzie czytelniejszy 
Na razie nie mam za bardzo czasu, później mogę potestować jeśli dalej będzie problem

komentarz 26 stycznia 2019 przez boniek Nowicjusz (190 p.)
Dziękuję za odpowiedź. Jestem uczniem pierwszego roku Informatyki, szykuję się do kolosa z metod, uczyliśmy się tylko robić wszystkiego na statycznych. Dlatego szukam rozwiązania jak zrobić takie coś na statycznych gdyż spodziewam się czegoś podobnego na kolokwium.
komentarz 26 stycznia 2019 przez marcin99b Szeryf (81,480 p.)
jak chcesz to możesz pisać o jakieś porady na discorda Marcin#3941
(tyczy sie to też innych piszących w c#, niekoniecznie początkujący)

jak będę miał czas to moge kilka rzeczy wytłumaczyć
+1 głos
odpowiedź 29 stycznia 2019 przez MikDal Mądrala (5,660 p.)

Cała tablica jest wypełniona jedną wartością ponieważ jak pisze dokumentacja:

The Random() constructor uses the system clock to provide a seed value. This is the most common way of instantiating the random number generator.

Co w wolnym tłumaczeniu rozumiem jako:

Domyślny konstruktor Random() używa zegara systemowego do zainicjowania losowych wartości. Jest to najpopularniejszy sposób tworzenia generatora liczb losowych.

Skoro w pętli tworzysz nowy generator liczb losowych, który (ze względu na szybkość działania kodu) jest ciągle inicjowany tą samą wartością (jak napisano wyżej – zegarem systemowym) to pierwsza wartość z tego generatora jest ciągle taka sama.

Dlatego bardziej skłaniałbym się do rozwiązania w stylu:
 

static void Losuj(int[] tablica)
{
    Random rnd = new Random();

    for (int i = 0; i < tablica.Length; i++)
    {
        tablica[i] = rnd.Next(0, 11);
    }
}

Po czym w funkcji Liczby wystarczy drobna modyfikacja:

static int[] Liczby(int rozmiar)
{
    int[] tab = new int[rozmiar];
    Losuj(tab);
    return tab; // zwraca tablicę
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,188 wizyt
pytanie zadane 3 marca 2017 w Java przez moofi Początkujący (470 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 12 lipca 2022 w C i C++ przez cpp_lover Początkujący (290 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...