Archief - C# vraag

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ZZ5

Legacy Member
Gegroet,

Ik wil een programmaatje schrijven met een optional value in mijn method

hieronder een uittreksel van een voorbeeld waarbij ik het niet heb kunnen doen(het is nog nooit gelukt eigenlijk.
De manier waarop we het moeten oplossen is zoals hieronder dus gene parsen en(not yet).

DE VRAAG: een optional value krijg je daar string int Voorbeeld(int value1, int value2 =0) te doen dacht ik met als voorwaarde dat enkel de laatste(n) optioneel mogen zijn.
probleem is nu dat dit nooit gaat want in programma krijg ik altijd fout de er meerde overloads zijn. Geen idee en ik zoek al 2 dagen online maar nooit zie ik wat exact het verschil is.

HELP!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ToonSecNaarUms
{
class Program
{
static void Main(string[] args)
{

int seconden;
Console.WriteLine("geef seocnden in");
seconden = Convert.ToInt32(Console.ReadLine());
toonOmzetting(seconden);

}

static void toonOmzetting(int seconden)
{
int uren, minuten, overblijvendeSeconden;
uren = seconden / 3600;
minuten = (seconden - (uren * 3600)) / 60;
overblijvendeSeconden = seconden - (uren * 3600) - (minuten * 60);
Console.WriteLine("omgezet is dit " + uren + " uren"+ ", " + minuten + " minuten en " + overblijvendeSeconden + " seconden");
Console.ReadKey(true);

}
}
}

Krueger

Legacy Member
Het zou moeten werken zoals je zegt, dus door
static void toonOmzetting(int seconden, int test = 0)
te schrijven compileert en werkt het. Ben je zeker dat je aan het compileren bent tegen het .Net framework 4.0 of meer?

ZZ5

Legacy Member
Krueger zei:
Het zou moeten werken zoals je zegt, dus door
static void toonOmzetting(int seconden, int test = 0)
te schrijven compileert en werkt het. Ben je zeker dat je aan het compileren bent tegen het .Net framework 4.0 of meer?

jep. 4.5.50en nog een beetje

ik snap het totaal niet. Zal waarschijnlijk een komma, spaties of iets dommers zijn dat fout staat of.. maar syntax lijkt me aanvaardbaar

als er nog mensen zijn, shoot!

Krueger

Legacy Member
ZZ5 zei:
jep. 4.5.50en nog een beetje

ik snap het totaal niet. Zal waarschijnlijk een komma, spaties of iets dommers zijn dat fout staat of.. maar syntax lijkt me aanvaardbaar

als er nog mensen zijn, shoot!

Zet eens je volledige code hier die niet build anders.

Recipe4hate

Legacy Member
Best in code blok zetten op het forum: leest gemakkelijker

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ToonSecNaarUms
{
    class Program
    {
        static void Main(string[] args)
        {

            int seconden;
            Console.WriteLine("geef seocnden in");
            seconden = Convert.ToInt32(Console.ReadLine()); 
            toonOmzetting(seconden);

        }

        static void toonOmzetting(int seconden)
        {
            int uren, minuten, overblijvendeSeconden;
            uren = seconden / 3600;
            minuten = (seconden - (uren * 3600)) / 60;
            overblijvendeSeconden = seconden - (uren * 3600) - (minuten * 60);
            Console.WriteLine("omgezet is dit " + uren + " uren"+ ", " + minuten + " minuten en " + overblijvendeSeconden + " seconden");
            Console.ReadKey(true);

        }
    }
}

Recipe4hate

Legacy Member
Compileert deze code? Want ik snap niet wat ik nu moet zien.

Post de code met optional params eens, zodat we kunnen kijken waar het misgaat?
Als ik je foutbeschrijving (geef deze ook eens volledig + in het Engels) een beetje begrijp, zou het kunnen dat er meerdere methods met zelfde signatures aanwezig zijn.

ZZ5

Legacy Member
dit werkt uiteraard wel:



Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace voorbeeld_optellen
{
    class Program
    {
        static void Main(string[] args)
        {

            optellenVierGetallen(1,2,3,4);
        }
    
    static void optellenVierGetallen(int getal1, int getal2, int getal3, int getal4=0)
    {
    int som = getal1+getal2+getal3+getal4;
    Console.WriteLine("de som is: " + som);
    Console.ReadKey(true);
    
    
    
    }
    
    
    
    }
}

leerkracht vraagt soms om gewoon variabelen te kiezen en gebruikers geen keuze te geven dus dien ik hier zelfs geen =0 te voorzien maar als ik aan mijn gebruiker de getallen laat invullen dan zeg ik veiligheidshalve:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace voorbeeld_optellen
{
    class Program
    {
        static void Main(string[] args)
        {
            int getal1,getal2, getal3, getal4;
            Console.WriteLine("geef getal in:");
            getal1 = Convert.ToInt32(Console.ReadLine());
            getal2 = Convert.ToInt32(Console.ReadLine());
            getal3 = Convert.ToInt32(Console.ReadLine());
            getal4 = Convert.ToInt32(Console.ReadLine());


            optellenVierGetallen(getal1,getal2,getal3,getal4);
        }
    
    static void optellenVierGetallen(int getal1, int getal2, int getal3, int getal4=0)
    {
    int som = getal1+getal2+getal3+getal4;
    Console.WriteLine("de som is: " + som);
    Console.ReadKey(true);
    
    
    
    }
    
    
    
    }
}

"An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: Input string was not in a correct format."


nu krijg ik echter een prompt wanneer ik getal 4 leeg laat, terwijl ik toch net nul als default parameter heb opgegeven?

uiteraard kan de code performanter maar met hetgeen we tot nu hebben gezien moeten we werken dus...

Alvast bedankt voor de hulp!

Tyfius

Legacy Member
Je krijgt de fout op deze lijn omdat je ze leeg laat:
Code:
getal4 = Convert.ToInt32(Console.ReadLine());

De functie Convert.ToInt32(string value) gooit namelijk een FormatException wanneer:

value does not consist of an optional sign followed by a sequence of digits (0 through 9).

Je gaat dus eerst moeten opvangen of de data die je uitleest geldig is. Bijvoorbeeld:

Code:
string input = Console.ReadLine();
int getal4 = 0; // Default value

if (!String.IsNullOrEmpty(input)) {
    getal4 = Convert.ToInt32(input);
}

Maar, wanneer je bovenstaande methode gebruikt ga je dus altijd een waarde in "getal4" hebben. Je default value die je in je functie declaratie opgeeft heeft dus geen nut.

Ook in jouw code doet die default waarde weinig. Je geeft de variabele namelijk altijd mee in je aanroep van de functie. Die default waarde gaat alleen werken wanneer je geen variabele zou meegeven.

ZZ5

Legacy Member
gesnopen maar aangezien we nog geen if clause hebben gezien ga ik er anders moeten aan geraken. Morgen nog eens op sjieken. Alvast bedankt voor je (enorm) onderbouwde uitleg!

Recipe4hate

Legacy Member
Moto zei:
waarom niet params gebruiken in dit geval

params (C# Reference)

Denk dat dat misschien nog een beetje ver van zijn bed is :-)


A propos: ik raad je nu al aan (mits de leerkracht er geen problemen mee heeft) om duidelijke Engelse namen te gaan gebruiken. Bespaart jou en je collega's alleen maar ergernissen :-)

TooChé

Legacy Member
waar jij op zoek naar bent zijn optionele parameters zoals Moto zegt.

parameter lijst opvullen naargelang de ingave in uw console. En in uw functie paramaterlijst weer overlopen en optellen ...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan