zufällige karte aus Array ohne wiederholungen ziehen?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Reicht die shuffle funktion denn nicht? Wäre viel kürzer und einfacher

http://pastebin.com/ZbqR76be

habe jetzt doch shuffle verwendet. allerdings hadert es jetzt daran das ich aus irgendeinem grund x (den gesamt kartenwert) nicht richtig bestimmen kann. er wird in der schleife am anfang auf 0 gesetzt, rechnet dann aber immer nur 2 der 3 karten zusammen. wäre net wenn du mir meinen fehler zeigen könntest.

0
@idinahuibljad

um mich deutlicher auszudrücken, das shuffeln sowie das ausgeben der zufallskarten funktioniert perfekt! Geht nurnoch um die zusammen rechung von x punkten.

0

oh scheise das war die cpp frage.. sorry ich war in gedanken noch bei php.. aber gut das es jetzt trotzdem funktioniert :-D

0

Mit rand() und srand() kann man Zufallszahlen generieren

"das Array um eins verkleinert": Ich würde nur den MAX-Index um eins reduzieren und nicht den allozierten Speicherbereich verkleinern, besser nach der Operation insgesamt den Speicher freigeben. Aber es geht noch einfacher!

Folgender Code habe ich jetzt so aus dem Kopf geschrieben, nicht geprüft, kann also noch Fehler enthalten, nur zum Verständnis

 

const int MAX_Wertebereich= 32

  int main()
  {
    int MAX=32

    int index, check_i;
    time_t MyTime;
    int karten[MAX];

    time(&MyTime);
    srand((unsigned int)MyTime);

   //Variante 1
   for(index=0;index<MAX_Wertebereich;index++)
           karten[index]=index;

   int gezogene_karten[3];

   for(index=0;index<3;index++)
   {
      gezogene_karten[index]=rand()%MAX_Wertebereich+1;
      for(check_i=0;check_i<index;check_i++)
      {
                 if(gezogene_karten[index]==gezogene_karten[check_i])
                  {
                          index--; // auf denselben Index noch einen Versuch;
                          break;
                   }
     }
     cout<<karten[gezogene_karten[0]]<<" "<<
                karten[gezogene_karten[1]]<<" "<<
                karten[gezogene_karten[2]]<<endl;
    // Ende Variante 1

    //Variante 2: möglich auch mit gemischtem Stapel:

    for(index=0;index<MAX_Wertebereich;index++)
    {        
        karte[index]=rand()%MAX_Wertebereich+1;
        for(check_i=0;check_i<index;check_i++)
        {
                  if(karte[index]==karte[check_i])
                  {
                          index--; // auf denselben Index noch einen Versuch;
                          break;
                   }
         }
     }

    //Zufallsziehung: Hier muss man nur die ersten drei Karten ziehen, da
    // die Reihenfolgen bereits zufällig ist

   cout<<karte[0]<<" "<<karte[1]<<" "<<karten[3]<<endl;

  // Ende Variante 2

  }

 

Die andere Möglichkeit ist (ohne Verwendung von sort()): Du schreibst eine beliebige Art, Zahlen in einem Array zu sortieren, z.B. Insertion Sort. Jedoch nimmst Du einen anstatt die Position durch vergleiche zu bestimmen jeweils eine Zufallszahl, die bestimmt, an welcher Stelle die neu zu "sortierende" Zahl eingefügt wird.

Größe eines Arrays in Konstruktor übergeben (Java)

Hallo :)

Ich hab eine Java-Frage. Und zwar versuche ich gerade diese Aufgabe zu lösen: http://wiki.freitagsrunde.org/Javakurs/%C3%9Cbungsaufgaben/Studentendatenbank

bei Teilaufgabe 5 komme ich nicht weiter... es scheitert daran, dass ich nicht weiß, wie man die Größe eines Arrays im Konstruktor übergeben soll... Also was ich später in der Main machen muss, ist klar. Nur komme ich in der Klasse StudentDatabase nicht weiter.

Da steht bis jetzt das drinnen:

**public class StudentDatabase

{

int Anzahl;

Studenten Daten[]= new Studenten[Anzahl];

StudentDatabase(int A)

{

this.Anzahl=A;

Daten[A];
/* hier kriege ich die Fehlermeldung Syntaxerror insert "AssignmentOperator Expression" to complete Expression*/

} } **

für hilfreiche Antworten wäre ich wirklich sehr dankbar!

Viele Grüße :)

...zur Frage

Anzahl Array mit Inhalt in C#?

double[] i = new double [12];

alle arrays sind mit 0 vordefiniert weil sie leer sind.

jetzt habe ich manche Arrays im laufe des Programmes mit Zahlen gefüllt und möchte nun herausfinden wie viele Arrays beschrieben sind.

Wenn nur 4 Arrays Daten enthalten, dann will Ich mit der 4 weiterrechnen, aber ich bekomme es nicht mehr hin.

...zur Frage

C++ zweidimensionalen Array an Funktion übergeben?

