C# a tömbök esetében lenne egy kérdésem (kezdő vagyok)?
Íme egy tömb példa:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Random r = new Random();
int[] tomb = new int[5]; // 5 számot ír ki, 5 elemből áll
for (int a = 0; a < 5; ++a)
{
tomb[a] = r.Next(50); // random szám max 50-ig
}
for (int a = 0; a < 5; ++a)
{
Console.Write(tomb[a] + " ");
}
Console.ReadKey();
}
}
}
Nem értem, hogy a for(int-nél amiket megadunk azok micsodák? :O Miért van ott ez hogy for (int a = 0; a < 5; ++a) ? Nem értem a logikáját... New Randomnál világos nagyjából, hogy 5 szám lesz, de nem teljesen világos az egész, valaki szakzsargon nélkül érthetően elmagyarázná légyszíves !
for(kif1; kif2; kif3) {}
Ez a for alakja, ahol:
kif1 az valamilyen inicializálás, kezdő érték adás. Pl.: i=0;
kif2 az valamilyen feltétel. Amíg ez a feltétel igaz, addig fog futni a ciklus, addig ismétlődik. Pl.: a<5
kif3 mondja meg, hogy mi történjen minden ciklus végén. Pl.: ++a, vagyi növeljük meg az a értékét 1-gyel.
Tehát a te ciklusod az a értékét 0-től kezdi növelni mindig 1-gyel, amíg az a kisebb 5-nél.
DE ha én lefuttatom a programot kiad 5 számot 1-50-ig random módon. Nem világos! :S
Azt értem, hogy elvileg az for(int a=0; akkor elvileg 0 a kezdőértéke? de akkor miért ír ki 0-50ig random egy számot, ha a kifejezés 2ben a<5 ? akkor nem max 5 lehetne a szám? ++a esetén nem növelnie kéne? áhh nem értem az egészet...
A random számokat az r.Next(50) hozza létre 0 és 50 között.
A ciklusban az a csak arra való, hogy a tömböd 0., 1.... 4. elemére hivatkozzon. Először azért, hogy a véletlenszámot beleírja, aztán, hogy onnan kiolvassa.
"A random számokat az r.Next(50) hozza létre 0 és 50 között."
Ezt értem.
"A ciklusban az a csak arra való, hogy a tömböd 0., 1.... 4. elemére hivatkozzon. Először azért, hogy a véletlenszámot beleírja, aztán, hogy onnan kiolvassa."
melyik a 0. 1... 4. elem? full nem értem hogy mi az oka, hogy a programom 0-50ig generál 5 számot... áhhh nem értem... A swits, case, if, ezeket simán megértettem, de nem értem ezt... andom r = new Random();
int[] tomb = new int[5]; ezt értem itt, 5 számot generál.... jön a for(int.....) ahol semmit nem értek, hogy ez mi a franc, aztán:
tomb[a] = r.Next(50); itt megint értem, hogy itt adjuk meg hogy 50 számból válogat... de nem értem ezt a foros dolgot abszolult.
Random r = new Random();
Mivel a C# egy objektumorientalt nyelv ezert objektumokbol epul fel minden...
itt peldanyositod a Random osztalyt, letrehozol belole egy objektumot es azt hozzarendeled a Random osztalyra mutato r objektumvaltozohoz, mert ugye az ertekadas jobbrol balra tortenik.
Ez az r valtozo most tartalmazza a Random osztaly egyik peldanyat, amit arra tudsz hasznalni, hogy random szamokat generalj. Mert ugye minden osztalynak vannak tulajdonsagai(valtozoi) es tagfuggvenyei. A te esetedben a Random osztaly Next tagfuggvenyet kell hasznalni, ami visszaad az argumentumkent atadott szamig egy veletlen szamot.
int[] tomb = new int[5];
Itt hozod letre a tombot, a szogletes zarojelben beirt 5 azt jelzi, hogy hany egesz szamot tartalmaz a tombod.
Erre ugy is gondolhatsz, mintha azt irtad volna, hogy:
int a;
int b;
int c;
int d;
int e;
Es utana ezeket toltod fel veletlenszamokkal... de a tombok sokkal hatekonyabbak ebben az esetben, amikor azonos tipusu adatokat kell tarolni es egyszerre tobbet.
A for ciklus arra valo, hogy ne kelljen begepelned az ertekado utasitast 5-szor...
for ciklus nelkul a program igy nezne ki:
tomb[0] = r.Next(50);
tomb[1] = r.Next(50);
tomb[2] = r.Next(50);
tomb[3] = r.Next(50);
tomb[4] = r.Next(50);
A for ciklus ettol kimel meg teged, nem kell a fenti ertekadast leirni otszor csupan egyszer
for(int i = kezdoertek(0); i < vegertek(5); i++)
{
tomb[i] = r.Next(50);
}
ha ezen elgondolkozol ugyanazt csinalja, mint amit fentebb leirtam 5szor.
Csak itt minden korben kicserelodik az i erteke vagyis 0-tol tart 4-ig es a tomb adott elemet egyenlove teszi egy veletlen szammal amit a Next tagfuggveny ad vissza.
A kiiras is ugyanezen az elven mukodik. Ezert hasznaljuk a for ciklust.
Fontos, hogy a C#-ban is mint C,C++-ban a tombok indexeles 0-tol kezdodik, ezert megy a ciklus 0-tol 4-ig es nem pedig 1-tol 5-ig.
Remelem tudtam segiteni!
A r csak egy objektum és nem egy véletlen szám. Az r.Next() fogja a véletlen számot generálni.
Azért nem elég a tömb, mert a tömb az nem egy elem, hanem elemek sorozata. A tömb[i] a tömb nevű tömb i. elemét jeleni.
Milyen rendszerben tanulod a C#-ot?
Console Aplication-ba tanuljuk.. amúgy nem világos... kikommentelem, miről mit tudok:
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Random r = new Random(); //az r lesz itt az amibe beletölti a random számokat!?
int[] tomb = new int[5]; //5 szám lesz a max amit kifog írni, vagyis 5 eleme van a tömbnek, ami elvileg 0-értéket vesz fel elemenként... 0. elemnek 0 az értéke, 1. elemnek is 0 az értéke stb.... ezért kell feltölteni...
for (int a = 0; a < 5; ++a)
most elvileg ez a for-os izé amivel feltöltjük, és az a=0 elvileg az az hogy a 0. elem a tömbben (vagy nem?) De hogy miért pont a betűt kell megadni azt fogalmam sincs...., aztán a<5 megint fogalmam sincs mi a franc ez, olyasmit néztem youtubeon, hogy 5-ször írja ki az adott elemet, ebben az esetben a tömb 0. elemét kéne 5-ször kiírnia... aztán ,a++ ez megint mi a franc...? a=a+1 ennyit tanultunk, de hogy mi az hogy a=a+1 arról megint fogalmam sincs.
aaztán tomb[a]=r.Next(50) ez random 50 számot generáltat max, de hogy a tomb-be miért kell az hogy a, miért nem csak tomb[] és miért kell az r. után hogy Next erről megint fogalmam sincs, annyira jöttem rá, hogy az előbb a for "ciklusban" megadtunk adatokat, és gondolom a tömb magát a randomitást veszi itt fel, de abszolult nem világos, hogyha nekem kéne egy programot megírni logikusan hogy írjam meg...
Aztán console.wrtie(tomb[a]+" ") írja ki hogy??? mi az a + jel? full káosz van az agyamban....
{
tomb[a] = r.Next(50); // random szám max 50-ig
}
for (int a = 0; a < 5; ++a)
{
Console.Write(tomb[a] + " ");
}
Console.ReadKey();
}
}
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!