Přidávání do pole pomocí smyčky - problém s indexem – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Přidávání do pole pomocí smyčky - problém s indexem – .NET – Fórum – Programujte.comPřidávání do pole pomocí smyčky - problém s indexem – .NET – Fórum – Programujte.com

 

dreamwaver
~ Anonymní uživatel
9 příspěvků
13. 9. 2011   #1
-
0
-

Mám problém s tímto kódem:

string[] jmena = {"Alex", "John", "Pepa"};
			int[] a = {4, 5};
			string[] data = {};
			int pocet;
			Console.WriteLine(a[0]);
			Console.WriteLine(a[1]);
			Console.WriteLine(jmena[1]);
			Console.WriteLine(jmena[0]);
			Console.WriteLine(jmena[2]);
			Console.WriteLine("Kolik chceš zadat polozek: ");
			pocet = Convert.ToInt32(Console.ReadLine());
			for (int i = 0; i < pocet; i++)
			{
				int b;
				b = i + 1;
				Console.WriteLine("Zadej " + b + ". jmeno: ");
				data[b] = Console.ReadLine();
				
			}

program se normálně spustí, zeptá se na počet položek, a pak na první.. a když ho zadám, dám enter, tak na mě vyskočí tato chyba:

System.IndexOutOfRangeException: Index je mimo hranice pole.
   v pole_zk.Program.Main(String[] args) v i:\C#\pole-zk\pole-zk\Program.cs:řádek 34

chyba je v řádku :  

data[b] = Console.ReadLine();

vím, že to dělám nejspíše hodně složitě, ale jsem začátečník, a snažím se přijít na vlastní řešení.

za pomoc děkuji. :)

Nahlásit jako SPAM
IP: 62.168.43.–
13. 9. 2011   #2
-
0
-

Ano, to je tím, že v poli není pro daný prvek místo. Pole má fixní velikost. Buď můžeš pole před přidáním nového prvku zvětšit (Array.Resize) a nebo použij kolekci, třeba List<string>. Na tebou zmíněném řádku najdeš ještě jeden problém, nezapomínej, že se pole / kolekce indexují od nuly.

Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
dreamwaver
~ Anonymní uživatel
9 příspěvků
13. 9. 2011   #3
-
0
-

Vím, že to bude možná otravné, ale pokud máš čas, napsal by jsi mi sem napsat opravenej kód?.. Na tom to asi nejlíp pochopím.

Nahlásit jako SPAM
IP: 62.168.43.–
KIIV
~ Moderátor
+43
God of flame
13. 9. 2011   #4
-
0
-

co vytvaris timdle:  string[] data = {};  ?? prazdne pole?

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
13. 9. 2011   #5
-
0
-

#4 KIIV
Přesně tak, tím vytváří prázdné pole.

Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
13. 9. 2011   #6
-
0
-

#3 dreamwaver
To mohu, ale co říkáš není pravda. Nejlíp to pochopíš, když sám dojdeš k nějakému řešení a uvědomíš si, kde byla chyba. 

List<string> data;
Console.WriteLine("Kolik chceš zadat položek:");

int pocet;

if (int.TryParse(Console.ReadLine(), out pocet)) // kontrola, jestli je zadanej počet skutečně číslem
{
    data = new List<string>(pocet); // instanci kolekce je lepší vytvářet ve chvíli kdy znáš počet prvků

    for (int i = 0; i < pocet; i++)
    {
        Console.WriteLine("Zadej {0}. jmeno:", i + 1); // formátování řetězce (viz. string.Format)
        data.Add(Console.ReadLine()); // přidání prvku do kolekce, pokud počet přidaných prvků překročí velikost kolekce, dojde automaticky k jejímu zvětšení
    }
}
else
{
    Console.WriteLine("Musíte zadat číslo.");
}

To byla varianta s použitím kolekce. Odstranil jsem podstatné části. Variantu s použitím pole přidám za chvíli.

Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
13. 9. 2011   #7
-
0
-

Ještě varianta s využitím pole. 

string[] data;
Console.WriteLine("Kolik chceš zadat položek:");

int pocet;

if (int.TryParse(Console.ReadLine(), out pocet)) // kontrola, jestli je zadanej počet skutečně číslem
{
    data = new string[pocet]; // stejně jako v předchozím případě vytvářím pole až když znám počet prvků, jinak bych musel před přidáním prvků vždy volat Array.Resize

    for (int i = 0; i < pocet; i++)
    {
        Console.WriteLine("Zadej {0}. jmeno:", i + 1); // formátování řetězce (viz. string.Format)
        data[i] = Console.ReadLine(); 
					
        /* Pokud počet přidaných prvků překročí velikost kolekce, dojde k výjimce. 
         * Je-li důvod předpokládat, že k takové situaci může dojít, dá se to jednoduše ošetřit.
         * Mohlo by to vypadat třeba takhle. */
    
        //if (i == data.Length)
        //{
        //    Array.Resize(ref data, data.Length + 1);
        //}
    }
}
else
{
    Console.WriteLine("Musíte zadat číslo.");
}
Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
dreamwaver
~ Anonymní uživatel
9 příspěvků
13. 9. 2011   #8
-
+1
-
Zajímavé

Díky za tvůj čas, a za pomoc s řešením. :)

Nahlásit jako SPAM
IP: 62.168.43.–
13. 9. 2011   #9
-
0
-

Není zač. Pokud je to vše, můžeš označit řešení a případně ohodnotit příspěvky :)

Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Podobná vlákna

Problém s indexem pole — založil Sprinter

Číslování pomocí smyčky — založil Tondavejtaha

Přidávání čísel do pole — založil roman.jaros

Pole pomoci new — založil pepk

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý