ZitatSchreib ein Programm, das 100 Mal eine Zufallszahl zwischen 1 und 100 würfelt. Gib alle 100 Zahlen aus (wobei jede Zahl darf nur 1 Mal vorkommen)
Helft mir bitte dieses Beispiel zu lösen Danke im Voraus
ZitatSchreib ein Programm, das 100 Mal eine Zufallszahl zwischen 1 und 100 würfelt. Gib alle 100 Zahlen aus (wobei jede Zahl darf nur 1 Mal vorkommen)
Helft mir bitte dieses Beispiel zu lösen Danke im Voraus
gern, aber... wo liegt dein problem?
Zitatwobei jede Zahl darf nur 1 Mal vorkommen
das ist das Problem
speichere die zahlen, die gekommen sind, in ein Array. dann prüfst du, ob deine gezogene zahl nicht schon gekommen ist. falls doch, läßt du nochmal eine zufallszahl ziehen.
ja, logisch denken kann ich auch leider weiß ich nicht, wie man das anstellen soll
weißt du
* was ein Array ist,
* wie man werte zuweist und vergleicht
* wie schleifen funktionieren?
Werte von zwei Arrays mit einander vergleichen hab ich noch nicht gelernt.
das ist alles, was ich bis jetzt geschrieben hab
ZitatAlles anzeigenpublic class test {
public static void main(String[] args) {
int [] a = new int[100];
Random zahl = new Random();
for(int i=0; i<a.length; i++){
a[i] = 1+zahl.nextInt(100);
System.out.println(a);
}
}
}
wie prüfe ich denn eine Zahl, um zu schauen ob sie schon gekommen ist?
Zitat von CrazyInuWerte von zwei Arrays mit einander vergleichen hab ich noch nicht gelernt.
vergleiche führst du mit dem == operator durch:
int [] a = new int[1];
a [0] = 10; a [1] = 4;
int b = 4;
for (int i=0;i<a.length<i++) {
if (b==a[1]) {
System.out.println("a['+i+'] == " + b);
}
}
Alles anzeigen
Zitat
das ist alles, was ich bis jetzt geschrieben hab
schaut gut aus.
ich hab es etwas umgeschrieben.
falls etwas unklar sein sollte, frag ruhig.
import java.util.*;
public class test {
public static void main(String[] args) {
int [] a = new int[100];
Random zahl = new Random();
a[0] = 1+zahl.nextInt(100); // erster zufallswert wird a zugewiesen.
// da es d. erste zahl ist, ist d. gezogene zahl einzigartig
int b=0;
int count=1; // zählt wieviele werte du im array a schon gespeichert hast.
for(int i=1; i<a.length; i++){ // läuft das array a.length mal durch. i ist eins, da du schon den ersten wert vor der schleife zugwieesen hast.
boolean flag = false; // flag wird true, wenn die gezogene zahl schon vorhanden ist
do { // durchlaufe diese schleife, solange flag true ist. dh. d. zahl wurde schon gezogen
b=1+zahl.nextInt(100); // b ist ein zwischenspeicher für d. neu-gezogene zahl.
for(int j=0; j<count; j++){
// System.out.println("arge schleife");
if (a[j] == b) { // wenn d. zahl schon gezogen wurde
flag=true; // setze flag auf true
System.out.println("zahl " + b + " bereits vorhanden. ziehe neue zahl");
}
}
} while(flag); // eine neue zahl wurde gefunden, die sicher nur 1x vorhanden ist
a[i]=b; // weise zahl b dem array an der stelle i zu
count++; // erhöhe counter um 1.
System.out.println(a[i]);
}
}
}
Alles anzeigen
bei zeile 5 erkennt java die variable i nicht, weil du i vorher noch nicht definiert hast. Soll ich eine for-Schleife davor schreiben? Darf man das überhaupt?
übrigens, vielen Dank für deine Geduld und Hilfe
Der Vergleich-Code funktioniert
ZitatAlles anzeigenpublic class test {
public static void main(String[] args) {
int [] a = new int[2];
a[0] = 10;
a[1] = 4;
int b = 4;
for (int i=0; i<a.length; i++) {
if (b == a[i]) {
System.out.println("a['+i+'] == " + b);
}
} }}
der andere leider nicht es zeigt zwar keinen fehler an, aber es gibt auch nichts gescheites raus
Zitat von CrazyInubei zeile 5 erkennt java die variable i nicht, weil du i vorher noch nicht definiert hast.
entschuldigung. das war ein typischer copy&paste fehler. ersetz das i durch 0, ich habs oben schon ausgebessert.
ZitatSoll ich eine for-Schleife davor schreiben? Darf man das überhaupt?
darfst du zwar, aber nur wegen EINEM wert zahlt sich das nicht aus.
Zitatübrigens, vielen Dank für deine Geduld und Hilfe
bitte gerne. ich hab morgen prüfung und bin daher heute unregelmäßig online.
Zitat von CrazyInuDer Vergleich-Code funktioniert
der andere leider nicht es zeigt zwar keinen fehler an, aber es gibt auch nichts gescheites raus
das kommt daher, dass kein fall definiert wurde, falls der wert doch gleich ist. es fehlt ein else und ein System.out.println
Zitat von CrazyInuDer Vergleich-Code funktioniert
der andere leider nicht es zeigt zwar keinen fehler an, aber es gibt auch nichts gescheites raus
ich glaube, ich hab dich missverstanden. welcher code geht nicht?
edit: ich hatte paar schlampigkeitsfehler im programm. jetzt sollte es gehen. blöderweise wiederholen sich d. zufallszahlen sehr häufig, wodurch quasi eine "endlosschleife entsteht. da hilft nur mehr STRG+C
Der Code, den du für mich geschrieben hast, passt leider nicht zu meinem kleinen Programm. Also habe ich mich bei ein paar Klassenkameraden erkundigt und sie haben mir dann erklärt, wie es geht. Folgende Codezeilen sollen richtig sein, allerdings stimmt irgendwas nicht mit Ausgabe.
public class einmalVorkommen {
public static void main(String[] args) {
boolean [] b = new boolean[11];
Random r = new Random();
for(int i=0; i<11; i++){
int zahl = 1+r.nextInt(10);
while(b[zahl]){
zahl = 1+r.nextInt(10);
}
if(b[zahl] = true){
System.out.println(b);
}
}
}
}
Alles anzeigen
weißt du vielleicht woran es liegt?
Folgendes kommt raus: [Z@10b62c9
Zitat von CrazyInu
Na des schaut ma reichlich komisch aus .. vor allem "b[zahl] = true" (das ist eine Zuweisung, keine Überprüfung), danach gibst du nicht ein Element aus (b[zahl]) sondern das ganze Array b ..
bei while(b[zahl]) wird die Zahl überprüft, ob es bereits gewürfelt ist.
Zitatdanach gibst du nicht ein Element aus (b[zahl]) sondern das ganze Array b ..
ich will das ganze Array mit 10 Elemente, spricht 10 Zahlen ausgeben
Fehlerhaften Code mag' ich nicht .. hab's neu geschrieben:
public class UniqueRandomNumbers {
public static void main(String[] args) {
// array mit 100 elementen erstellen
int[] numbers = new int[100];
// array mit zahlen füllen. index läuft von 0 bis 99 durch i + 1 wird
// das array mit zahlen von 1 bis 100 befüllt
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i + 1;
}
// nun die ausgabe .. in folgender variable merken wir uns wieviel
// zahlen schon ausgegeben worden sind
int numbersWritten = 0;
// so lange wir nicht 100 zahlen ausgegeben haben (also alle)
// wiederholen wir folgenden vorgang:
while (numbersWritten < 100) {
// zuerst wird eine zufallsposition im index-bereich des arrays
// bestimmt:
int randomIndex = (int) (Math.random() * numbers.length);
if (numbers[randomIndex] != 0) {
// falls der wert an dieser stelle nicht 0 ist wird sie
// ausgegeben ..
System.out.print(numbers[randomIndex] + " ");
// .. und auf 0 gesetzt
numbers[randomIndex] = 0;
// eine zahl mehr wurde geschrieben, der zähler wird erhöht
numbersWritten++;
// nur für die optik: alle 10 ausgegebenen zahlen wird ein
// zeilenumbruch eingefügt
if (numbersWritten % 10 == 0) {
System.out.println();
}
}
}
}
}
Alles anzeigen
Der Code funkt aber nur wenn das Array mindestens so groß ist wie die Anzahl der Zahlen die ausgegeben werden sollen.
Die Sache könnte man noch auf etliche andere Arten lösen, das is eben eine davon ..
und wo behandelst du den fall, dass die gezogene zahl schon einmal gezogen wurde?
überseh ich da was?
edit: schon gefunden! :distur:
Sorry, kommt ein bisschen spät; hier meine Minimal-Version (konnte einfach nicht die Finger davon lassen )
public class makeRandom {
public static void main(String[] args) {
int counter = 0;
int zahl = 0;
int[] gezogeneNummern = new int[101];
for (int i = 0; i < 101; i++){ //Initialisierung des gesamten Array-Inhalts mit 0.
gezogeneNummern[i] = 0;
}
while (counter < 100) { //Solange noch nicht 100 verschiedene Zahlen gefunden wurden
zahl = 1 + (int)(Math.random() * (100)); //Ziehe Zahl zwischen 1 und 100.
if (gezogeneNummern[zahl] == 0) { //Falls Zahl vorher noch nicht gezogen
gezogeneNummern[zahl] = 1; //Markiere Zahl als gezogen.
System.out.println("Gefundene Zahl " + counter + " : " + zahl);
counter++; //Erhöhe den Counter um 1.
}
}
}
Alles anzeigen
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!