Kezdőoldal » Számítástechnika » Programozás » VB. NET, Miért szál el OutOfRa...

VB. NET, Miért szál el OutOfRange exceptionnal az alábbi kód?

Figyelt kérdés

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



2013. szept. 18. 10:53
 1/6 anonim ***** válasza:

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.

2013. szept. 18. 11:30
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

#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. :)

2013. szept. 18. 11:37
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

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. :/

2013. szept. 18. 11:40
 4/6 A kérdező kommentje:

Ja és itt szál el:


int(L) = ToInt32(Floor(Floor(temp) / 4))


L = 70 -el

2013. szept. 18. 11:42
 5/6 anonim ***** válasza:

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.

2013. szept. 18. 11:47
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:

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.

2013. szept. 18. 12:05

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!