AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wertezuweisung an Arrays

Ein Thema von Hellcat · begonnen am 24. Apr 2003 · letzter Beitrag vom 25. Apr 2003
Antwort Antwort
Hellcat

Registriert seit: 27. Feb 2003
60 Beiträge
 
Delphi 6 Personal
 
#1

Wertezuweisung an Arrays

  Alt 24. Apr 2003, 13:09
Hi Leute!

Folgendes Problem: bei dem Code
Delphi-Quellcode:
  for i := 1 to 35 do {Durchlauf für alle Panels}
...
repeat {HL}
        Hhl := Hhl + Zeile[Zaehler];
        inc (Zaehler);
      until Zeile[Zaehler] = ';';
...
if Hhl <> '-1then BildHL[i] := true;
sollte doch für den Array von BildHL jeweils der entsprechende Wert zugewiesen werden. Bei mir bleiben aber alle auf dem Default-Wert (in diesem Fall false)...woran kann das liegen?
2+2=5 (for large values of 2)
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2
  Alt 24. Apr 2003, 14:05
Also der Codeschnipsel ist sehr kurz, aber ich vermute, dass einfach HHL immer '-1' ist?!?!

Oder hast du ein begin/end vergessen?
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Hellcat

Registriert seit: 27. Feb 2003
60 Beiträge
 
Delphi 6 Personal
 
#3
  Alt 24. Apr 2003, 15:13
Nein, das hab gleich als erstes überprüft...

ich stell hier noch mal die gesamte Funktion rein, aber da ist viel mit dabei was mit hhl nicht viel zu tun hat
Delphi-Quellcode:
begin
  zaehler := 21;
  for i := 1 to 35 do {Durchlauf für alle Panels}
    begin {Initialisierung der einzelnen Variablen}
      HName := '';
      HFarbe := '';
      HZeit := '';
      HSchl := '';
      HHl := '';
      HSnd := '';
      repeat {Name}
        HName := HName + Zeile[Zaehler];
        inc (Zaehler);
      until Zeile[Zaehler] = ';';
      inc (Zaehler);
      repeat {Zeit}
        HZeit := HZeit + Zeile[Zaehler];
        inc (Zaehler);
      until Zeile[Zaehler] = ';';
      if HZeit = '0then Hzeit := '';
      inc (Zaehler);
      repeat {Farbe}
        HFarbe := HFarbe + Zeile[Zaehler];
        inc (Zaehler);
      until Zeile[Zaehler] = ';';
      HFarbe := IntToHex((StrToInt('$' + HFarbe)),6);
      inc (Zaehler);
      repeat {THL}
        Hhl := Hhl + Zeile[Zaehler];
        inc (Zaehler);
      until Zeile[Zaehler] = ';';
      inc (Zaehler);
      repeat {Halle offen/zu}
        HSchl := HSchl + Zeile[Zaehler];
        inc (Zaehler);
      until Zeile[Zaehler] = ';';
      inc (Zaehler);
      repeat {Beschallung}
        HSnd := HSnd + Zeile[Zaehler];
        inc (Zaehler);
      until Zeile[Zaehler] = '#';
      Zaehler := Zaehler + 2;
        with Application.MainForm.FindComponent('PanLab' + IntToStr(i)) as TLabel do {Zuweisung Hallenname}
          begin
            caption := HName;
          end;
        with Application.MainForm.FindComponent('PanLabT' + IntToStr(i)) as TLabel do {Zuweisung Hallenzeit}
          begin
            caption := HZeit;
          end;
        with Application.MainForm.FindComponent ('PanHalle' + InttoStr(i))as TPanel do {Zuweisung Panelfarbe}
          begin
            Color := StrToInt('$' + HFarbe);
          end;
        if Hhl <> '-1then BildHL[i] := true; {Zuweisung HL-Bild}
          BildHL[i] := HL (Application.MainForm.FindComponent('HLPan1'+IntToStr(i))as TImage,Mbleft,BildHL[i]);
        if HSchl <> '-1then BildSchl[i] := true; {Zuweisung Schloss-Bild}
          BildSchl[i] := Schloss (Application.Mainform.Findcomponent('SchlPan'+IntToStr(i))as TImage,Mbleft, BildSchl[i]);
        if HSnd <> '-1then BildSound[i] := true; {Zuweisung Beschallung-Bild}
          BildSound[i] := Sound (Application.MainForm.Findcomponent('SndPan'+IntToStr(i))as TImage, Mbleft, BildSound[i]);
    end;
end;
2+2=5 (for large values of 2)
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#4
  Alt 24. Apr 2003, 16:17
Mach das Ganze doch einfach mal nur mit dem ersten Wert und beachte die anderen nicht, wenn dann da was schief gehen sollte kannste es durch Debuggen sehr schnell rausfinden.

Etwas überladen die Methode, vielleicht hilft dir auch ein Auslagern in eine 2. bzw 3. Methode. Macht es einfach übersichtlicher.
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Hellcat

Registriert seit: 27. Feb 2003
60 Beiträge
 
Delphi 6 Personal
 
#5
  Alt 24. Apr 2003, 17:20
Der Absturz tritt schon beim ersten Durchlauf auf...allerdings (bei der gleichen Zeile die geladen wird) mal bei Hhl, mal bei HSchl und mal bei HSnd auf - spätestens aber dort. Und eine Zuweisung erfolgte bei keinem der zahlreichen Versuche...
2+2=5 (for large values of 2)
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#6
  Alt 24. Apr 2003, 17:23
Hallo,

Du solltest Deine Schleife bei 0 anfangen lassen, ist so üblich bei Arrays.
Solange noch kein Eintrag drin ist und Du den Array nicht per Hand erhöht hast, kannst Du an Stelle[1] nichts schrieben, weil der Platz sozusagen noch gar nicht existiert.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Hellcat

Registriert seit: 27. Feb 2003
60 Beiträge
 
Delphi 6 Personal
 
#7
  Alt 24. Apr 2003, 19:12
Hmm, ich hab ihn aber eigentlich entsprechend definiert...oder liegt der Fehler in der Deklaration?

Delphi-Quellcode:
var

{Globale Variablen/Arrays}
    BildHL : array[1..35] of boolean;
    BildSchl : array[1..35] of boolean;
    BildSound : array[1..35] of boolean;
    z: integer;

implementation

 begin
  for z:=1 to 35 do
  begin
    BildHL[z] := false;
    BildSchl[z] := false;
    BildSound[z] := false;
  end;
2+2=5 (for large values of 2)
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#8
  Alt 25. Apr 2003, 11:05
Ein Fehler in der Deklaration liegt nicht vor, aber gewöhn dir an in solchen Fällen mit 0 anzufangen.

So hab ich keinen Fehler gefunden, durch Debuggen sollte es recht einfach sein dahinter zu kommen.

PS: i := i + 1 ist 10% schneller als inc(i). Hab mir mal ein kleines Testprogramm dafür geschrieben um es zu testen
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#9
  Alt 25. Apr 2003, 13:50
Hallo,
Zitat von Touchdown:
PS: i := i + 1 ist 10% schneller als inc(i). Hab mir mal ein kleines Testprogramm dafür geschrieben um es zu testen
Das will ich sehen!

Grüsse, Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz