Permalänk

Problem med uppgift

Tjenare!
Jag har problem med att förstå en uppgift jag har i min arbetsbok.
Det står i min arbetsbok att jag ska utgå från denna kod:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Övning_11._9___Klassen_MyTemperature { class Program { //Metod: CelsiusToFarenheit, komverterar celsius till farenheit //Överlagring 1 - med int static int CelsiusToFarenheit(int celsius) { int fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; } //Metod: CelsiusToFarenheit, komverterar celsius till farenheit //Överlagring 2 - med float static float CelsiusToFarenheit(float celsius) { float fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; } //Metod: MAin, startar programmet static void Main(string[] args) { //Testa Överlagring 1: int farenheitI = CelsiusToFarenheit(100); Console.WriteLine(farenheitI); //Testa Överlagring 2: float farenheitF = CelsiusToFarenheit(97.3f); Console.WriteLine(farenheitF); Console.ReadLine(); } } }

*Som det nu är ligger uträkningen från celsius till fahrenheit i (fahrenheit = ((celsius * 9) / 5) +32) på tå ställen.
En i varje överlagring. Skapa istället en intern metod för denna utrökning.
Metoden skall inte vara synlig utifrån (Private).
De båda överlagringarna ska använda denna interna metod. Kalla metoden CTF().
//Jag förstår inte vad en intern metod är och jag förstår inte vad som menas med utifrån private.

*Skapa en konverterare från fahrenheit till celsius med två överlagringar (int och float).
På samma sätt som med Celsius till fahrenheit ska själva uträkningen ligga i en intern metod (se punkten ovan). Skapa och anropa den interna metoden FTC ().
//Denna förstår jag inte heller då jag inte förstår första delen.

Permalänk
Medlem

@strutsen1:

Jag som själv är C# utvecklare sedan 1 ½ år tillbaka har svårt att förstå vad dom menar på svenska.

En privat metod är endast synlig för den klassen, du har ingen möjlighet att använda metoden förutom inuti klassen.

public class human private string Foo() { return "foo"; } public string Bar() { return "bar"; } public string FooBar() { string foo = Foo(); return foo; } Om jag instancierar upp klassen human. Human h = new Human(); string s = h.Bar = "bar" string s2 = h.Foo = kommer inte ens kunna hitta metoden "Foo" string s3 = h.FooBar = "foo" Jag kommer åt foo på grund att FooBar metoden är public som använder Foo(), endast Bar() och FooBar() har möjlighet att se metoden. Så svaret på din fråga är att klassen program ska ha en metod som är private, och är endast synlig inom klassen program. "private int CTF()"

en intern metod gissar jag på då det är två metoder som gör en identisk returnering men av 2 olika variablar att du har en metod som returnerar en siffra.

class Program { static int CelsiusToFarenheit(int celsius) { int fahrenheit = (int)CTF(celsius) return fahrenheit; } static float CelsiusToFarenheit(float celsius) { float fahrenheit = CTF(celsius) return fahrenheit; } static void Main(string[] args) { int farenheitI = CelsiusToFarenheit(100); Console.WriteLine(farenheitI); float farenheitF = CelsiusToFarenheit(97.3f); Console.WriteLine(farenheitF); Console.ReadLine(); } private static float CTF(float celsius) { return ((celsius * 9) / 5) + 32; } }

Vet inte hur mycket du vet om casting?
siffra1 är en double, och siffra2 är en int, säger jag att siffra2 ska vara siffra1 kommer jag få error då int != double.
Om jag sätter (int)siffra1 så säger jag åt siffra1 att agera en int i detta fall.

double siffra1 = 2;
int siffra2 = (int)siffra1;

DOCK!
Hade vi gjort så här istället:
int siffra1 = 2;
double siffra2 = siffra1;

Då hade det funkat utmärkt, tror det har med bytes att göra, då en int är 4 bytes och double är 8 bytes. Man får inte plats med 8 bytes i 4 men funkar tvärtom.

Skapa en konverterare från fahrenheit till celsius med två överlagringar (int och float).
Gör uträkningen tvärtom.

static int FaToCeI(int f) { int celsius = (int)FTC(f) return celsius ; } static float FaToCeF(float f) { float celsius = FTC(f); return celsius ; } fast i en egen metod private static float FTC(float f) { return (5.0 / 9.0) * (f - 32); }

Jag hoppas du förstod något, jag är ur usel på att beskriva något så hoppas detta var tillräckligt.
Lycka till i framtiden, programmering blir mycket roligare senare när man väl börjar få ihop tänket

Visa signatur

Gaming: MSI X570 MPG Gaming Plus -- AMD Ryzen 9 5900X -- Sapphire Radeon RX 6800 XT NITRO+ -- G.Skill 32GB 3600MHz CL14 -- Samsung 960 EVO 1TB -- 2x ASUS MG278Q -- Arch-based EndeavourOS
VR: ASRock B550M-ITX/ac -- AMD Ryzen 5 5600G -- ASUS RTX 3070 -- Corsair 16GB 3600MHz CL18 -- Kingston A2000 250GB -- Windows 10

Permalänk
Skrivet av Heineken89:

@strutsen1:

Jag som själv är C# utvecklare sedan 1 ½ år tillbaka har svårt att förstå vad dom menar på svenska.

En privat metod är endast synlig för den klassen, du har ingen möjlighet att använda metoden förutom inuti klassen.

public class human private string Foo() { return "foo"; } public string Bar() { return "bar"; } public string FooBar() { string foo = Foo(); return foo; } Om jag instancierar upp klassen human. Human h = new Human(); string s = h.Bar = "bar" string s2 = h.Foo = kommer inte ens kunna hitta metoden "Foo" string s3 = h.FooBar = "foo" Jag kommer åt foo på grund att FooBar metoden är public som använder Foo(), endast Bar() och FooBar() har möjlighet att se metoden. Så svaret på din fråga är att klassen program ska ha en metod som är private, och är endast synlig inom klassen program. "private int CTF()"

en intern metod gissar jag på då det är två metoder som gör en identisk returnering men av 2 olika variablar att du har en metod som returnerar en siffra.

class Program { static int CelsiusToFarenheit(int celsius) { int fahrenheit = (int)CTF(celsius) return fahrenheit; } static float CelsiusToFarenheit(float celsius) { float fahrenheit = CTF(celsius) return fahrenheit; } static void Main(string[] args) { int farenheitI = CelsiusToFarenheit(100); Console.WriteLine(farenheitI); float farenheitF = CelsiusToFarenheit(97.3f); Console.WriteLine(farenheitF); Console.ReadLine(); } private static float CTF(float celsius) { return ((celsius * 9) / 5) + 32; } }

Vet inte hur mycket du vet om casting?
siffra1 är en double, och siffra2 är en int, säger jag att siffra2 ska vara siffra1 kommer jag få error då int != double.
Om jag sätter (int)siffra1 så säger jag åt siffra1 att agera en int i detta fall.

double siffra1 = 2;
int siffra2 = (int)siffra1;

DOCK!
Hade vi gjort så här istället:
int siffra1 = 2;
double siffra2 = siffra1;

Då hade det funkat utmärkt, tror det har med bytes att göra, då en int är 4 bytes och double är 8 bytes. Man får inte plats med 8 bytes i 4 men funkar tvärtom.

Skapa en konverterare från fahrenheit till celsius med två överlagringar (int och float).
Gör uträkningen tvärtom.

static int FaToCeI(int f) { int celsius = (int)FTC(f) return celsius ; } static float FaToCeF(float f) { float celsius = FTC(f); return celsius ; } fast i en egen metod private static float FTC(float f) { return (5.0 / 9.0) * (f - 32); }

Jag hoppas du förstod något, jag är ur usel på att beskriva något så hoppas detta var tillräckligt.
Lycka till i framtiden, programmering blir mycket roligare senare när man väl börjar få ihop tänket

Jättebra hjälp! Det låter ju självklart nu när du förklarar det. Tack så mycket!