Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
16.01.2005, 22:12
sw_a_t



Wo liegt der fehler? Ich hänge jetzt schon ne ewigkeit an dieser stelle.
Er soll einen Button solange funktionieren lassen bis er 3mal benutzt wurde.
Aber so wie ich es jetzt habe , funzt der button garnicht!

Quellcode:button1.Click :

zaehler = 0
        Do While zaehler > 2
            zaehler = zaehler + 1
            Exit Do
            If zaehler < 2 Then

Anweisungsblock (funktioniert ohne die schleife)            

             Else

                button1.Enabled = False

            End If

        Loop
es ist warscheinlich irgend ne kleinigkeit die ich falsch gemacht hab. bitte helft mir. Als was muss ich "zaehler" denn deklarieren? hab schon mehrere deklarationen versucht!

--

sw_a_t heißt jetzt CPoly !

Medieval Battles - Para Bella Crudelia


Dieser Beitrag wurde am 16.01.2005 um 23:12 von theDon bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
16.01.2005, 22:58
oxff



Also erstmal massiv bold abuse, ausserdem hast du das Prinzip von Event-Funktionen und Schleifen anscheinend noch nicht richtig verstanden. Such noch ein wenig mit deinem 2. Gehirn und versuch es noch einmal.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
002
16.01.2005, 23:13
theDon



ich hab das bold mal gefixed.

tipp: der `anweisungsblock' wird nie erreicht.

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
003
17.01.2005, 16:05
sw_a_t



könnt ihr mir nicht einfach sagen was falsch is? ich werd den code dann nich einfach benutzen sonder ihn auch lesen um meinen fehler zu verstehen. ich glaub es hängt mit dem "exit do" zusammen das zu früh , oder falsch sitz da es vor dem "anweisungsblock" die schleife unterbricht.

und was ist "massiv bold abuse"?

Oder sagt mir wo hier der fehler liegt und ob ich schon näher dran bin als vorher....

Quellcode:zaehler = 0
        Do While zaehler > 2

             If zaehler > 2 Then
                  
                    Button1.Enabled = False
                    Exit Do
        
                    else
                        zaehler = zaehler + 1
                
                   Anweisungsblock
            
              
            End If

        Loop

--

sw_a_t heißt jetzt CPoly !

Medieval Battles - Para Bella Crudelia


Dieser Beitrag wurde am 17.01.2005 um 16:11 von sw_a_t bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
17.01.2005, 17:12
TheTinySteini



Ja, zum Beispiel. Das exit do beendet dort die Schleife. Warum tust du das dann, wenn du's nicht willst?
Aber dennoch: frag dich nochmal genau, was "do while zaehler > 2" überhaupt bedeutet (übersetzen?!). Und dann guck mal, ob deine Anfangsbedingungen das überhaupt erfüllen.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy


Dieser Beitrag wurde am 17.01.2005 um 17:16 von TheTinySteini bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
17.01.2005, 17:15
HammerBlade



Quellcode:zaehler = 0
    Do While zaehler > 2
        [Anweisungsblock]
    Loop
Du merkst anscheinent nicht, dass der Anweisungsblock niemals ausgeführt wird, da du zaehler mit 0 initialisierst und dann direkt in der nächsten Zeile zaehler auf > 2 prüfst. Wie bitte soll denn dann jemals der Anweisungsblock ausgeführt werden.

Edit:
Ich war mal wieder zu langsam...

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way


Dieser Beitrag wurde am 17.01.2005 um 17:17 von HammerBlade bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
17.01.2005, 17:20
sw_a_t



Quellcode:Do while zaehler > 2 = "Mach solange bis die variable "zaehler" den Wert 2 überschreitet"

@ Hammer : Na der soll bei 0 anfangen und dann prüfen ob 0 größer als 2 ist. wenn das nicht der fall ist wird zu 0 , 1 addiert und er startet den anweisungsblock.Wenn der anweisungsblock fertig is fängt schleife neu an. er prüft ob 1 größer als 2 is und addiert 1. immer so weiter... bis zaehler den wert 2 überschreitet. dann wird die schleife gestoppt und gleichzeitig wird der button1 unbrauchbar

--

sw_a_t heißt jetzt CPoly !

Medieval Battles - Para Bella Crudelia


Dieser Beitrag wurde am 17.01.2005 um 17:20 von sw_a_t bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
17.01.2005, 17:47
TheTinySteini



Zitat:
"Mach solange bis die variable "zaehler" den Wert 2 überschreitet"
Nein. "do while" heißt: Tue etwas _solange_ der Ausdruck danach wahr ist. Also hier: Schleife, solange Zähler > 2 ist. Das ist genau das, was du _nicht_ haben willst. Du brauchst nen "do until" - das ist: tue etwas _bis_ der Ausdruck wahr ist.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
008
17.01.2005, 18:06
HammerBlade



Ne, TheTinySteini das mit dem do...while stimmt wie er sagt:

Quellcode:do
    /*nix*/
while zaehler > 2
Aber sw_a_t's Code ist trotzdem Murks. Er verwendet das do...while als Sprungmarke für das Loop (wenn das überhaupt geht), aber das finde ich komisch. Ich würd das so machen:

In VB (ich kenn mich mit der Syntax nicht so aus) müsste das dann imo so sein:

Quellcode:zaehler = 0

While True
    If zaehler > 2 Then
        Button1.Enabled = False
        Exit While
    Else
        zaehler += 1
        [Anweisungsblock]
    End If
End While
In C++ würde ich das so machen:

Quellcode:int zaehler = 0;

while(true)
{
    if(zaehler > 2)
    {
        Button1.Enabled = false;
        break;
    }
    else
    {
        zaehler += 1;
        [Anweisungsblock]
    }
}
Besser wäre natürlich eine vernünftige for-Scheife (C++):

Quellcode:for(int zaehler = 0; zaehler <= 2; zaehler++)
{
    [Anweisungsblock]
}

Button1.Enabled = false;
Edit1:
Ah... jetzt hab ich sw_a_t's komischen Code verstanden. Aber der macht trotzdem nicht das was er willst. Lies mal die >Grundlagen über Schleifen in VB<.

Edit2:
So weit ich das sehe muss du While durch Until ersetzen:
Quellcode:zaehler = 0

Do Until zaehler > 2
    If zaehler > 2 Then
        Button1.Enabled = False
        Exit Do
    Else
        zaehler = zaehler + 1
        [Anweisungsblock]
    End If
Loop
Aber ich bin immer noch für die for-Scheife:

Quellcode:For zaehler = 0 To 2 Step 1
    [Anweisungsblock]
Next zaehler

Button1.Enabled = False

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way


Dieser Beitrag wurde am 17.01.2005 um 18:26 von HammerBlade bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
17.01.2005, 18:25
sw_a_t



Danke Hammer und die anderen. Aber Hammer.....ich hab die obere While schleife kopiert und benutzt.....Button geht nur 1mal! und nich 3.
falls du nich genau verstanden hast was ich wollte :
der button soll 3 mal funzen und bei jedem klick soll der anweisungsblock neu durchgefürt werden(ist ein zufallsgenerator für würfel(kniffel = max 3mal würfeln pro zug))

Edit : auch mit der for schleife gehts nur 1 mal

--

sw_a_t heißt jetzt CPoly !

Medieval Battles - Para Bella Crudelia


Dieser Beitrag wurde am 17.01.2005 um 18:32 von sw_a_t bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
17.01.2005, 18:40
HammerBlade



Dann ist dein Code aber wirklich Murks. Das muss dann so in der Art sein:

Quellcode:zaehler = 3 // globale Variable, darf nicht im Block von button1.Click definiert werden

button1.Click: // Einsprungpunkt, wenn Button1 geklickt wird
    If zaehler > 0 Then
        [Anweisungsblock]
        zaehler = zaehler - 1
    Else
        button1.Enabled = False
    End If
// bedeutet: Alles was auf // in der Zeile folgt ist Kommentar.

Wie gesagt ich kenn mich mit VB eigentlich nicht aus, deshalb weiss ich nicht 100%ig ob die Syntax richtig ist. Aber die Funktion des Codes ist richtig.

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way


Dieser Beitrag wurde am 17.01.2005 um 18:41 von HammerBlade bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
17.01.2005, 18:57
sw_a_t



DANKE!!! man bin ich erleichtert. ich hab das jetzt so gemacht das er anstatt wie bei dir 1 abzieht eins dazu rechnet und das startwert 0 ist , weil er am rand noch anzeigt wie oft man schon gewürfelt hat!!! endlich gehts. ich wär net auf die idee gekommen das ohne schleife einfach so zu machen obwohl es logischerweise so ist!!! DANKE allle! bis zu meiner nächsten volligen anfänger frage!!!

--

sw_a_t heißt jetzt CPoly !

Medieval Battles - Para Bella Crudelia


Dieser Beitrag wurde am 17.01.2005 um 18:57 von sw_a_t bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche