Joo eli en löytänyt tähän vinkkiä täältä vaikka kokeilin ettiä.
Eli mulla on ohjelma joka arpoo tiedostojen määrästä riippuvan numeron.
Seuraavaksi mun pitäis saada että se tallentaa sen arvotun numeron jonnekin, esim. taulukkoon. Ja nyt en osaa sit ettiä tyhjää kohtaa taulusta saati sitten lukea sitä sieltä.
'Arvotaan tiedostoista joku tiedosto Dim arvonta As Integer Randomize() arvonta = Int(Rnd() * maara) + 1 'Tässä luetaan arvottu numero talteen ja tarkistetaan onko arvottu numero jo käytetty Dim taulu(maara) As String Dim i As Integer i = i + 1 taulu(i) = arvonta
Ei voi muistaa tarkemmin...
Pitääkö ohjelman siis arpoa joukko numeroita tietyltä väliltä? Pitääkö ohjelman arpoa vain muutama numero vai esim. valita kaikki numerot satunnaisessa järjestyksessä? Mitä ohjelma tekee numeroille loppujen lopuksi?
Siis ohjelma laskee ensin kaikki tiedostot tietystä kansiosta ja arpoo numeron jonku numeron tiedostojen määrästä ja lukee tiedoston sisällön textboxiin. Sen jälkeen ku käyttäjä painaa nappia uudestaan se arpoo uuden numeron, ja nyt haluan tähän väliin tarkistuksen onko jo numero aikasemmin arvottu. Ja jos on arvottu niin se arpoo uuden numeron ja sit ku kaikki numerot on käytetty loppuu ohjelma...
Oon tehny muut paitsi tuon että se tarkistaa onko jo numero arvottu ennen.
Tuohon maara muuttujaan on jo laskettu tiedostojen määrä ja arvonta onnistuu "1 - maaran" väliltä.
Toivottavasti selvensi.
Ja vielä sen ku aloittaa uuden "pelin" niin tietenki noi taulukot / arvonnat nollataan...
Joo, nyt kaikki alkaa olla selvää. Tässä esimerkki:
Dim arvottu() As Boolean Dim amaara As Integer Dim tmaara As Integer Private Sub Command1_Click() Dim uusi As Integer If amaara = tmaara Then MsgBox "Kaikki on jo arvottu!" End End If Do uusi = Int(Rnd * tmaara) + 1 Loop While arvottu(uusi) arvottu(uusi) = True amaara = amaara + 1 Print uusi End Sub Private Sub Form_Load() tmaara = 10 ReDim arvottu(tmaara) As Boolean Randomize Timer End Sub
Tämä ohjelma tulostaa luvut 1 - 10 ikkunaan arvotussa järjestyksessä, yhden luvun kerrallaan, kun käyttäjä painaa nappia. Taulukossa arvottu pidetään kirjaa arvotuista luvuista ja muuttuja amaara kertoo, montako lukua on jo arvottu. Ohjelman alussa pannaan muuttujaan tmaara suurin luku (pienin on aina 1) ja alustetaan taulukko vastaavasti. Sitten kun uusi luku pitää arpoa, uusia lukuja arvotaan niin kauan, kunnes löytyy sellainen, jota ei ole vielä merkitty taulukkoon.
Selitys kuulosti hyvältä, mut oon vähän heikoilla vielä ohjelmoinnissa niin en oikein saa tuota koodin pätkää liitettyä mun koodiin...
Eli mie haluaisin vain tietää miten tallennan mun arvotut numerot talteen ettei tulisi sama numero enää toista kertaa. Ja kun uusi peli tai ohjelma käynistetään uudestaan niin alkaisi arvonta tietenki alusta.
Ohjelma voisi jo valmiiksi arpoa kaikkiin tauluihin jonku numeron ja sitten sieltä ottaa joka taulu vaikka järjestyksessä ja lukea numero taulusta.
Arvottu numero tulee tiedosto nimen perään josta ohjelma tietää minkä tiedoston se aukaisee.
Saan kyllä taulun tehtyä, mutta se ei tallenna sinne numeroa kuin seuraavaan arvontaan asti. Eli arvon joka tauluun yhden numeron Do untilin sisällä niin se pyyhkii edellisen taulun numeron nollaksi kun looppi menee alkuun...
Jahas... Enää ei voinut muokata tuota edellista tekstiä... Eli sain tuon koodin tungettua tuonne mun koodin sekaan, mutta se ei toimi... Se ei arvo yhtäkään koodia vaan iskee heti tuon messageboxin ja lopettaa ohjelman siihen ilman mitään erroreita. Ja kun pikkasen muokkasin sitä lisää niin se alkaa arpoo niitä, mutta sit iskee erroria loopissa, enkä tajua siitä mitään...
Alla Antin koodi kommentein. Hieman solveltamalla tuo pitäisi olla selvää pässin lihaa, kun vaan tietää missä yhteydessä ja missä järjestyksessä mitäkin pitää tapahtua/tehdä.
Private arvottu() As Boolean Private amaara As Integer 'arvottuja lukuja Private tmaara As Integer 'tiedostomäärä Private Sub Command1_Click() Dim uusi As Integer 'Jos tmaaraa ei ole alustettu, niin koodin ajo loppuu heti seuraavaassa tarkistuksessa, 'siksi alustus on laitettu Form_Loadiin If amaara = tmaara Then MsgBox "Kaikki on jo arvottu!" End End If Do 'arvotaan lukuja uusi = Int(Rnd * tmaara) + 1 'arvotaan uusi luku 'Tässä loopissa pyöritään niin kauan, että kohdalle osuu luku, jota ei ole vielä arvotto. 'Tarkistus arvotttu()-taulukosta, eli onko edellä arvotun arvon kohdalla True vai False. 'Kun taulukko luotiin, niin se sai oletuksena jokaiseen soluunsa arvon False. Loop While arvottu(uusi) 'tarkistetaan onko solun arvo True vai False. Falsella ulos arvottu(uusi) = True 'uusi arvo, joten poistetaan se taulukon vapaista amaara = amaara + 1 'kirjataan ylös löytynyt uusi arvo Print uusi 'tulostetaan Formille arvottu arvo End Sub 'Ohjelma lukee käynnistyessään Form_Loadin, joten tarpeellisten muuttujien 'alustus on hyvä hoitaa siellä. Tässä tapauksessa tmaara ja arvottu()-taulukko. Private Sub Form_Load() tmaara = 10 'tässä määritetään montako tiedostoa kansiossa on ReDim arvottu(tmaara) As Boolean 'luodaan boolean tyyppinen taulukko arvoille. Solujen arvot oletuksena False. Randomize Timer 'alustetaan muuttujageneraattori Timerista saatavalla arvolla End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.