Vector probleme mit dem Inhalt



  • Ich hab nen Vector von 1 bis einschl. 26. 2iese Zahlen lasse ich shufflen und ausgeben, aber der letzt ist immer 0 und dann fehlt zb 14 als zahl.
    so ist der code:

    vector<int> numbers;
    // vector<int>::size_type 
    for(n = 1; n <= 26;++n)
    {                       
        numbers.push_back(n);
    }
    int shufflemaster;
    MARK:
    if (randgen == 1)
    {
      shufflemaster=generator;
    }
    else shufflemaster = rand()%500;
    
    for(;shufflemaster>0;shufflemaster--)
    {
       std::random_shuffle(numbers.begin(), numbers.end()); 
    }
    int index = 0;
    int zahl = numbers[index];
    stringstream converting;
    for (;index<=26;)
    {
        //cout<<numbers[index]<<"\n";
        converting << numbers[index];
        converting >> lettersaver[index];
        converting.clear();
        index = index + 1;
    }
    

    also numbers[26] ist immer 0 😕 WARUM



  • du hast nur 26 zahlen reingetan, also numbers[0] bis numbers[25].



  • Wie beheb ich das [... hust ...]
    wenn ich bei der for schleife die 26 zur 27 mache hab ich zahlen von eins bis 27 drin, dass ist nicht gewollt.



  • stringstream converting;
    for (int index=0;index<=26;index++)
    {
        //cout<<numbers[index]<<"\n";
        int zahl = numbers[index];
        converting << numbers[index];
        converting >> lettersaver[index];
        converting.clear();
    }
    


  • Da stellt sich mir ma wieder die Frage, wie viel du von dem Code eigtl verstehst...
    einmal ne for-schleife richtig genutzt, einmal eigtl nur ne while schleife genommen und index = index + 1 geschrieben etc...

    vector<int> numbers; 
    for(int i=1; i <= 26; ++i) 
    {
        numbers.push_back(n); 
    }
    
    int shufflemaster; 
    //MARK: ??
    /* in fkt auslagern:*/
    if (randgen == 1) //?
    {
      shufflemaster=generator; 
    } 
    else shufflemaster = rand()%500; 
    /*bis hier, also: int shufflemaster = GetShuffleCount();
    oder so in etwa - sieht man hier schlecht, wie das zusammenhängt ~~*/
    
    for(;shufflemaster>0;shufflemaster--) 
    { 
       std::random_shuffle(numbers.begin(), numbers.end()); 
    } 
    
    //int index = 0; nicht hier...
    //int zahl = numbers[index]; ??
    //stringstream converting; brauchst du hier auch nicht unbedingt...
    for(int index=0; index <= 25; ++index) //[0,25] => 26
    { 
        stringstream converting; //hier reicht das ja...
        converting << numbers[index]; 
        converting >> lettersaver[index]; 
    //    index = index + 1; nicht hier....
    }
    

    würde noch viel klarer werden, wenn du für die länge ne Konstante nehmen würdest...

    dann wäre es einmal
    i(1); i != MAX_LENGTH und einmal
    i(0); i != MAX_LEGNTH-1

    bb



  • 1. MARK: wird nicht benutzt, war nur kurz zum degug da, kann also weg.
    2. for(i=0;i<=26;i++) mache ich nie sondern schreibe immer i = i + 1; weil ich mit so besser im klaren darüber bin ,wo ich die 1 addiere.
    3. Meine Variablen habem immmer einen schreklichen Namen, weil mir nichts besseres einfällt (siehe shufflemaster 😃 )

    Und dann noch zu dem verstehen... Ich Weiß was der Code macht, denn kopiert ist er nicht sonders selbst geschrieben, den Beweis kannst du dir selbst liefern...
    ( ganz typisch für mich: unwichtiger code, Schlimme formatierung | schwer zu durschauen, kein erfahrener würde mir so etwas anbieten)

    außerdem wird es immer besser und übersichtlicher.
    Nur das unnötige Verkomplizeren muss noch etwas warten.

    Das mal DAZU



  • Tim06TR unlogged schrieb:

    2. for(i=0;i<=26;i++) mache ich nie sondern schreibe immer i = i + 1; weil ich mit so besser im klaren darüber bin ,wo ich die 1 addiere.

    Hm. Ich würde aber lernen, mit dem Ausdruck i++ oder hier besser ++i umzugehen. Den wirst du sehr oft wieder antreffen. Bei Iteratoren kannst du zum Beispiel nicht immer i = i + 1 schreiben.

    Tim06TR unlogged schrieb:

    3. Meine Variablen habem immmer einen schreklichen Namen, weil mir nichts besseres einfällt (siehe shufflemaster 😃 )

    "shufflemaster" ist doch kreativ... 😉
    Variablennamen findest du am einfachsten heraus, indem du dir überlegst, welche Aufgabe die Variable hat. Meistens findet man dann akzeptable Bezeichner.

    Was bezweckst du eigentlich hiermit?

    for(;shufflemaster>0;shufflemaster--) 
    { 
       std::random_shuffle(numbers.begin(), numbers.end()); 
    }
    

    Die Sequenz wird nicht zufälliger, indem du sie mehrmals nacheinander mischst.



  • 1. MARK: wird nicht benutzt, war nur kurz zum degug da, kann also weg.

    Wie kann man nen Label zum debuggen nutzen? Ich glaube, du hast da was falsch gemacht : D

    2. for(i=0;i<=26;i++) mache ich nie sondern schreibe immer i = i + 1;

    wenn du meinst...
    allerdings:

    /*1.*/
    for(int i(0); i != 26; ++i)
    {
      ...
    }
    
    /*2.*/
    for(int i(0); i != 26; i = i + 1)
    {
      ...
    }
    
    /*3.*/
    for(int i(0); i != 26; )
    {
      ...
      i = i + 1;
    }
    
    /*4.*/
    int i;
    for(i = 0; i != 26; )
    {
      ...
      i = i + 1;
    }
    
    /*5.*/
    int i(0);
    for(; i != 26; )
    {
      ...
      i = i + 1;
    }
    

    findest du wirklich die letzte variante am hübschesten? Oo
    ich find sie am hässlichsten...
    weil 3 zeilen zu lesen, bis ich die schleife (bzw. deren bedingungen alleine) an sich verstanden habe - bei 1. ist es nur eine zeile

    und 2. find ich auch nich besser als 1.
    also, wenn du 5. magst, dann nimm vll eher ne while schleife 😛

    bb

    hmm... Jz hab ich so viel nebenbei gemacht, dass Nexus wieder mal schneller war - aber da hab ich wenigsten nich so viel zu tippen 😃


Anmelden zum Antworten