Vraag & Antwoord

Programmeren

HELP: Java - Random

17 antwoorden
  • [b:df665cb471]Hoi ik hoop dat jullie me kunnen helpen :o ik wil graag weten hoe ik random getallen kan trekken in een applicatie ZONDER dat er dubbele getallen in voorkomen. Het is voor een Lotto generator. Alvast bedankt! Spidey[/b:df665cb471]
  • Ik zeg zomaar iets dat in mij opkomt. het is waarschijnlijk de bedoeling dat die weggeschreven worden, doe dit dan in een array en kijk telkens voor je wegschrijft of die array dat getal al bevat. Indien ja --> nieuw getal genereren Indien nee --> wegschrijven + nieuw getal genereren.
  • ja zoiets dacht ik dus ook al...ben pas een beginner en ben net bezig met het hoofdstuk over arrays, maar snap niet echt hoe ik dit moet aanpakken... :-?
  • 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]
  • haha simpel..? ik snap de code niet echt verder, misschien gebruik ik het, maar iig bedankt voor je post! Spidey
  • Nou, ik wil je niet ontmoedigen hoor, maar dit is wel nette OO code (Object Oriented) en bevat wel een aantal basiselementen van JAVA. Tip: kijk ff op http://java.sun.com daar vind je een hoop tutorials onder documentation, voor beginners en gevorderden. GreetzZzz
  • 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="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.
  • Ok, ik snap het volledig, thx voor de uitleg
  • 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]
  • [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.
  • 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.
  • 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(?)
  • Je zit op school om te leren, als je er niet uitkomt: vraag het de docent, die zijn daarvoor. Als iemand jou hier een compleet programma geeft leer jij er helemaal niets van en kom je volgende week al weer terug met je volgende opdracht...
  • 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
  • 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]);
  • 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.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.