AGB  ·  Datenschutz  ·  Impressum  







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

Array: mein integer ist leer :\

Ein Thema von Pseudemys Nelsoni · begonnen am 15. Dez 2003 · letzter Beitrag vom 15. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Array: mein integer ist leer :\

  Alt 15. Dez 2003, 20:12
hoi,

Delphi-Quellcode:
      SetLength(QuizAntwort, length(QuizAntwort)+1);
      QuizAntwort[high(QuizAntwort)].nick := nick;
      QuizAntwort[high(QuizAntwort)].rAntworten := 1;
      ShowMessage(IntToStr(QuizAntwort[high(QuizAntwort)].rAntworten));
wieso wird mir hierbei eine leere message, also ohne text angezeigt? ich hab doch "rAntworten" den wert 1 zugewiesen. "QuizAntwort" ist das array
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#2

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 20:26
Moin!

Ich habs bei mir mal ins Delphi eingefügt weil's IMO fehlerfrei ist. Bei mir zeigts ne Message an wo ne 1 drin steht.

MfG Niels
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:04
hoi, sorry ich hab das falsche kopiert, also hier:


Delphi-Quellcode:
procedure irgendwas;
var
  i: integer;
  b: boolean;
  text: string;
begin
  text := bla;
  for i := 0 to high(QuizAntwort) do
  begin
    if lowercase(text) = lowercase(QuizAntwort[i].text) then // wenn text schon im array ist
    begin
      inc(QuizAntwort[i].Antworten);
      Showmessage(IntToStr(QuizAntwort[i].Antworten)); // müsste 2 zeigen, zeigt aber nichts an
      b := true;
    end;
    if b = false then
    begin
      SetLength(QuizAntwort, length(QuizAntwort)+1);
      QuizAntwort[high(QuizAntwort)].text := text;
      QuizAntwort[high(QuizAntwort)].Antworten := 1;
      ShowMessage(IntToStr(QuizAntwort[high(QuizAntwort)])); // zeigt 1
    end;
  end;
end;


beim ersten mal wenn "text"(bla) noch nicht in dem array ist wird der teil NACH dem "b = false" ausgeführt, sonst wird nur alles VOR dem "b = false" ausgeführt... also beim ersten mal wird mir "1" angezeigt, dann existierts also und beim 2ten aufruf der procedure wird alles vor "b = false" ausgeführt. ich habe da "inc(QuizAntwort[i].Antworten);" also müsste aus der "1" doch eine "2" werden, das wird es aber nicht, ich seh nichtmal die "1", das sowmessage zeigt mir nichts an

woher kommt das?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#4

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:19
Hi,

Mal abgesehen davon, dass ich dein Beispiel nicht verstehe wäre wohl interessant wie groß dein Array vor der Prozedur ist. Ein Element muss wohl mindestens drinnen sein, sonst würdest du nie eine Messagebox bekommen.

Wenn mehr als Element drinne ist ist auch klar, warum du im 2ten Durchgang nicht unbedingt die 2 bekommst.

Weil:

Im ersten Durchgang erzeugst du ein neues Element, welches ja nicht das nächste sein muss. Den Antworten-Wert des nächsten Elementes, das du in dieser Prozedur noch nicht angerührt hast erhöhst du um eins. Natürlich hab ich keine Ahnung was dort jetzt drinsteht, weil ich den Code dazu nicht habe.

BTW: Ist es schlau, die ArrayLänge in einer For-Schleife als Counter zu verwendet, wenn man sie verändert?
Die Abbruchbedingung für eine Forschleife wird doch nur einmal ausgewertet, oder hab ich das falsch verstanden?
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:22
also das array "QuizAntwort" ist global definiert und ist komplett leer beim ersten betreten der prozedur(wird von einer anderen prozedur auch nicht verwendet)
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#6

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:36
Wenn das Array leer ist, gibt high(array) -1 zurück und die for-Schleife startet net mal. Du musst dann length(array) nehmen.


MfG Niels
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:40
ich verstehe hier den unterschied zu high/length nichtmehr (steht in meinem buch nicht)
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#8

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:47
High gibt dir den Index des letzten Elementes zurück und Length gibt dir die Anzahl der Elemente des Arrays zurück.

Ich hab mir dein Prog jetzt nochmal angeguckt...Angenommen am Anfang hat das Array ne Länge von 1.
Dein Prog macht es um 1 länger und trägt an der Stelle mit dem Index 1 die Daten ein.
Beim erneuten Aufruf der Prozedur geht es wieder beim ersten Element los, wo er sieht, dass es leer ist und schließlich das Array um eins vergrößert (length ist nun 3) und beim Element mit dem Index 2 das Zeug einträgt.
Beim zweiten Durchlauf der For-Schleife findet er nun eine Übereinstimmung (Stelle mit Index 1). Daraufhin wird die Anzahl der Antworten an dieser Stelle inkrementiert und als MSG ausgegeben.

Mich würde aber mal interessieren was das werden soll.


MfG Niels

[edit] Was ich vorhin mit Length / High gesagt hab würde den (eventuellen) Sinn deines Progs verändern...also vergiss es einfach [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:55
huhu niels,

Zitat:
High gibt dir den Index des letzten Elementes zurück und Length gibt dir die Anzahl der Elemente des Arrays zurück.
wenn high das letzte element ausgibt würde das bei 20 elementen 20 sein und da es 20 elemente hat wird length doch auch 20 wiedergeben oder nicht?

das ganze ist für ein quiz, die procedure s.o soll bei einer richtigen antwort auf eine frage einen punkt addieren.

dabei muss ich prüfen ob der nick schon in dem array is, oder nicht. der typ des arrays sieht so aus:

Delphi-Quellcode:
Type
  TQuizAntwort = Record
    nick: string;
    antworten: integer;
  end;
irgendwie klappts nicht, im chat wird mir ab frage 2 dann das angezeigt:

Zitat:
[21:55:11] <silent> ja
[21:55:13] <ism> ¤¤¤ silent hat die Frage "nein ? " richtig, mit "ja" beantwortet
[21:55:14] <ism> ¤¤¤ silent hat jetzt 1 richtige Antwort(en)
[21:55:14] <ism> ¤¤¤ ja ?
[21:55:16] <silent> nein
[21:55:16] <ism> ¤¤¤ silent hat die Frage "ja ?" richtig, mit "nein" beantwortet
[21:55:17] <ism> ¤¤¤ silent hat jetzt richtige Antwort(en)

den ersten punkt sehe ich noch, bei dem 2teil steht da keine zahl mehr
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#10

Re: Array: mein integer ist leer :\

  Alt 15. Dez 2003, 21:59
Moin!

Die Indizes beginnen bei 0 ...das heißt bei nem Array mit length = 20 ist die ist high = 19.

Die Suche nach Usern würde ich anders machen. Geht viel einfacher...hab jetzt aber keine Lust mehr.
gn8

MfG Niels
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:48 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