Math.Random von 1 bis ... - AUSER?????

  • Antworten:11
L3322
  • Forum-Beiträge: 467

20.11.2010, 14:55:49 via Website

Hey ich bin heute auf ein weiteres problem gestoßen:
wenn ich bei math random befehle eine zahl zufällig von eins bis x zu nennen wie kann ich dann zum beispiel 1 zahl ausnehmen?

1(math.random()*50) +1
muss ich in diesem fall einfach -5 machen wenn ich die 5 ausdschließen will?

ich hoffe ihr könnt mir schnell helfen

"Hard work beats talent, when talent fails to work hard"

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

20.11.2010, 15:28:45 via App

Hey,
ich hab das so benutzt
1Random ra = new Random();
2int zufallszahl = ra.nextInt(100) +1;
Weiß grad nicht, ob ich alles richtig geschrieben hab..:grin:
Dieses NextInt(100) erzeugt 100 Zufallszahlen, gestartet wird aber mit 0, deswegen später +1, damit die Ergebnismenge {1..100} ist.
Eine Zahl, zB 5, auszulassen geht meines Wissens nicht, deswegen müsste man eine if- oder case-Schleife benutzen..
Also so:
1//eine Methode für die Zufallszahl:
2public int getZufallszahl(){
3 Random ra = new Random();
4 Int zahl = ra.nextInt(100) +1;
5 if(zahl==5){
6 zahl = getZufallszahl();
7 }
8 return zahl;
9}
Wenn ich jetzt keinen Denkfehler gemacht habe, müsste das eine Zufallszahl ausgeben von 1 bis 100, nur keine 5..
Lg Ansgar
P.S. Guck grad TV, also habs net getestet:grin:

Antworten
L3322
  • Forum-Beiträge: 467

20.11.2010, 15:33:08 via Website

Ja so war auch meine idee aber ich habe gedacht des geht noch irgentwie anders!

"Hard work beats talent, when talent fails to work hard"

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

20.11.2010, 15:37:48 via App

Ja, eine schöne Methode, der man einen int-array übergibt, und die die enthaltenen Zahlen dann ausschließt:grin: Vielleicht kennt einer der Pro's hier im Forum ja was..:)
Lg Ansgar

Antworten
Tim Meißner
  • Forum-Beiträge: 238

20.11.2010, 21:20:57 via Website

Rekursion ist denke ich am schönsten und am besten geeignet.

— geändert am 20.11.2010, 21:21:10

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

21.11.2010, 10:24:24 via Website

Leute, ihr programmiert für Limited Devices, denkt also mal ressourcenschonend - bei jeder Rekursion ein neues Random-Objekt zu erzeugen, kann es ja wohl kaum sein - oder?
Wie wäre es mit einer ähnlichen Funktion, die mit einer while-Schleife arbeitet?

Also:

1//eine Methode für die Zufallszahl:
2public int getZufallszahl(){
3 Random ra = new Random();
4 int zahl;
5 zahl = ra.nextInt(100) +1;
6 while (zahl==5) {
7 zahl = ra.nextInt(100) +1;
8 }
9 return zahl;
10}

Und wer jetzt gleich ein ganzes Array mit auszuschliessenden Zahlen haben möchte, macht es ungefähr so:

1//eine Methode für die Zufallszahl, die mehrere Werte ausschliesst:
2public int getZufallszahl(int[] willIchNicht){
3 Random ra = new Random();
4 int zahl;
5 zahl = ra.nextInt(100) +1;
6 while (Arrays.asList(willIchNicht).contains(zahl)) {
7 zahl = ra.nextInt(100) +1;
8 }
9 return zahl;
10}

Antworten
Tim Meißner
  • Forum-Beiträge: 238

23.11.2010, 21:25:02 via Website

hallo Thomas, was sagst du zu dieser Funktion? Kann man die noch optimieren?
1private Frage getRandomQuestion()
2 {
3 //prevent nullpointerexceptions later
4 if(fragenKatalog.size()==0)
5 return null;
6
7 //alle Fragen bereits beantwortet
8 if((answeredCorrect.size()+answeredWrong.size())==fragenKatalog.size())
9 {
10 Toast.makeText(getApplicationContext(), R.string.all_questions_answered, Toast.LENGTH_SHORT).show();
11 return null;
12 }
13
14 Frage frage = null;
15 int maxQuestions = fragenKatalog.size();
16
17 Random randomGenerator = new Random();
18
19 int randomQuestion;
20 boolean answered1 = false;
21 boolean answered2 = false;
22
23 while(true)
24 {
25 randomQuestion = randomGenerator.nextInt(maxQuestions);
26 frage = fragenKatalog.get(randomQuestion);
27 answered1 = answeredCorrect.contains(frage);
28 answered2 = answeredWrong.contains(frage);
29
30
31 if(answered1)
32 continue;
33 else if(answered2)
34 continue;
35 else
36 return frage;
37
38 }
39 }

— geändert am 23.11.2010, 21:25:18

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

23.11.2010, 21:54:43 via Website

vielleicht - wie komplex sind denn die Methoden equals und hashcode deiner Klasse Frage? Worauf ich hinauswill - deine Aufrufe von contains könnten relativ teuer werden. Vielleicht ist es also besser, in den Listen für falsch und richtig beantwortete Fragen nur deren Indizes im Fragenkatolog zu speichern... und dann müsste man auch nur die testen...

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

24.11.2010, 00:50:08 via Website

Wäre es nicht schlauer, alle behandelten Fragen aus dem FragenKatalog nach correct/wrong zu verschieben?
Dann würde das ganze Herumgeteste (das übrigens theoretisch endlos laufen könnte) komplett entfallen...

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

24.11.2010, 08:51:06 via Website

das wäre wohl sogar noch besser, wenn der rest der app damit klarkommt...

Antworten
Tim Meißner
  • Forum-Beiträge: 238

24.11.2010, 16:28:41 via Website

klasse idee, danke!
vereinfacht die sache sogar in anderen funktionen ...

— geändert am 24.11.2010, 16:36:35

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

24.11.2010, 16:39:11 via Website

Ja dann - leg mal los ;-)

Antworten