Kezdőoldal » Számítástechnika » Programozás » Miért áll le az alábbi program...

Miért áll le az alábbi program C#-ban?

Figyelt kérdés

Szeretnék egy olyan Console-os programot írni, mely kikérdezi tőlem az angol szavakat (lehet akármilyen nyelvet beleírni), amit úgy tesz, hogy az elején föl lehet tölteni egy .txt-et szópárokkal - de nem feltétlen muszáj, mert ki lehet kerülni - majd kikérdezi.

A második részével van gondom, amikor kikérdezi. Minden tökéletes, csak az a gond, hogy néhányszor kérdezi szavakat - ez a szám mindig más -, majd egyszer csak lefagy és semmilyen gombra nem reagál csak az X-re, de arra rögtön. Megoldottam azt is, hogy a szavak ne ismétlődjenek, azért használtam ArrayList-et.

Itt a forráskód második fele, a hibás, bár szerintem a fájlból beolvasás jó:


StreamReader olvasóm = new StreamReader("szám.txt");

int m = Convert.ToInt32(olvasóm.ReadLine());

olvasóm.Close();


StreamReader olvasó = new StreamReader("szótár.txt");

string[] magy = new string[m];

string[] ang = new string[m];


int cv2 = 0;

while (!olvasó.EndOfStream)

{

string sor = olvasó.ReadLine();

string[] darab = sor.Split(' ');


magy[cv2] = darab[0];

ang[cv2] = darab[1];


cv2++;

}

olvasó.Close();


Random r = new Random();


ArrayList volt = new ArrayList();

cv2 = 0;

int vél = 0, sz = volt.Count;

string mego = "";

bool van = false;

do

{

do

{

vél = r.Next(-1, m);

for (int cv = 0; cv < sz; cv++)

{

if (volt.Contains(vél)) van = true;

}

} while (van == true);


Console.Write((cv2 + 1) + ". " + magy[vél] + " - ");

mego = Console.ReadLine();


if (mego != ang[vél]) Console.WriteLine("\tRossz! A helyes: " + ang[vél]);

volt.Add(vél);

sz++;

cv2++;

} while (mego != "" || cv2 > m);

Console.ReadKey();


Előre is köszi! :-)



2013. máj. 12. 17:40
 1/5 anonim ***** válasza:

A boolean változódat(van) lecsapja ha nincs az arraylistben olyan elem, tehát előbb-utóbb a véletlenszám-generátor kidobja -1-et) A Randomról azt kell tudni, hogy az első értéket(az alsó határt) előállíthatja, míg a másodikat(felsőt) nem. Tehát amit csinálhat ha m = 3:


-1,0,1,2 <-- 1/4 esélyed van rá, hogy -1-et dob.

2013. máj. 12. 20:09
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

A random szám generálásánál a minimumot 0-ra állítottam, de ugyan ez a probléma áll fönt.

Azt meg nem értem, hogy egy bool hogyan kapcsolódhat a randomhoz meg az ArrayList-hez, mikor mind a kettő csak számot tartalmaz. A "van" bool-lal csak azt vizsgálom, hogy van-e benne olyan szám, amit már generált, amihez kell az ArrayList, hogy abba tároljam, így kiküszöböltem az ismétlődést.

2013. máj. 12. 20:52
 3/5 SimkoL ***** válasza:

Bár én Delphiben programozgatok évek óta .....


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Collections;


namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

//Ez itt nem kell

StreamReader olvasóm = new StreamReader("szám.txt");

int m = Convert.ToInt32(olvasóm.ReadLine());

olvasóm.Close(); //Eddig, mert a beolvasott sorok számából állapítjuk meg !


StreamReader olvasó = new StreamReader("szótár.txt");

string[] magy = new string[m];

string[] ang = new string[m];

int cv2 = 0;

while (!olvasó.EndOfStream)

{

string sor = olvasó.ReadLine();

string[] darab = sor.Split(' ');

magy[cv2] = darab[0];

ang[cv2] = darab[1];

cv2++;

}

olvasó.Close();

Random r = new Random();

ArrayList volt = new ArrayList();

int i = 1;

int vél = 0;

string mego = "";

do

{

vél = r.Next(0, cv2);

while (volt.Contains(vél))

{

vél = r.Next(0, cv2);

}

Console.Write(i + ". " + magy[vél] + " - ");

mego = Console.ReadLine();

if (mego == "") i = cv2+1;

if ((mego != ang[vél]) && (mego != "")) Console.WriteLine("\tRossz! A helyes: " + ang[vél]);

volt.Add(vél);

i++;

} while (i < cv2+1);

Console.WriteLine(" Itt a vége ! ");

Console.WriteLine(" Nyomj Entert ! ");

Console.ReadKey();


}

}

}

2013. máj. 13. 03:35
Hasznos számodra ez a válasz?
 4/5 SimkoL ***** válasza:

Itt van javítva


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Collections;


namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

StreamReader olvasó = new StreamReader("szótár.txt");

List<string> magy = new List<string>();

List<string> ang = new List<string>();

int cv2 = 0;

while (!olvasó.EndOfStream)

{

string sor = olvasó.ReadLine();

string[] darab = sor.Split(' ');

magy.Add(darab[0]);

ang.Add(darab[1]);

cv2++;

}

olvasó.Close();

Random r = new Random();

ArrayList volt = new ArrayList();

int i = 1;

int vél = 0;

string mego = "";

do

{

vél = r.Next(0, cv2);

while (volt.Contains(vél))

{

vél = r.Next(0, cv2);

}

Console.Write(i + ". " + magy[vél] + " - ");

mego = Console.ReadLine();

if (mego == "") i = cv2+1;

if ((mego != ang[vél]) && (mego != "")) Console.WriteLine("\tRossz! A helyes: " + ang[vél]);

volt.Add(vél);

i++;

} while (i < cv2+1);

Console.WriteLine(" Itt a vége ! ");

Console.WriteLine(" Nyomj Entert ! ");

Console.ReadKey();


}

}

}

2013. máj. 13. 04:17
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Köszi, ezer köszönet!! :-) Így sikerül. :D
2013. máj. 13. 18:52

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!