Fehler bei zuweisung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Fehler bei zuweisung

Beitrag von gillian_x »

Hallo,

bin auf folgendes Problem gestoßen:

Ich habe 10 Werte in ein Memofeld geschrieben, diese Werte möchte ich nun Tagen zuweise, also für ein Jahr.

Das ganze soll nachdem Zufallsprinzip erfolgen.

Das ganze habe ich mit einer For-Schleife versucht.

Hier tritt nun das Problem auf: Ich habe 365 Tage und 10 Werte, also müssen die Werte ja insgesamt jeweils mehr als einmal vorkommen und ich bekomme die Fehlermeldung: List index exceeds bounds (10).
Gibt es da wohl eine Lösung für?

Ach so, Ausgabe auch in einem Memofeld.

LG

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler bei zuweisung

Beitrag von theo »

Klingt nach "0-Fehler".
Wenn du zehn Werte hast, ist der höchste bei Listeneintag 9 und der erste bei 0.
Du greifst auf den 10ten Eintrag zu, den es gar nicht gibt.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fehler bei zuweisung

Beitrag von m.fuchs »

gillian_x hat geschrieben:Das ganze habe ich mit einer For-Schleife versucht.
Das ist ja schön. Magst du uns den relevanten Quellcode noch zeigen oder sollen wir raten?
gillian_x hat geschrieben:List index exceeds bounds (10).
Das bedeutet, dass du auf ein Element zugreifst, welches nicht existiert. Da musst du deine For-Schleife wohl anders aufbauen. Wie? Kann man dir sagen, wenn man sie gesehen hat.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: Fehler bei zuweisung

Beitrag von gillian_x »

okay :)

begin
for i := 0 to 355 do begin
day:=memo1.Lines[random(memo1.lines.count)+1];
memo2.lines.Add('Tag'+IntToStr(i)+' '+day);
end;
Memo2.Lines.SaveToFile('test.txt');

Ja, also muss ich es ja iwie hinbekommen, dass Werte mehrfach genommen werden. Nur weiß ich leider nicht wie :cry:

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler bei zuweisung

Beitrag von theo »

Das +1 scheint mir zuviel

day:=memo1.Lines[random(memo1.lines.count)+1];

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fehler bei zuweisung

Beitrag von m.fuchs »

gillian_x hat geschrieben:

Code: Alles auswählen

day:=memo1.Lines[random(memo1.lines.count)+1];
Tja, wie von Theo vermutet, du hast das Zaunpfahlproblem.

Du hast zehn Einträge in deiner Liste. Count ist also 10. Das erste Element ist 0 und das letzte 9. Also mach dein +1 weg und der Fehler wird verschwinden.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: Fehler bei zuweisung

Beitrag von gillian_x »

ups... Danke! :) :) :)

nun habe ich noch eine weitere Frage! :oops:

Gibt es die Möglichkeit festzulegen wie oft ein Wert verwendet wird?

zb Wert 6 insgesamt 100 mal, Wert 2 insgesamt 50 mal, usw...

Antworten