Ga naar inhoud

HELP: Java - Random


Aanbevolen berichten

een simpele oplossing is om telkens de array d.m.v. een (for-)loop te doorlopen en ieder element te vergelijken met de gegeneerde waarde alvorens deze op te slaan. *één* mogelijke oo-implementatie is de volgende [code:1:c91caf5a19] public class Lotto { public static void main(String[] args) { int n = 10; LottoNumbers numbers = new LottoNumbers(n); java.util.Random generator = new java.util.Random(); while (numbers.getCount() != n) numbers.add(1 + generator.nextInt(n * 2)); int[] array = numbers.toArray(); System.out.print("And the winning numbers after "); System.out.print(numbers.getTries()); System.out.println(" tries are:"); for (int i = 0; i < array.length; i++) System.out.println(array[i]); } } class LottoNumbers { protected int length; protected int[] array; protected int count; protected int tries; public LottoNumbers(int length) { this.length = length; array = new int[length]; count = 0; tries = 0; } public boolean add(int number) { tries++; if (count < length && !contains(number)) { array[count++] = number; return true; } return false; } public boolean contains(int number) { for (int i = count; --i >= 0; ) if (array[i] == number) return true; return false; } public int getCount() { return count; } public int getTries() { return tries; } public int[] toArray() { return array; } } [/code:1:c91caf5a19]
Link naar reactie
Het kan zijn dat ik mis ben hoor maar is oo niet dat je aparte klasses gaat schrijven in verschillende bestanden en die dan oproepen in een testklasse. dit is toch gewoon werken met methodes (of is dat hetzelfde want dan moet ik dringend mijn cursus nog eens bekijken tegen zaterdag 8 dagen)
Link naar reactie
[quote:b066002ead="Young Crazy Fool"]Het kan zijn dat ik mis ben hoor maar is oo niet dat je aparte klasses gaat schrijven in verschillende bestanden en die dan oproepen in een testklasse. dit is toch gewoon werken met methodes (of is dat hetzelfde want dan moet ik dringend mijn cursus nog eens bekijken tegen zaterdag 8 dagen)[/quote:b066002ead] uiteraard kun je een complete lotto-generator applicatie "uitsmeren" over meerdere klassen waarbij ieder afzonderlijk ontwerp wel een andere invulling zal kennen voor wat betreft de functionaliteit/verantwoordelijkheden van dezen. ik heb alleen een gespecialiseerde opslagklasse geschreven waarin het principe v/d for-loop duidelijk wordt gemaakt. bij een aanroep van methode add doorloopt methode contains de int array-member dmv een for-loop om te bepalen of de toe te voegen waarde al aanwezig is zo niet wordt deze (teruggekomen in add) toegevoegd. klasse Lotto is alléén maar om snel te kunnen testen, daarom heb ik LottoNumbers ook zonder toegangs-specifatie gedeclareerd: je kan het geheel in één file (Lotto.java) plakken compilen en runnen.
Link naar reactie
Hoi daar ben ik weer, ik ben al wat opgeschoten met mn lotto generator, maar er zitten nogal wat bugs in die ik niet kan oplossen. Kan iemand misschien de bugs fixen? Ik heb het voor morgen nodig! :cry: De code staat hieronder. Het is dus een lottogenerator dat 7 VERSCHILLENDE getallen moet trekken. Alvast bedankt!!! Spidey ===================== [b:7277868fbd]// Datum: 22 mei 2002 // Studentnummer: 61441 // Applicatie: Lotto Generator! import java.awt.*; import com.sun.j3d.utils.applet.MainFrame; import java.applet.*; import java.awt.event.*; public class Lottoher extends Applet implements ActionListener { double nummer; int getallen; int n; Image background; Button knop=new Button("Trek de getallen"); //declaratie van attributen TextField lottogetal=new TextField("Lottooo"); public void init() { background=getImage(getCodeBase(), "lottokylie.jpg"); setLayout(null); knop.setBounds(103,180,110,25); //de plaats van de knop knop.setBackground(Color.green); //de kleur van de knop add(knop); //plaatst de knop in het window knop.addActionListener(this); //zorgt ervoor dat er iets gebeurt als je op enter drukt lottogetal.setBounds(25,115,125,20); //de positie van dit tekstveld add(lottogetal); //voegt het tekstveld toe aan het window lottogetal.addActionListener(this); } public void actionPerformed(ActionEvent event) { class Randomgetallen { static int [] getallen; { Random rg = new Random(); getallen = new int [7]; //We vullen de array op met randomgetallen tussen 0 (inclusief) //en 42 (exclusief). for(int i = 0; i<7; i++) getallen[i] = rg.nextInt(42); //Als controleerVoorgaande true geeft moeten we een nieuw random //getal in de array steken tot het klopt (tot dit getal niet meer //gelijk is aan al de voorgaande). for (int i = 1; i<7; i++) while(controleerVoorgaande(i)) getallen[i] = rg.nextInt(42); System.out.print("De 7 randomgetallen zijn: "); for (int i = 0; i<7; i++) { //Nu hebben we getallen in het interval [0,42] //Incrementatie van ieder element heeft ons getallen // in het interval [1,43[ of dus [1,42] getallen[i]++; lottogetal.setText(""+getallen); } } public static boolean controleerVoorgaande (int n) { //deze methode zoekt de voorgaande posities af //van 0 tot n-1, en controleert of deze niet //gelijk zijn aan het getal op de nde positie. //Vindt het een gelijk getal => true //(dus een nieuw random getal wordt gezocht) //Zoniet => false (het getal is ongelijk aan de //vorige, het algoritme mag dus verder gaan. for(int i = 0; i<n; i++) if (getallen[i]==getallen[n]) return true; return false; } } public void paint(Graphics g) { g.drawImage(background, 0, 0, this); } public void update(Graphics g) { paint(g); } public static void main(String[] args) //de main voor een applicatie { System.out.println("Lotto Generator"); new MainFrame(new Lottoher(), 335, 240); } } [/b:7277868fbd]
Link naar reactie
[quote:9db2062fbb="Spider-Man"]Hoi daar ben ik weer, ik ben al wat opgeschoten met mn lotto generator, maar er zitten nogal wat bugs in die ik niet kan oplossen. Kan iemand misschien de bugs fixen? [/quote:9db2062fbb] dit zeg ik echt niet om onplezierig te doen maar die hele lap hierboven is één grote bug. ik voel d'r eerlijk gezegd weinig voor om daar aanpassingen in te maken. opnieuw schrijven is in dit geval vele malen sneller (en al gebeurd ;)) maar of jij daarbij gebaat bent...? ik begrijp dat een net oo-ontwerp bij deze opdracht nog niet van het grootste belang is. het gaat ze (school?) er waarschijnlijk om dat je de taal java leert beheersen. zet voor jezelf in (simpele) stappen uit wat d'r precies moet gebeuren en hoe dit a.d.h.v de java kennis die je al hebt gerealiseerd kan worden. success.
Link naar reactie
natuurlijk heb ik zelf alles geprobeerd, de codes komen van allerlei aantekeningen die ik in de les heb gemaakt! Daarom snap ik ook niet wat voor fouten erin zitten. Ik ben ook begonnen met het schrijven van simpele stappen, een paar van deze stappen zije terug in de code achter de //. Maar als je me niet verder wilt helpen dan niet. Juíst omdat ik Java niet volledig snap, kom ik naar zo'n forum. Spidey.
Link naar reactie
je hebt helemaal gelijk. ik kan je helaas niet (zoals een leraar dat kan) tot in de puntjes uitleggen/duidelijk maken hoe je dit het beste aan kan pakken. ik kan wel een eigen implementatie posten van je lotto-app indien je daar echt om verlegen zit. maar of ik je daarmee een plezier doe(?)
Link naar reactie
ik vraag helemaal niet om een compleet programma!! ik stuur mijn broncode toch op? en de reden waarom ik hier post, is dat ik hulp nodig heb bij het maken van een applicatie. En ik maak fouten, en ik wil weten wát ik fout doe.. En daar leer je van! En btw dit pogramma moet ik voor morgen af hebben, want dan moet ik het presenteren, dus aan de leraar kan ik het niet meer vragen. Als ik de presentatie eenmaal goed heb afgerond dan krijg ik geen Java meer! ik ben alweer opnieuw begonnen, maar ook deze code lukt niet :-? . als ik onderstaand stukje in actionperformed zet en compileer en dan de getallen trek, dan krijg ik rare tekens in mn textfield en geen cijfers van 1 t/m 42. Ik denk dat ik van de integer een string moet maken. Klopt dat? Zo ja, hoe? [b:03d44f2d8d]{ int[] a=new int[7]; //een array voor 7 getallen int i; for (i=0; i<7; i=i+1) { a[i]=(int)(Math.random()*42+1); } for (i=0; i<7; i=i+1) { lottogetal.setText(a+""); } for(i=0; i<7; i++) if (a[i]==a[7]) return true; return false; } [/b:03d44f2d8d] ======== met dit stukje code for(i=0; i<7; i++) if (a[i]==a[7]) return true; return false; wil ik de getallen in de array controleren op dubbele getallen, klopt dit stukje code? Spidey
Link naar reactie
in de tweede for-loop geef je de gehele array (a) mee aan methode setText. de rare tekentjes zijn het resultaat van de (automatische) aanroep van de toString() methode van die array (ook gewoon een instantie van Object in java) de standaard implementatie van toString in Object geeft de klassenaam & hashCode terug (= die rare tekentjes van jou) de for-loop moet uiteraard iets dergelijks worden: for (int i = 0; i < 7; i++) lottogetal.setText(lottogetal.getText() + a[i]);
Link naar reactie
import java.util.* Class Boeie { protected ArrayList availableNumbers = new ArrayList(); public static int MAXNUMBER = 42; public static int NUMBERS_WANTED = 10; protected Random generator; } public static main(String[] args){ initialize(); for(int i = 0; i < NUMBERS_WANTED; i++){ System.out.println("Next number is: "+withdrawNumber()+"\n"); } } public void initialize(){ generator = new Random(); for(int i = 0< ; i < MAXNUMBER; i++){ availableNumbers.add(new Integer(i+1)); } } public int withdrawNumber(){ int i = generator.getInt(availableNumbers.size()-1); int result = ((Integer) availableNumber.get(i)).intValue(); availableNumbers.remove(i); return result; } zoiets?? Kun je vast hele mooie oo van maken, maar waarom zou je.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...