Fallito en Visual Basic.Net 2008

Namaris

Hola,

como algunos de aqui ya saben estoy haciendo un curso de programacion .net y hoy desde hace unos dias estoy trabao en un ejercicio, os comento:

-El ejercicio es del tema de clases y objetos. Lo que me piden es que se visualize en pantalla el algunos datos de un empleado, exigen lo siguiente:

-un nombre
-un departamento
-una categoria
-un salario

Tonces lo que yo tengo son dos partes divididas, una clase que almazena los atributos que digo arriba y la otra parte el Sub Main() donde invoco los objetos de dicha clase dandole los valores (Mario, Ventas, Becario, 1200€):

'Atributos
    Private nombre, departamento, categoria As String
    Private salario As Double

 'Metodos para introducir datos

Public Sub New()
End Sub

Public Sub New(ByVal nom As String, ByVal dept As String, ByVal cat As String, ByVal sala As Double)
    LeerNombre(nom)
    LeerDept(dept)
    LeerCat(cat)
    LeerSala(sala)
End Sub

Public Sub LeerNombre(ByVal nom As String)
    If nom.Length = 0 Then
        System.Console.WriteLine("Error: cadena vacía")
    Else
        nombre = nom
    End If
End Sub

Public Sub LeerDept(ByVal dept As String)
    If dept.Length = 0 Then
        System.Console.WriteLine("Error: cadena vacía")
    Else
        departamento = dept
    End If
End Sub

Public Sub LeerCat(ByVal cat As String)
    If cat.Length = 0 Then
        System.Console.WriteLine("Error: cadena vacía")
    Else
        categoria = cat
    End If
End Sub

Public Sub LeerSala(ByVal sala As Double)
    If sala <= 0 Then
        System.Console.WriteLine("Error: salario negativo")
    Else
        salario = sala
    End If
End Sub

Public Function DevolverNombre() As String
    Return nombre
End Function
Public Function DevolverDepartamento() As String
    Return departamento
End Function
Public Function DevolverCategoria() As String
    Return categoria
End Function
Public Function DevolverSala() As Double
    Return salario
End Function

End Class

Y el modulo principal:

Module Triger

Sub Main()
    Dim objeto01 As Empleado = New Empleado()
    objeto01.LeerNombre("Xavi Alonso")
    objeto01.LeerDept("Ventas")
    objeto01.LeerCat("Becario")
    objeto01.LeerSala(-10)

    Dim objeto02 As Empleado = New Empleado()
    objeto02.LeerNombre("Leo Messi")
    objeto02.LeerDept("Ventas")
    objeto02.LeerCat("Becario")
    objeto02.LeerSala(555)

    System.Console.WriteLine(objeto01.DevolverNombre())       'DevolverNombre es un mensaje que llama al metodo LeerNombre (abajo igual)
    System.Console.WriteLine(objeto01.DevolverDepartamento())
    System.Console.WriteLine(objeto01.DevolverCategoria())
    System.Console.WriteLine(objeto01.DevolverSala())
End Sub

End Module

Lo que ocurre es que en la parte donde debe decirme el salario, cuando le doy un valor negativo en vez de darme un mensaje de error como describo en el codigo me da 0, si es positivo no hay problema, lo muestra y Ok pero si es negativo FAIL :(

Perdon por el toston xD

Soltrac

Pq el console.writeline lo tienes en el leer no en el mostrar.

Visual basic guarda las variables "double" como 0 por defecto, por lo q en tu caso como a salario no se le asigna nada, al mostrar salario muestra un 0.

Te pasaría lo mismo si introdujeras strings vacíos en los otros casos. Visual Basic tb guarda las variables string como vacías.

Una solución posible es q pongas los console.writeline con los errores en los métodos Devolver en vez de Leer (existen otras soluciones, pero son más complejas, ya las verás cuando llegues al apartado de "excepciones")

Namaris

#2 No lo entiendo, en otros ejercicios parecidos que hicimos no me enseñaron nada de meter el if de error en la Function, solamente en el Sub, aparte no sabria hacerlo porque en el Function solo hemos visto la llamada return.

Soltrac

Tío me encantaría explicártelo mejor, pero es q no puedo. Pon el código paso a paso y te darás cuenta tu solo.

Si lo q quieres es q el programa se pare cuando salga el mensaje de error tienes q usar algo como Environment.Exit(0) después del cout.

kas

En la comparacion de salario con 0, cambia 0 por 0.0.

Si comparas un integer (0) con un double (sala) , solo te coje la parte entera.

Usuarios habituales

  • kas
  • Soltrac
  • Namaris