Quiz software - generování náhodné otázky – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Quiz software - generování náhodné otázky – .NET – Fórum – Programujte.comQuiz software - generování náhodné otázky – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
13. 4. 2015   #1
-
0
-

Dobrý den,
vytvářím quíz a zasekl jsem se. Chtěl bych vás poprosit o pomoc s úpravou kódu.
Abych popsal jak to má vypadat: 
Na formu mám 4 labely (pro otázku a 3 možnosti odpovědi), 3 radio buttony (pro výběr odpovědi) a dva buttony se kterými potřebuji pomoct. Teda, momentálně tam mám jen jeden, protože nemám vyřešený kód, ale chtěl bych abych s jedním buttonem zapnul kvíz a zrovna vygeneroval do labelu náhodou otázku (ten button se poté hned skryje) a druh, který bude pokračovat v roli generování náhodných otázek a obsahovat podmínku pro správnou odpověď zároveň s podmínkou, že po 10ti otázka zobrazí další form kde se zobrazí proměnná X, což je počet správných odpovědí z deseti otázek.
  Dal jsem dohromady nějaké zkušenosti, ale opravdu nevím zda-li jsme na správné cestě či úplně vedle.

Tady je ukázka zápisu textového souboru. Mám v něm 50 otázek z nichž chci náhodně generovat.

//Question|Answer1|Answer2|Answer3|right answer(a,b,c)

Question 1?|Answer1|Answer2|RightAnswer3|c
Question 2?|continue|vfvfvfvfv|gtgtgtgg|a
Question 3?|njmbnmb|right answer|right!|b
Question 4?|wasdw|cdcdc|right!|c
Question 5?|good!|fefefef|frfrfrfrf|a

A tady je kód:
http://oi60.tinypic.com/20pbtjo.jpg (Screen kódu a chyby v syntaxy.)
 

Public Class Form2

    Dim q1(10), a1(10), a2(10), a3(10), ca(10) As String 
    Dim value As Integer
    Dim x As Integer //proměnná pro výsledný počet správných odpovědí.

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim soubor As New IO.StreamReader("textfile1.txt")
        While Not soubor.EndOfStream
            Dim txtline() As String = soubor.ReadLine().Split("|")
            Dim question As String = txtline(0)
            Dim ans1 As String = txtline(1)
            Dim ans2 As String = txtline(2)
            Dim ans3 As String = txtline(3)
            Dim rightanswer As String = txtline(4)
        End While

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim selectedanswer As String = ""

        If RadioButton1.Checked = True Then selectedanswer = "a"
        If RadioButton2.Checked = True Then selectedanswer = "b"
        If RadioButton3.Checked = True Then selectedanswer = "c"

        If selectedanswer = ca(value) Then x = x + 1
        loadquestions()
    End Sub

    Public Sub loadquestions()


        Randomize()
 
        value = CInt(Int((10 * Rnd()) + 1))
        Label1.Text = q1(value).ToString
        Label2.Text = a1(value).ToString
        Label3.Text = a2(value).ToString
        Label4.Text = a3(value).ToString

    End Sub

End Class
Nahlásit jako SPAM
IP: 2a00:1028:8d1c:7d3a:446d:...–
Reklama
Reklama
ondrej39+1
Věrný člen
13. 4. 2015   #2
-
0
-

Dělá ti to špatně přesně to, co ti píše Exception. Používáš ToString metodu na proměnné, které na nic neukazují, jsou null, NullReferenceException. Sice si vytváříš Dim q1, a1 atd., ale zapomínáš do proměnných přiřazovat objekty přes new.

Ve VB nedělám, ale pokud je to podobné jako C# a vzhledem k popisu výjimky, budeš muset proměnné q1, a1 atd. inicializovat např. přes Dim a1 = new Dim(10).

Nahlásit jako SPAM
IP: 213.226.234.–
Inject all the dependencies!
ingiraxo+15
Grafoman
14. 4. 2015   #3
-
0
-

Je to sice tvá věc, ale doporučil bych C# nez VB.NET, má přehlednější/lepší syntax.

Takto nějak bych to třeba udělal já, protože ukládat všechno do proměnných je na nic

public class Program
{
    private static Random rand = new Random();
    private static List<Question> questions = new List<Question>();

    private static void LoadQuestions(string file)
    {
        using (var sr = new StreamReader(new FileStream(file, FileMode.Open)))
        {
            var regex = new Regex(@"(.+)\|(\d+)\|{(.+)}");
            string line;

            while ((line = sr.ReadLine()) != null)
            {
                foreach (Match m in regex.Matches(line))
                {
                    questions.Add(new Question()
                    {
                        Name = m.Groups[1].Value,
                        RightAnswer = int.Parse(m.Groups[2].Value),
                        Answers = new List<string>(m.Groups[3].Value.Split('|'))
                    });
                }
            }
        }
    }

    private static Question GetRandomQuestion()
    {
        return questions[rand.Next(questions.Count)];
    }

    private class Question
    {
        public List<string> Answers { get; set; }

        public string Name { get; set; }

        public int RightAnswer { get; set; }

        public string RightAnswerText
        {
            get { return Answers[RightAnswer - 1]; }
        }
    }

    public static void Main(string[] args)
    {
        // nacte vsechny otazky ze souboru
        LoadQuestions("otazky.txt");
        // ziska náhodnou otazku
        Question q = GetRandomQuestion();
    }
}

Otázky ze souboru jsem ti trochu upravil 

// otazka | pozice spravne odpovedi | { výčet odpovědí oddělené pipe }

Q1|1|{one|two|three}
Q2|3|{one|two|three}
Q3|2|{one|two|three}

Většinu akcí jsem neošetřoval, to si udělej případně sám

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
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, 86 hostů

Podobná vlákna

Náhodné generování — založil to_jsem_ja

C++ quiz — založil vitamin

Quiz s odpovědí dle bodů — založil Vojta

 

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