Ja ich weiß das wurde schon hunderte male durchgekaut aber bei Fragen wie dieser geht es meist darum die größe des Arrays zu ermitteln aber mir geht es nur darum den Array zu übergeben und auf ihn zuzugreifen (ich weiß wenn man ihn "normal"(also ohne Zeiger auf ihn)übergibt kann man ihn nicht ändern aber das will ich auch garnicht ich will ihn einfach nur auslesen.(Das ganze soll übrigens mal das spiel des lebens werden)

Hier der Code:

#include<iostream>
#include<windows.h>
using namespace std;
const int x=12; const int y=8;


void ausgeben(char feld[][]){ int j,i;


for(i=0;i<y;i++){


    for(j=0;j<x;j++){


        if(feld[i][j]){             cout<<"#";         }else{             cout<<" ";                         }         }  cout<<endl;


} }


int main(int argc,char* argv[]){ char feld[y][x]{{0,0,1,0,0,0,0,1,0,0,0,0},                 {0,0,1,0,0,0,1,0,0,0,0,0},                 0,0,1,0,,0,1,0,0,0,0,0,0},                 {0,0,1,0,1,0,0,0,0,0,0,0},                 {0,0,1,1,0,0,0,0,0,0,0,0},                 {0,0,1,0,1,0,0,0,0,0,0,0},                 {0,0,1,0,0,1,0,0,0,0,0,0},                 {0,0,1,0,0,0,1,0,0,0,0,0}};


ausgeben(feld);

return 0;
}

Hier die Fehlermeldungen:

||=== Build file: "no target" in "no project" (compiler: unknown) ===|

|8|error: declaration of 'feld' as multidimensional array must have bounds for all dimensions except the first|

||In function 'void ausgeben(...)':|

|15|error: 'feld' was not declared in this scope|

||In function 'int main(int, char)':|

|32|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

|39|warning: overflow in implicit constant conversion [-Woverflow]|

||=== Build failed: 2 error(s), 9 warning(s) (0 minute(s), 1 second(s)) ===|

Und könnte mir jemand noch erklären wie ich die Fehlermeldungen wegbekomme ich verwende Code::Blocks mit dem GNU GCC Compiler ich war schon mal in den entsprechenden Einstellungen allerdings kenne ich mich damit nicht aus und will da nichts verstellen(aber musste ich bereits denn der Compiler verstand Anfangs den neuerern C++ standard nicht obwohl er aktuell ist)

...zur Frage

C# Matrix Klasse schreiben?

Hallo,

ich hab mir gestern eine kleine Matrix-Klasse in c# geschrieben. Dabei speichere ich die Matrix in einem 2 dimensionalen Array. Mittels indexer hab ich es auch hinbekommen das man direkt über die Klasse Werte in dem Array abfragen und ändern kann. Mein Problem ist das ich um bestimmte Anfragen auf das Array zu tätigen ja immer noch direkten Zugriff über einen getter brauch. Das ist meiner Meinung aber ziemlich unschön, ich fände es schöner wenn ich sozusagen von einem 2-dimensionalen Array Erbe damit dann die Klasse die Eigenschaften und Funktionen des Arrays übernimmt. Ich weiß, dass das so leider nicht möglich ist aber vielleicht hat ja jmd. eine Idee wie man sowas besser gestalten könnte.

Vielen Dank für alle Antworten

...zur Frage

Wie gebe ich nach Erzeugung eines Objektes ein "int" Array im BlueJ-Methodenaufruf ein?

Ich sitze vor einem eigentlich so banalem Problem. Ich habe eine Methode geschrieben die durch Benutzereingabe einen String und ein int Array beim Aufruf übernehmen soll. Ich weiß wie ich den String in BlueJ beim Aufruf eingebe. Einfach in die "meinStringEingeben", aber wie mache ich das beim int Array oder überhaupt bei einem Array? Ich habe so einiges versucht. "Gefunden" habe ich nur diese Möglichkeit { irgendEineZahl } ABER wenn ich das mache dann erzeugt er kein int array sondern ein einfaches int, wodurch es selbstverständlich dann zum ArrayIndexOutOfBoundsException Auswurf kommt.

Mein Methodenkopf sollte auch nicht die Quelle des Übels sein

void meineMethode (String string, int[] intArray) deklariert habe.

...zur Frage

While Schleife und Zufallszahlen in C#?

Ich möchte ein Programm schreiben, in dem die ganzzahligen Zufallszahlen im Intervall 1-10 erzeugt werden, solange bis das Produkt der erzeugten Zufallszahlen >1000 ist. Die erzeugten Zufallszahlen und das Produkt müssen ausgegeben werden (und mit While Schleife soll gearbeitet werden).

Ich habe in die While Bedingung zuerst produkt > 1000 eingegeben, ist aber nichts vernünftiges herausgekommen. Letztendlich klappt es mit produkt <1000. WIESO? Das Ergebnis soll doch größer wie 1000 sein...Ich bin eher durchs Probieren an die Lösung gekommen, würde ich es dennoch gerne auch verstehen...DANKE!

{

Random zz = new Random(System.DateTime.Now.Millisecond);

        int produkt = 1;

        int zufallszahl=0;

        while (produkt <= 1000) 

        {
            zufallszahl = zz.Next(1, 10);

            Console.WriteLine(zufallszahl);

            produkt *= zufallszahl;

        }

        Console.WriteLine(produkt);

        Console.ReadLine();

    }
...zur Frage

Was möchtest Du wissen?