Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zufallsbuchstabe-Array Fehler (https://www.delphipraxis.net/158466-zufallsbuchstabe-array-fehler.html)

Dunkelbunt27 18. Feb 2011 15:24

Zufallsbuchstabe-Array Fehler
 
Hallo Delphi-PRAXIS,

Ich generiere mit folgendem Code Zufallsbuchstaben, die eigentlich mein Array(zweidimensional) füllen sollen, die ich danach ausgeben kann.

Delphi-Quellcode:
spalten        : array [1..300] of integer;                
zeilen         : array [1..300] of integer;
...
for i := 0 to AnzahlSpalten do
    for n := 0 to AnzahlZeilen do
        begin
          Spaltenzaehler := i;
          Zeilenzaehler := n;
          randomize;
          RandomZeichen := random(26) + 65;
//*******************************************************************************************\\
          buchstabe[i,n].Zeichen := char(RandomZeichen);      // Hier ist ein Fehler!
//*******************************************************************************************\\
          Schreibflaeche.Canvas.TextOut(spalten[Spaltenzaehler],zeilen[Zeilenzaehler],buchstabe[i,n].zeichen);
        end;
Ich bekomme jedesmal eine Zugriffsverletzung... kann mir jemand helfen den Fehler zu finden?

FG Dunkelbunt

patti 18. Feb 2011 15:26

AW: Zufallsbuchstabe-Array Fehler
 
Deine Arrays starten bei Index 1, deine Schleifen aber bei 0!

Edit: Die Deklaration des Buchstaben-Arrays fehlt allerdings in deinem Code-Ausschnitt. Geht dieses Array auch bei 1 an? Und für was sollen denn die beiden Arrays "spalten" und "zeilen" eigentlich gut sein?

WM_CLOSE 18. Feb 2011 15:28

AW: Zufallsbuchstabe-Array Fehler
 
Du fängst bei der Schleife bei 0 an zu zählen, dein Array beginnt aber erst bei 1

[edit]
zu langsam
[/edit]

Dunkelbunt27 18. Feb 2011 15:33

AW: Zufallsbuchstabe-Array Fehler
 
Delphi-Quellcode:
type
TBuchstabe = record
              ...
             end;
var
  buchstabe      : array of array of TBuchstabe;
Das mit der 1 statt Null bewirkt jetzt, dass die buchstaben eigentlich perfekt passen, trotzdem kommt bei der Zeile:
Code:
buchstabe[i,n].Zeichen := char(RandomZeichen);
eine Zugriffsverletzung im Modul ....

patti 18. Feb 2011 15:35

AW: Zufallsbuchstabe-Array Fehler
 
Delphi-Quellcode:
buchstabe : array of array of TBuchstabe;
Setzt du denn auch irgendwo die Größe des Arrays per SetLength?

Dunkelbunt27 18. Feb 2011 15:39

AW: Zufallsbuchstabe-Array Fehler
 
Ja, das funktioniert alles.
Code:
SetLength(buchstabe,Anzahlzeilen,Anzahlspalten);
Das Problem liegt laut Compiler bei der besagten Stelle.

patti 18. Feb 2011 15:43

AW: Zufallsbuchstabe-Array Fehler
 
Achtung: Wenn du die Größe eines dynamischen Arrays per SetLength auf einen Wert x setzt, dann ist der höchste Index high(array) = x-1 !
Das bedeutet, dass die Zugriffsverletzung wahrscheinlich "am Ende der Schleife" auftritt, weil du zu weit iterierst. Probier folgendes:

Delphi-Quellcode:
for i := 0 to AnzahlSpalten -1 do
    for n := 0 to AnzahlZeilen -1 do
Also bei 0 anfangen und bis Anzahl-1 durchgehen. Auch darauf achten, dass deine anderen Arrays groß genug sind. Vor allem sollten sie dann auch bei 0 anfangen ;-)

Dunkelbunt27 18. Feb 2011 15:49

AW: Zufallsbuchstabe-Array Fehler
 
Das ist komisch, sowas hatte ich mir schon gedacht gehabt und ausprobiert und jetzt fangen alle Arrays bei 0 an, ich lasse die Schleife bis ...-1 laufen und bekomme wieterhin eine Zugriffsverletzung...
Ich hoffe es weiß nochjemand weitere Ratschläge...

EDIT: Falls es Hilft, es kommt direkt am Start, bevor man etwas sieht eine Zugriffsverletzung und am Ende...

patti 18. Feb 2011 16:02

AW: Zufallsbuchstabe-Array Fehler
 
Ich meine, du hast Zeilen und Spalten vertauscht. Probier doch mal aus, was passiert, wenn du die Anzahl der Spalten gleich der Anzahl der Zeilen setzt, dann sollte es eigentlich funktionieren.

Schau dir das mal genauer an:

Delphi-Quellcode:
SetLength(buchstabe,Anzahlzeilen,Anzahlspalten);

In erster Dimension hast du "AnzahlZeilen" an Elementen, in zweiter Dimension "AnzahlSpalten". In deiner Schleife machst du folgendes:
Delphi-Quellcode:
for i := 0 to AnzahlSpalten -1 do
    for n := 0 to AnzahlZeilen -1 do
      begin
          //...
          buchstabe[i,n].Zeichen := Char(RandomZeichen); // i ist erste Dimension, n zweite !!!!
      end;
i iteriert über die erste Dimension. Du gehst bis "AnzahlSpalten" -1, hast aber bloß "AnzahlZeilen" Elemente. Das gleiche gilt für n. Wenn "AnzahlZeilen" <> "AnzahlSpalten" dann kracht es irgendwann unweigerlich...

Dunkelbunt27 18. Feb 2011 16:05

AW: Zufallsbuchstabe-Array Fehler
 
JAWOLL!:bounce1: Das funktioniert supi!
:dp: Es ist nur etwas komisch, dass nicht jedes Zeichen "radom" ist sondern viele zeichen untereinander(eigentlich alle) gleich sind.
Das ist jetzt aber nicht DAS Problem.. vielleicht ist es unvermeindlich, ich miene außer Randomize gibt es ja nichts mir bekanntes...

DANKE erstmal!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz