VB. NET, Miért szál el OutOfRange exceptionnal az alábbi kód?
Imports System.Console
Imports System.Math
Imports System.Convert
Module Module1
Sub Main()
Dim int(0 To 69) As Integer
Dim err As Boolean = False
int(0) = 0
Dim L As Integer = 1
Dim bool As Boolean = False
ForegroundColor = ConsoleColor.Red
WriteLine(int.Length)
ForegroundColor = ConsoleColor.White
While (Not err) Or (Not bool)
Try
Dim temp As Decimal
temp = L + 200 * (2 ^ (L / 3))
int(L) = ToInt32(Floor(Floor(temp) / 4))
If (L = 1) Then
int(L) = 1 + (int(L - 1) + int(L))
Else
int(L) = int(L - 1) + int(L)
End If
WriteLine("int(" & L & ") = " & int(L))
ForegroundColor = ConsoleColor.Green
WriteLine("int(" & L & ") - int(" & L - 1 & ") = " & int(L) - int(L - 1))
ForegroundColor = ConsoleColor.White
L += 1
bool = L < int.Length
Catch ex As OverflowException
err = True
Write("L: " & L)
WriteLine("; HIBA: " & ex.Message)
End Try
End While
ReadKey(True)
End Sub
End Module
Hú de zavaró, hogy "int" és "bool" változóneveket adsz... :D
Amúgy leírhatnád esetleg, melyik sorban száll el, nem kéne bogarásznunk... egyébként meg ha OutOfRange, akkor out of range, kimásztál a tartományból valahol. Gondolom a 0..69-ből.
#1 vagyok, átbogarásztam, de nem látom hol van a hiba. 1-ről indítod az indexet (L) és ügyelsz a végére és mindig csak L-1-et használsz, nemtom hol lépheted át a határokat.
Én azt javaslom minden művelethez tegyél egy kiírást, hogy most épp mennyi az L értéke, és persze írd ki azt is, hogy melyik műveletnél. És így akkor megtalálod. :)
Megvolt, 1 órát debuggoltam, kijegyzeteltem, átnéztem.. :/
Elvileg, "While (Not err) Or (Not bool) " kiszűri, hogy ne lépjen ki a tömb határán kívülre a "bool = L < int.Length " sorral. Itt annyi történik, hogy a bool nevű változó hamis lesz, de a ciklus mintha figyelmen kívül hagyná és megy tovább. :/
Ja és itt szál el:
int(L) = ToInt32(Floor(Floor(temp) / 4))
L = 70 -el
Ah, akkor tudom.
Nem Or kell, hanem And. :) Gondold végig.
Or-ral:
Amíg (nincs hiba) vagy (nem lépett ki a tömbből)...
Ez megelégszik az egyik feltétellel is, azaz ha nincs hiba, máris továbblép a ciklusmagra.
And-del pedig mindkettőt megvizsgálja és csak akkor megy a ciklusmagra, ha mindkettő hamis.
Basszus.... Inkább nem minősítem magam. xD Enyhén követtem el amatőr hibát. Na mindegy is. Nagyon köszönöm, hogy rávilágítottál. Az 'Or' pedig 'And' akart lenni, csak egy előző programom átírásából született (programozó a lusta állatfaj, előre megírt példaprogramjaim vannak, hogy ne keljen annyit gépelni), és ott egy 'Or' kellett. -.-"
Viszont, némi változtatásokat kellett alkalmazni, mint például, a "bool" nevű változó alapértelmezetten "igaz" értéket vesz fel, valamint a ciklus feltételvizsgálata nem "(Not bool)" hanem "(bool)", érthető okokból.
Még egyszer köszönöm a választ.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!