IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
MadaraCZech
Člen
Avatar
MadaraCZech:1.2.2014 18:39

Při spuštění jednoho konkrétního Formu se aplikace sekne, kód :

Public Class test

    Private Sub test_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim pocet As Integer

        Using zjisteni As New StreamReader("slovicka-cizi.txt")
            While Not zjisteni.EndOfStream
                pocet = pocet + 1
            End While
        End Using

        Dim nahoda As Integer = Int(Rnd() * pocet) + 1
        Dim cislo1 As Integer
        Dim cizislovo As String

        Using nahoda1 As New StreamReader("slovicka-cizi.txt")
            While Not nahoda1.EndOfStream()

                If cislo1 = nahoda Then

                    cizislovo = nahoda1.ReadLine
                    slovo_label.Text = cizislovo


                End If

                cislo1 = cislo1 + 1
            End While
        End Using

    End Sub
End Class
Odpovědět
1.2.2014 18:39
...
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:1.2.2014 18:42

Si to odkrokuj kde se to zasekne ne?

 
Nahoru Odpovědět
1.2.2014 18:42
Avatar
MadaraCZech
Člen
Avatar
Odpovídá na Jan Vargovský
MadaraCZech:1.2.2014 18:43

Už při spuštění tohoto kódu se to sekne, hned po zapnutí.

Nahoru Odpovědět
1.2.2014 18:43
...
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:1.2.2014 18:46

Hoď si na začátek metody break point a krokuj. Je nějaká metoda/instrukce u které se to zasekne. Pak zjistíš ten problém kde :)

 
Nahoru Odpovědět
1.2.2014 18:46
Avatar
petrph
Člen
Avatar
petrph:1.2.2014 18:46

Jenom tak z voleje asi vidím chybu. V té smyčce

  • While Not zjisteni.EndOf­Stream

    pocet = pocet + 1

    End While

    End Using*

ti asi chybí zjisteni.ReadLine, bez toho stojíš pořád na začátku souboru a jen se ti načítají čísla do pocet..

 
Nahoru Odpovědět
1.2.2014 18:46
Avatar
Odpovídá na MadaraCZech
Michal Žůrek - misaz:1.2.2014 18:59

Zacyklí se ti to u prvního while. Ten kód je divný, proč to načítáš 2x?

 
Nahoru Odpovědět
1.2.2014 18:59
Avatar
MadaraCZech
Člen
Avatar
Odpovídá na petrph
MadaraCZech:1.2.2014 18:59

Tak to jsem opravil, ale pořád se mi to sekne

Nahoru Odpovědět
1.2.2014 18:59
...
Avatar
MadaraCZech
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
MadaraCZech:1.2.2014 19:02

Nejdřív zjistím, kolik tam mám slovíček a pak vygeneruji náhodné číslo. Když mám náhodné číslo, tak pak najdu řádek toho čísla a vypíšu ho.

Nahoru Odpovědět
1.2.2014 19:02
...
Avatar
Odpovídá na MadaraCZech
Michal Žůrek - misaz:1.2.2014 19:05

Ano, a kde se to sekne?

brekpoint si tam dáš kliknutím na šedý pruh před zdrojovým kódem.

 
Nahoru Odpovědět
1.2.2014 19:05
Avatar
MadaraCZech
Člen
Avatar
MadaraCZech:1.2.2014 19:19

Tak jinak, posílám celý projekt :D

Nahoru Odpovědět
1.2.2014 19:19
...
Avatar
Odpovídá na MadaraCZech
Michal Žůrek - misaz:1.2.2014 19:21

to se dělá tak, že si je načteš do slovníku, pak už manipuluješ jen se slovníkem. Slovníky jsou popsané myslím v tutorialu o OOP.

 
Nahoru Odpovědět
1.2.2014 19:21
Avatar
MadaraCZech
Člen
Avatar
MadaraCZech:1.2.2014 19:25

Soubor :

Nahoru Odpovědět
1.2.2014 19:25
...
Avatar
MadaraCZech
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
MadaraCZech:1.2.2014 19:30

ano, to by logicky šlo, díky

Nahoru Odpovědět
1.2.2014 19:30
...
Avatar
petrph
Člen
Avatar
Odpovídá na MadaraCZech
petrph:1.2.2014 19:36

Ale možná se ten program posunul k tomu dalšímu While Not nahoda1.EndOf­Stream()
Tam si tipnu že by se ten program neměl úplně seknout, ale v nějaký poměrně dlouhý době proběhnout (možná roky, tisíciletí?). A to proč.
Protože ty v tom kódu nehledáš řádek toho čísla jak tvrdíš,ale něco dost děsivýho.
Máš hodnotu v cislo1 (na počátku je 0). Pak vygeneruješ náhodný číslo do nahoda. Pak tam provádíš ten test cislo1 = nahoda. Pouze (a to pouze) pokud se ty čísla rovnají tak přečteš řádek v ReadLine a tím se posuneš v souboru o 1 řádek dál. Pak připočteš 1 do cislo1 a v cyklu zase testuješ, jestli se rovná tomu náhodnýmu,než se posuneš dál v souboru. Jestli je pocet trochu vyšší číslo, tak šance že se dostaneš na konec souboru a tím ti to skončí v nějakým rozumným čase je asi jako vyhrát v Sazce..
Takže, jestli bych ti poradil po tom

  • Using nahoda1 As New StreamReader("slo­vicka-cizi.txt")*

si dát prostě cyklus
*FOR i=1 TO nahoda
cizislovo = nahoda1.ReadLine
NEXT I *
jedu to jenom z hlavy, pokud máš správně ošetřený to náhodný číslo aby nepřekorčilo počet slovíček, tak ani nepotřebuješ test na EndOfStream

 
Nahoru Odpovědět
1.2.2014 19:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.