1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[Anfänger] Arg Array...Ich brauche Hilfe

  • CrazyInu
  • 7. Juni 2006 um 19:04
  • Unerledigt
  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 7. Juni 2006 um 19:04
    • #1
    Zitat

    Schreib 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 :face_with_rolling_eyes: Danke im Voraus :)

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 7. Juni 2006 um 19:12
    • #2

    gern, aber... wo liegt dein problem?

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 7. Juni 2006 um 19:25
    • #3
    Zitat

    wobei jede Zahl darf nur 1 Mal vorkommen



    das ist das Problem :frowning_face:

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 7. Juni 2006 um 19:29
    • #4

    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. :)

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 7. Juni 2006 um 19:31
    • #5

    ja, logisch denken kann ich auch :) leider weiß ich nicht, wie man das anstellen soll :neutral_face:

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 7. Juni 2006 um 19:39
    • #6

    weißt du

    * was ein Array ist,
    * wie man werte zuweist und vergleicht
    * wie schleifen funktionieren?

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 7. Juni 2006 um 19:48
    • #7

    Werte von zwei Arrays mit einander vergleichen hab ich noch nicht gelernt.

    das ist alles, was ich bis jetzt geschrieben hab

    Zitat

    public 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);
    }
    }
    }

    Alles anzeigen



    wie prüfe ich denn eine Zahl, um zu schauen ob sie schon gekommen ist?

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 7. Juni 2006 um 20:56
    • #8
    Zitat von CrazyInu

    Werte von zwei Arrays mit einander vergleichen hab ich noch nicht gelernt.

    vergleiche führst du mit dem == operator durch:

    Code
    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.

    Java
    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

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 7. Juni 2006 um 21:09
    • #9

    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 :)

  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 7. Juni 2006 um 21:23
    • #10

    Der Vergleich-Code funktioniert :)

    Zitat

    public 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);
    }
    } }}

    Alles anzeigen



    der andere leider nicht :frowning_face: es zeigt zwar keinen fehler an, aber es gibt auch nichts gescheites raus

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 7. Juni 2006 um 23:09
    • #11
    Zitat von CrazyInu

    bei 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.

    Zitat

    Soll 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 CrazyInu

    Der Vergleich-Code funktioniert :)

    der andere leider nicht :frowning_face: 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

    Code
    public 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);
    			}
    			else {
    				System.out.println("a['+i+'] != " + b);
    			}
    		}
    	}
    }
    Alles anzeigen

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 7. Juni 2006 um 23:16
    • #12
    Zitat von CrazyInu

    Der Vergleich-Code funktioniert :)

    der andere leider nicht :frowning_face: 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

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 15. Juni 2006 um 18:42
    • #13

    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.

    Code
    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

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 15. Juni 2006 um 19:17
    • #14
    Zitat von CrazyInu
    Code
    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


    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 ..

  • CrazyInu
    3
    CrazyInu
    Mitglied
    Punkte
    45
    Beiträge
    8
    • 15. Juni 2006 um 19:26
    • #15

    bei while(b[zahl]) wird die Zahl überprüft, ob es bereits gewürfelt ist.

    Zitat

    danach 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

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 15. Juni 2006 um 19:30
    • #16

    Fehlerhaften Code mag' ich nicht .. hab's neu geschrieben:

    Code
    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 ..

  • Wings-of-Glory
    28
    Wings-of-Glory
    Mitglied
    Reaktionen
    105
    Punkte
    8.305
    Beiträge
    1.573
    • 15. Juni 2006 um 19:37
    • #17

    und wo behandelst du den fall, dass die gezogene zahl schon einmal gezogen wurde?
    überseh ich da was?
    edit: schon gefunden! :distur:

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.» 

    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • leadpen
    9
    leadpen
    Mitglied
    Reaktionen
    2
    Punkte
    782
    Beiträge
    142
    • 8. Juli 2006 um 20:27
    • #18

    Sorry, kommt ein bisschen spät; hier meine Minimal-Version (konnte einfach nicht die Finger davon lassen :winking_face: )

    Code
    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

    greets,

    leadpen

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 8. Juli 2006 um 21:20
    • #19
    Zitat von leadpen
    Code
    counter++;            //Erhöhe den Counter um 1.


    ROFL - ein Klassiker.

    Dipper dipper dii dipper dii dipper dii duuu

  • leadpen
    9
    leadpen
    Mitglied
    Reaktionen
    2
    Punkte
    782
    Beiträge
    142
    • 8. Juli 2006 um 22:08
    • #20
    Zitat von sauzachn

    ROFL - ein Klassiker.

    Was willst denn hören :) - inkrementieren, i = i + 1 ...

    greets,

    leadpen

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung