Community
Szene & News
Locations
Impressum
|
Forum / Bits und Bytes
Ungültige Konvertierung in VB.NET

Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 08.02.2012 um 13:47 Uhr
Zuletzt editiert am: 08.02.2012 um 14:56 Uhr
|
|
Hi,
ich würde gern ein kleines Programm schreiben, das nach folgendem Schema die n-te Zahl berechnet:
Anfangszahl (vom User eingegeben), in diesem Fall 686
1. Zahl: 6^2 + 8^2 + 6^2 = 136
2. Zahl 1^2 + 3^2 + 6^2 = 46
usw.
Dazu nehme ich folgenden Code:
Variablen: zahl, w, ziffern, x1, x2, x3, erg: Integer
z: String
Code:
z = tbox_zahl.Text 'vom User eingegebene Startzahl
w = CInt(tbox_w.Text) 'n, also die wievielte Zahl ausgegeben
'werden soll
While w > 0
x1 = CInt(Mid(z, 1, 1))
x2 = CInt(Mid(z, 2, 1)) '<=
x3 = CInt(Mid(z, 3, 1)) '<=
erg = (x1 * x1) + (x2 * x2) + (x3 * x3) 'Ergebnis eines Durchlaufs
z = CStr(erg)
w = w - 1
End While
MsgBox(CStr(erg)) 'Ergebnis wird nach n Durchläufen
'ausgegeben.
Wenn ich das Programm starte und Testwerte übergebe, wird an den Stellen, die ich im Code mit "<=" markiert habe, ein Fehler aufgezeigt, da die Konvertierung der Zeichenkette in den Typ Integer ungültig ist.
Kann mir vllt. jemand helfen?
|
|
h3mpti - 37
Profi
(offline)
Dabei seit 05.2007
878
Beiträge
|
Geschrieben am: 08.02.2012 um 13:58 Uhr
Zuletzt editiert am: 08.02.2012 um 13:58 Uhr
|
|
findet überhaupt eine Überprüfung auf die String-länge statt? btw.: dein Startindex dürfte bei 0 losgehen, also Mid(z, 0, 1) Mid(z, 1, 1) Mid(z, 2, 1)
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 08.02.2012 um 14:05 Uhr
Zuletzt editiert am: 08.02.2012 um 14:06 Uhr
|
|
Um's etwas abzukürzen, muss die Startzahl dreistellig sein.
Wenn ich etwas mehr Zeit habe dann schreibe ich's noch um, damit eine beliebig lange Zahl benutzt werden kann.
Die Funktion Mid ist 1-basiert, fängt also bei 1 an (hab's auch ausprobiert).
|
|
h3mpti - 37
Profi
(offline)
Dabei seit 05.2007
878
Beiträge
|
Geschrieben am: 08.02.2012 um 14:38 Uhr
|
|
Dein "z" wird doch auch garnicht initialisiert, oder überseh ich da was?
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 08.02.2012 um 14:41 Uhr
|
|
Zitat von h3mpti: Dein "z" wird doch auch garnicht initialisiert, oder überseh ich da was?
Sorry, ich hab da was verwechselt. Hab's jetzt im ersten Post verbessert.
|
|
h3mpti - 37
Profi
(offline)
Dabei seit 05.2007
878
Beiträge
|
Geschrieben am: 08.02.2012 um 14:53 Uhr
|
|
nächstes problem ist, dass du auf t1, t2, t3 gehst, die aber nirgends deklariert werden, nimm dafür x1, x2, x3 und es geht
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 08.02.2012 um 14:56 Uhr
|
|
Zitat von h3mpti: nächstes problem ist, dass du auf t1, t2, t3 gehst, die aber nirgends deklariert werden, nimm dafür x1, x2, x3 und es geht 
Ach scheiße sorry ich hab bevor ich das gepostet hab noch etwas mit versch. Datentypen rumexperimentiert, z.B. Double anstatt Integer genommen.
Aber auch wenn ich da x1 etc. nehme geht's nicht.
|
|
h3mpti - 37
Profi
(offline)
Dabei seit 05.2007
878
Beiträge
|
Geschrieben am: 08.02.2012 um 14:59 Uhr
|
|
sollte für die Zahl 686 und w = 2 funktionieren (tuts zumind. bei mir). Bei w > 2 hast du das Problem der string-länge.
|
|
HugoHiasl
Profi
(offline)
Dabei seit 02.2006
531
Beiträge
|
Geschrieben am: 08.02.2012 um 16:43 Uhr
|
|
VB.Net startet mit dem Index 1. Das stimmt schon.
Solange du 3 stellige Zahlen hast, geht es, dass Du mit Deinem Code erst die 1., dann die 2. und am schluss die 3. Zahl ausliest.
Ich bin überzeugt, dass der Fehler nicht beim 2. sondern beim dritten MId(), also bei Mid(z,3,1) auftritt.
Du versuchst auf eine Zeichenkettenposition zuzugreifen, die es nicht gibt.
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 08.02.2012 um 17:32 Uhr
Zuletzt editiert am: 08.02.2012 um 17:44 Uhr
|
|
Zitat von HugoHiasl: Du versuchst auf eine Zeichenkettenposition zuzugreifen, die es nicht gibt.
Wieso soll es die nicht geben?
Bei 123 wäre das die 3, oder etwa nicht?
Edit: Sorry, ich stand grad auf'm Schlauch xD
Edit2: Funktioniert nach ein paar Abänderungen jetzt mit Zahlen mit 3 oder weniger Stellen. Kann also geclosed werden ^^
|
|
Forum / Bits und Bytes
|