Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB.NET] Errore visual basic assurdo

    Ciao,
    ragazzi da 1 ora cerco di risolvere un problema assurdo..

    questo è il codice:
    codice:
    Private Sub btnTemperatureMax_Click(sender As Object, e As EventArgs) Handles btnTemperatureMax.Click
            Dim temperatureMax As Single
            Dim indice As Integer
    
    
            temperatureMax = 0
    
    
            If n > 0 Then
                For Me.i = 0 To temperatureCityList.Count - 1
                    If temperatureCityList(i) > temperatureMax Then
                        temperatureMax = temperatureCityList(i)
                        indice = i
                    End If
                Next
                visualizza(indice)
            End If
        End Sub
    
    
        Private Sub btnTemperatureMin_Click(sender As Object, e As EventArgs) Handles btnTemperatureMin.Click
            Dim temperatureMin As Single
            Dim indice As Integer
    
    
            temperatureMin = 1000
    
    
            If n > 0 Then
                For Me.i = 0 To temperatureCityList.Count - 1
                    If temperatureCityList(i) <= temperatureMin Then
                        temperatureMin = temperatureCityList(i)
                        indice = i
                    End If
                Next
                visualizza(indice)
            End If
        End Sub

    Ho fatto svariati test per vedere, di fatto, dove si interrompeva il codice.. ma in modo assurdo il tasto relativo al calcolare la temperatura massima funziona, mentre quello relativo alla temperatura minima non funziona! Il codice è esattamente uguale..

    Nota da aggiungere è che stranamente quello per la temperatura minima funziona solo se nei vettori delle temperature delle liste metto dei valori minori di 0 tipo temperatura -1 o -2 ecc.

    Spero di poter ricevere aiuto, grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mi sembra che in quello che hai mostrato non ci siano errori. Posta tutto il codice che si possa copiare e incollare per provarlo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    che vuol dire "non funziona"?

  4. #4
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Mi sembra che in quello che hai mostrato non ci siano errori. Posta tutto il codice che si possa copiare e incollare per provarlo.
    Il codice completo:
    codice:
    Public Class Form1
    
    
        Dim i, n As Integer
    
    
        Dim nameCity, nameCityList() As String
    
    
        Dim temperatureCity, temperatureCityList(), populationCity, populationCityList() As Single
    
    
        Private Sub btnCaricamento_Click(sender As Object, e As EventArgs) Handles btnCaricamento.Click
    
    
            n = Val(InputBox("Inserisci il numero delle città da caricare:", "Caricamento dati"))
    
    
            ReDim nameCityList(n), temperatureCityList(n), populationCityList(n)
    
    
            For Me.i = 0 To n - 1
                nameCity = InputBox("Inserisci il nome della città:", "Caricamento dati")
                nameCityList(n) = nameCity
    
    
                temperatureCity = Val(InputBox("Inserisci la temperatura minima della città alle ore 23:00", "Caricamento dati"))
                temperatureCityList(n) = temperatureCity
    
    
                populationCity = Val(InputBox("Inserisci la popolazione della città:", "Caricamento dati"))
                populationCityList(n) = populationCity
            Next
        End Sub
    
    
        Private Sub btnTemperatureMax_Click(sender As Object, e As EventArgs) Handles btnTemperatureMax.Click
            Dim temperatureMax As Single
            Dim indice As Integer
    
    
            temperatureMax = 0
    
    
            If n > 0 Then
                For Me.i = 0 To temperatureCityList.Count - 1
                    If temperatureCityList(i) > temperatureMax Then
                        temperatureMax = temperatureCityList(i)
                        indice = i
                    End If
                Next
                visualizza(indice)
            End If
        End Sub
    
    
        Private Sub btnTemperatureMin_Click(sender As Object, e As EventArgs) Handles btnTemperatureMin.Click
            Dim temperatureMin As Single
            Dim indice As Integer
    
    
            temperatureMin = 1000
    
    
            If n > 0 Then
                For Me.i = 0 To temperatureCityList.Count - 1
                    If temperatureCityList(i) <= temperatureMin Then
                        temperatureMin = temperatureCityList(i)
                        indice = i
                    End If
                Next
                visualizza(indice)
            End If
        End Sub
    
    
        Private Sub visualizza(indice As Integer)
            lstVisualizza.Items.Clear()
            lstVisualizza.Items.Add(("Città: " + nameCityList(indice)).ToString())
            lstVisualizza.Items.Add(("Temperatura: " & temperatureCityList(indice)).ToString())
            lstVisualizza.Items.Add(("Popolazione: " & populationCityList(indice)).ToString())
        End Sub
    
    
        
    End Class
    j633f9.jpg

    Praticamente, io cerco la temperatura più alta (o più bassa) nella lista delle temperature e mi salvo l'indice di quella più alta o più bassa, poi chiamo il metodo Visualizza passandogli l'indice e, tramite quello, sulla listbox visualizzo i dati relativi alla città con le informazioni memorizzate nel vettore per mezzo dell'indice.

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    che vuol dire "non funziona"?

    ho risposto in modo generico perchè non ho capito proprio il perchè.. in teoria, nel ciclo FOR malfunzionante (temperatura minima), qualcosa si interrompe e la variabile indice, che poi è determinante perchè rappresenta l'indice di riferimento ai dati memorizzati nei vettori, rimane 0 e viene passata al metodo Visualizza che poi mi visualizza valori nulli (stringa vuota per il nome, 0 per temperatura e 0 per popolazione)

    è un problema logico dato dall'operatore "Minore", infatti, anche nella popolazione, se sostituisco il segno maggiore con quello minore mi da lo stesso errore che mi da con la temperatura minima, solo che, ripercorrendo il flusso del codice, non vedo proprio niente di errato.

    Di fatto sorgono altri problemi.. se inserisco -1 come temperatura il ciclo della temperatura massima nn viene eseguito stranamente..

    La situazione è la seguente:

    Dove IF temperatura > temperaturaMAX:
    Se temperatura è 0 o maggiore di 0 funziona e mi resistuisce il valore, se è -1 o inferiore, mi restituisce valori 0 e stringa vuota.

    stessa cosa per popolazione, mentre in maniera inversa

    Dove IF temperature < temperaturaMIN:
    Se temperatura è 0 o maggiore di 0 mi restituisce stringa vuota e temperature 0 (valori nulli), mentre se è -1 o inferiore mi restituisce correttamente i valori..

    Non capisco che problema ci sia.. mi sto davvero innervosendo
    Ultima modifica di RuggeriExtreme; 05-10-2013 a 01:27

  6. #6
    è sbagliato il ciclo di caricamento - controlla l'indice

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    è sbagliato il ciclo di caricamento - controlla l'indice

    grazie, corretto, in ogni caso, l'errore stranamente rimane quello..

    codice:
    n = Val(InputBox("Inserisci il numero delle città da caricare:", "Caricamento dati"))
    
    
            ReDim nameCityList(n), temperatureCityList(n), populationCityList(n)
    
    
            For Me.i = 0 To n - 1
                nameCity = InputBox("Inserisci il nome della città:", "Caricamento dati")
                nameCityList(i) = nameCity
    
    
                temperatureCity = Val(InputBox("Inserisci la temperatura minima della città alle ore 23:00", "Caricamento dati"))
                temperatureCityList(i) = temperatureCity
    
    
                populationCity = Val(InputBox("Inserisci la popolazione della città:", "Caricamento dati"))
                populationCityList(i) = populationCity
            Next
    Ho eseguito un ulteriore test e ho stampato a video con un ciclo for tutte le temperature presenti:
    codice:
    For Me.i = 0 To (temperatureCityList.Count - 1)
                    lstVisualizza.Items.Add(temperatureCityList(i))
                Next
    se io nella fase di caricamento inserisco solo 1 città, mi da 2 valori, se ne inserisco 2, me ne da 3.. è come se caricasse nel vettore un dato in più con valore 0, quindi, se ad esempio inserisco 2 valori:
    Città: 1
    Temperatura: 1
    Popolazione: 1

    -

    Città: 2
    Temperatura: 2
    Popolazione: 2

    Quello che mi aspetto di vedere è questo:
    1
    2

    Mentre quello che effettivamente stampa è questo:
    1
    2
    0

    Perchè? Grazie anticipatamente


    Ho risolto tutto sistemando questa semplice riga:
    ReDim nameCityList(n - 1), temperatureCityList(n - 1), populationCityList(n - 1)

    Anche se, sinceramente, non vedo il motivo di una cosa del genere..
    Se n = 2 (2 dati da inserire), io di fatto, con il ReDim, non sto indicando QUANTI dati inserire? Non sto dando un indice massimo, solo la lunghezza del vettore. Quindi, che senso ha, se n = 2, ReDim variabile(1)?

    Probabilmente funziona indicandolo come n-1 perchè, di fatto, viene inizializzato il valore fino a indice indicato quindi:
    variabile(0)
    variabile(1)
    variabile(2)
    se n = 2..

    mentre se n = 1
    variabile(0)
    variabile(1)

    che effettivamente è sbagliato.
    mentre se n = 2 ma variabile(n-1)
    variabile(0)
    variabile(1)

    ed è corretto.. ringrazio anticipatamente tutti.
    Immagini allegate Immagini allegate
    Ultima modifica di RuggeriExtreme; 05-10-2013 a 11:48

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se indichi 2 e fai la Redim vengono predisposti 3 elementi (con indice da 0 a 2).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.