Du bist nicht eingeloggt.

Login

Pass

Registrieren

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 ^^
  [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2025 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -