Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Luokkataulukon alkioon vaikuttaminen arvon perusteella...

novice [29.02.2012 08:10:04]

#

Module Metsänhoito_module
    Dim SysiMetsä As New Metsä_class

    Sub KaadaPuut(ByVal Laji As String)
        For i As Integer = 0 To SysiMetsä.Puut.Length - 1
            If SysiMetsä.Puut(i).Laji = Laji Then
                SysiMetsä.Puut(i).Määrä = 0
                Exit For
            End If
        Next
    End Sub
End Module




Public Class Metsä_class
    Public Puut(-1) As Puut_class

    Public Class Puut_class
        Public Laji As String
        Public Määrä As Integer
    End Class

    Public Sub LisääUusiPuu(ByVal Laji As String)
        ReDim Preserve Puut(Puut.Length)
        Puut(Puut.Length - 1).Laji = Laji
    End Sub
End Class

Millainen koodi luokassa pitäisi olla jotta saan kaadettua kaikki esim. männyt alla olevalla aliohjelmalla?

Sub KaadaPuut(ByVal Laji As String)
        SysiMetsä.Puut(Laji).Määrä = 0
End Sub

Haluaisin koodissaani vaikuttaa puiden määrään molemmilla tavoilla; taulukon indexi numerolla ja puun lajilla.

SysiMetsä.Puut("koivu").Määrä = 0
SysiMetsä.Puut(4).Määrä = 0

Synomi [29.02.2012 08:32:35]

#

Jos poistat tuosta KaadaPuut functiosta tuon Exit For, niin eikö sen pitäisi hoitaa homma? Kun sitä kutsutaan KaadaPuut("koivu")

Sub KaadaPuut(ByVal Laji As String)
        For i As Integer = 0 To SysiMetsä.Puut.Length - 1
            If SysiMetsä.Puut(i).Laji = Laji Then
                SysiMetsä.Puut(i).Määrä = 0
            End If
        Next
    End Sub

Eikö tuo määrä pitäisi muuttaa kyllä 'kaadettu' tms. Sais varmaa vähä loogisemman tuosta. Tuo indexillä viittaus sitten toimisi suoraan SysiMetsä.Puut(4).Kaadettu = true

novice [29.02.2012 11:47:15]

#

Tuo koodi on vain keksimäni yksinkertaistettu esimerkki.

Mitään varsinaista ongelmaa ei ole, saan kyllä "kaadettua kaikki puut".

Haluaisin vain sisällyttää luokkaan metodin jolla saan pääohjelmasta kaadettua puita indexinumerolla ja puun lajilla.

SysiMetsä.Puut("koivu").Määrä = 0
'ja
SysiMetsä.Puut(4).Määrä = 0

Tiedän, että Puut() on taulukko johon ei voi viitata muulla kuin indexinumerolla (vai voiko? miten?).


Millainen metodi luokkaan pitäisi koodata jotta voisin kaataa puita em. tavalla?

Grez [29.02.2012 12:16:23]

#

(Konekäännetty c#:sta, jolla mielestäni on kivempi kirjoittaa. Alkuperäinen koodi)

Class Puut
	Private lajit As New Dictionary(Of String, Integer)()
	Private puut As New List(Of Puu)()

	Public Default Property Item(index As Integer) As Puu
		Get
			Return puut(index)
		End Get
		Set
			puut(index) = value
		End Set
	End Property
	Public Default Property Item(laji As String) As Puu
		Get
			Return puut(lajit(laji))
		End Get
		Set
			puut(lajit(laji)) = value
		End Set
	End Property
	Public Function Add(laji As String, puu As Puu) As Integer
		' palauttaa lisätyn puun indeksin
		If lajit.ContainsKey(laji) Then
			Throw New Exception("Laji on jo")
		End If
		puut.Add(puu)
		Dim newIndex As Integer = puut.Count - 1
		lajit(laji) = newIndex
		Return newIndex
	End Function

End Class
Class Puu
	Public Property Laji() As String
		Get
			Return m_Laji
		End Get
		Set
			m_Laji = Value
		End Set
	End Property
	Private m_Laji As String
	Public Property Määrä() As Integer
		Get
			Return m_Määrä
		End Get
		Set
			m_Määrä = Value
		End Set
	End Property
	Private m_Määrä As Integer
End Class

neau33 [29.02.2012 13:09:15]

#

Heippa taas!

Onko QBasic ja Visual Basic -osastosta tulossa C# mainos..?

Grez [29.02.2012 13:26:39]

#

No se on miten sen haluat ottaa. Ajattelin mainita konekäännöksestä siltä varalta, että joku ihmettelee koodin rakennetta.

Oletan myöskin ettei ihan kaikki tiedä, että VB.Net ja C# on käytännössä sama kieli vähän eri näköisenä ja että niitä voi kääntää koneellisesti ristiin. Joskus voi olla helpompi löytää vaikkapa netistä esimerkki toisella kielellä kuin mitä itse käyttää.

novice [29.02.2012 17:24:44]

#

Siinäpä se... Dictionary... kiitti Grez!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta