getValue(int x, int y)

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    getValue(int x, int y)

    Hallo :) ,

    ich hab ein zweidimensionales Array in einer Klasse und möchte die Werte, die in diesem Array stehen, gerne übergeben.
    Ich hatte das ganze bereits in Java programmiert, aber jetzt muss es in Visual Basic übertragen werden.

    Der Code in Java ist ganz einfach:

    Quellcode

    1. public int getValue(int x, int y) {
    2. return a[x][y];
    3. }


    Leider bekomme ich das irgendwie nicht so richtig auf VB übertragen. Meine ersten Anfänge waren:

    Quellcode

    1. Public ReadOnly Property getValue(x As Integer, y As Integer) As Integer(,)
    2. Get
    3. Return a(x, y)
    4. End Get
    5. End Property


    -> Klappt leider nicht :D

    Hat jemand Tipps? :D
    8|

    VB.NET-Quellcode

    1. Public ReadOnly Property getValue(x As Integer, y As Integer) As Integer '(,) -> Muss als Integer nicht als Integer-Array zurückgegeben werden
    2. Get
    3. Return a(x, y)
    4. End Get
    5. End Property


    Vorausgesetzt das "a"-Array ist ein Integer-Array

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    frautomke schrieb:

    ich hab ein zweidimensionales Array in einer Klasse
    Dazu müsste man die deklaration des 2D-Arrays sehen.
    Weil es gibt 2 Arten von 2D-Arrays: jagged Array oder 2D-Array.
    Dein Java-PseudoCode deutet auf jagged Array hin, und damit geht @fichz Lösung nicht.

    Edit: Ah, ok - dann wars wohl doch kein jagged Array.
    @horstfh Es wurde nach dem Inhalt der Koordinaten, nicht aber nach den Koordinaten selbst gefragt.
    @frautomke Wie genau ist denn Dein Array deklariert?
    Es gibt da unter .NET zwei Möglichkeiten:

    VB.NET-Quellcode

    1. Dim a1 As Integer(,) = New Integer(10, 10) {}
    2. Dim a2 As Integer()() = New Integer(10)() {}
    Dein Java-Code ist die eine, Dein VB-Code die andere Variante.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ErfinderDesRades schrieb:

    Dein Java-PseudoCode deutet auf jagged Array hin, und damit geht @fichz Lösung nicht.


    Wieso funktioniert die Lösung bei einem Jagged Array nicht? Egal welcher Arraytyp es ist, ein Aufruf der Form a(x, y) hat doch immer einen int als Rückgabewert.

    @TheVBTutorialsVB @ErfinderDesRades @RodFromGermany

    Hier einmal mein gesamter Code - er stellt Wetterdaten visuell dar und je häufiger eine Temperatur bei einer bestimmten Feuchtigkeit in einem Jahr (stundenweise) vorkam, umso dunkler der Punkt. :D ( hier würde ich ein Bild anfügen, nur leider weiß ich nicht wie) :D

    Er ist wahrscheinlich super hässlich :D


    Spoiler anzeigen

    Imports System
    Imports System.IO
    Imports System.Collections

    Public Class Data
    Dim a(100, 100) As Integer
    Private Sub Data_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Using dlg As New OpenFileDialog()
    dlg.Filter = "Dat Files|*.dat|All Files|*.*"
    If dlg.ShowDialog() <> DialogResult.OK Then
    Return
    End If
    Dim found = False

    Dim tmpi2 As Double
    Dim tmpi As Double
    Dim u As String
    Dim q As String

    Dim komma As String = ","
    Dim punkt As String = "."

    Dim n As Integer
    Dim m As Integer

    'Zeilen einlesen und Werte in Array laden
    For Each line In IO.File.ReadLines(dlg.FileName)
    If line IsNot "" Then
    Dim Values() = line.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)

    If line.StartsWith("***") Then
    found = True
    Continue For
    End If
    If found = True Then

    u = Values(5)
    u = u.Replace(punkt, komma)
    tmpi = Convert.ToDouble(u)

    q = Values(11)
    q = q.Replace(punkt, komma)
    tmpi2 = Convert.ToDouble(q)

    tmpi = Math.Round(tmpi)
    tmpi2 = Math.Round(tmpi2)

    n = Integer.Parse(50 + tmpi)
    m = Integer.Parse(tmpi2)

    a(n, m) = a(n, m) + 1

    End If
    End If
    Next

    End Using
    End Sub

    Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    PictureBox1.BackColor = Color.White
    Static Dim X_AXIS_FIRST_X_COORD As Integer = 50
    Static Dim X_AXIS_SECOND_X_COORD As Integer = 900
    Static Dim X_AXIS_Y_COORD As Integer = 900

    Static Dim Y_AXIS_FIRST_Y_COORD As Integer = 50
    Static Dim Y_AXIS_SECOND_Y_COORD As Integer = 900
    Static Dim Y_AXIS_X_COORD As Integer = 50

    Static Dim FIRST_LENGHT As Integer = 10
    Static Dim SECOND_LENGHT As Integer = 5

    Static Dim ORIGIN_COORDINATE_LENGHT As Integer = 0

    Static Dim dotsize As Integer = 7

    Static Dim AXIS_STRING_DISTANCE As Integer = 25

    Dim xCoordNumbers As Integer = 101
    Dim yCoordNumbers As Integer = 101

    Dim xLength As Integer = (X_AXIS_SECOND_X_COORD - X_AXIS_FIRST_X_COORD) / xCoordNumbers
    Dim yLength As Integer = (Y_AXIS_SECOND_Y_COORD - Y_AXIS_FIRST_Y_COORD) / yCoordNumbers

    Dim count As Integer = 0
    Dim count2 As Integer = 0

    Dim px As Integer = 0
    Dim py As Integer = 0

    'x und y Achse
    e.Graphics.DrawLine(Pens.Black, X_AXIS_FIRST_X_COORD, X_AXIS_Y_COORD,
    X_AXIS_SECOND_X_COORD, X_AXIS_Y_COORD)

    e.Graphics.DrawLine(Pens.Black, Y_AXIS_X_COORD, Y_AXIS_FIRST_Y_COORD,
    Y_AXIS_X_COORD, Y_AXIS_SECOND_Y_COORD)

    ' x und y Pfeile an den Enden der Koordinaten
    e.Graphics.DrawLine(Pens.Black, X_AXIS_SECOND_X_COORD - FIRST_LENGHT,
    X_AXIS_Y_COORD - SECOND_LENGHT,
    X_AXIS_SECOND_X_COORD, X_AXIS_Y_COORD)

    e.Graphics.DrawLine(Pens.Black, X_AXIS_SECOND_X_COORD - FIRST_LENGHT,
    X_AXIS_Y_COORD + SECOND_LENGHT,
    X_AXIS_SECOND_X_COORD, X_AXIS_Y_COORD)

    e.Graphics.DrawLine(Pens.Black, Y_AXIS_X_COORD - SECOND_LENGHT,
    Y_AXIS_FIRST_Y_COORD + FIRST_LENGHT,
    Y_AXIS_X_COORD, Y_AXIS_FIRST_Y_COORD)
    e.Graphics.DrawLine(Pens.Black, Y_AXIS_X_COORD + SECOND_LENGHT,
    Y_AXIS_FIRST_Y_COORD + FIRST_LENGHT,
    Y_AXIS_X_COORD, Y_AXIS_FIRST_Y_COORD)

    'Beschriftung
    e.Graphics.DrawString("%", New Font("Arial", 10, FontStyle.Regular), Brushes.Black, New PointF((X_AXIS_SECOND_X_COORD - (AXIS_STRING_DISTANCE - 15) / 2), (X_AXIS_Y_COORD + (AXIS_STRING_DISTANCE - 20))))
    e.Graphics.DrawString("°C", New Font("Arial", 10, FontStyle.Regular), Brushes.Black, New PointF((Y_AXIS_X_COORD - AXIS_STRING_DISTANCE), (Y_AXIS_FIRST_Y_COORD + (AXIS_STRING_DISTANCE - 25) / 2)))
    e.Graphics.DrawString("(-50/0)", New Font("Arial", 10, FontStyle.Regular), Brushes.Black, New PointF((X_AXIS_FIRST_X_COORD - (AXIS_STRING_DISTANCE + 10)), (Y_AXIS_SECOND_Y_COORD + (AXIS_STRING_DISTANCE - 20))))

    'Nummerierung
    For i = 1 To xCoordNumbers Step 1
    count = count + 1
    If (count Mod 5) = 0 Then
    e.Graphics.DrawString(i, New Font("Arial", 10, FontStyle.Regular),
    Brushes.Black,
    New PointF((X_AXIS_FIRST_X_COORD + (i * xLength) - 3),
    (X_AXIS_Y_COORD + (AXIS_STRING_DISTANCE - 5))))
    End If
    e.Graphics.DrawLine(Pens.Black, X_AXIS_FIRST_X_COORD + (i * xLength),
    X_AXIS_Y_COORD - SECOND_LENGHT,
    X_AXIS_FIRST_X_COORD + (i * xLength),
    X_AXIS_Y_COORD + SECOND_LENGHT)
    Next

    For i = 1 To yCoordNumbers Step 1
    count2 = count2 + 1
    If (count2 Mod 5) = 0 Then
    e.Graphics.DrawString(i - 50, New Font("Arial", 10, FontStyle.Regular),
    Brushes.Black,
    New PointF((Y_AXIS_X_COORD - (AXIS_STRING_DISTANCE + 10)),
    ((Y_AXIS_SECOND_Y_COORD - 15) - (i * yLength))))
    End If
    e.Graphics.DrawLine(Pens.Black, Y_AXIS_X_COORD - SECOND_LENGHT,
    Y_AXIS_SECOND_Y_COORD - (i * yLength),
    Y_AXIS_X_COORD + SECOND_LENGHT,
    Y_AXIS_SECOND_Y_COORD - (i * yLength))
    Next

    'Daten im Koodinatensystem darstellen
    Dim rect As New Rectangle

    For i = 0 To 100 Step 1
    For j = 0 To 100 Step 1
    Dim val As Integer
    val = a(i, j)
    If val <> 0 Then
    If val <= 1 Then

    If i >= 50 Then
    Dim tmp As Integer = i - 50
    tmp = 50 - tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    ElseIf i < 50 Then
    Dim tmp As Integer = 50 - i
    tmp = 50 + tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    End If
    Dim Brush As New SolidBrush(Color.PowderBlue)
    e.Graphics.FillRectangle(Brush, rect)
    End If
    If val > 2 And val <= 10 Then

    If i >= 50 Then
    Dim tmp As Integer = i - 50
    tmp = 50 - tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    ElseIf i < 50 Then
    Dim tmp As Integer = 50 - i
    tmp = 50 + tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    End If
    Dim Brush As New SolidBrush(Color.MediumTurquoise)
    e.Graphics.FillRectangle(Brush, rect)
    End If
    If val > 10 And val <= 20 Then

    If i >= 50 Then
    Dim tmp As Integer = i - 50
    tmp = 50 - tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    ElseIf i < 50 Then
    Dim tmp As Integer = 50 - i
    tmp = 50 + tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    End If
    Dim Brush As New SolidBrush(Color.DarkTurquoise)
    e.Graphics.FillRectangle(Brush, rect)
    End If
    If val > 20 And val <= 30 Then

    If i >= 50 Then
    Dim tmp As Integer = i - 50
    tmp = 50 - tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    ElseIf i < 50 Then
    Dim tmp As Integer = 50 - i
    tmp = 50 + tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    End If
    Dim Brush As New SolidBrush(Color.LightSeaGreen)
    e.Graphics.FillRectangle(Brush, rect)
    End If
    If val > 30 And val <= 40 Then

    If i >= 50 Then
    Dim tmp As Integer = i - 50
    tmp = 50 - tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    ElseIf i < 50 Then
    Dim tmp As Integer = 50 - i
    tmp = 50 + tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    End If
    Dim Brush As New SolidBrush(Color.Teal)
    e.Graphics.FillRectangle(Brush, rect)
    End If
    If val > 40 Then

    If i >= 50 Then
    Dim tmp As Integer = i - 50
    tmp = 50 - tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    ElseIf i < 50 Then
    Dim tmp As Integer = 50 - i
    tmp = 50 + tmp
    rect = New Rectangle((800 / 100 * j) + 50, (800 / 100) * tmp + 75, dotsize, dotsize)
    End If
    Dim Brush As New SolidBrush(Color.DarkSlateGray)
    e.Graphics.FillRectangle(Brush, rect)
    End If
    End If
    Next
    Next

    End Sub
    End Class


    Bilder
    • Unbenannt.png

      30,75 kB, 921×938, 158 mal angesehen
    8|

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „frautomke“ ()

    frautomke schrieb:

    hier würde ich ein Bild anfügen
    Nichts leichter als das:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    Und:
    Editiere Deinen Post, markiere den Quellcode außerhalb von [vbnet]...[/ vbnet] und mach nen Spoiler drum (das durchgestrichene Auge).
    ====

    VB.NET-Quellcode

    1. If i >= 50 Then
    2. ' ...
    3. ElseIf i < 50 Then
    4. ' ...
    5. End If
    Hier genügt

    VB.NET-Quellcode

    1. If i >= 50 Then
    2. ' ...
    3. Else ' dies hier
    4. ' ...
    5. End If


    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    frautomke schrieb:

    worum
    Um den formatierten Quelltext, damit der Post selbst nicht durch ellenlangen Code unlesbar wird. 8o
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!