Miért áll le az alábbi program C#-ban?
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! :-)
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.
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.
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();
}
}
}
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();
}
}
}
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!