Forumdelen sponsras av

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

Hjälp med diverse C#-frågor

Hejsan. Jag försöker skriva en metod där användaren själv ska skriva in en summa och sedan skriva in vilken momssats de vill ha. Just nu kan jag bara skriva in heltal! Jag har försökt med "double" men det funkar inte! Vad har jag gjort fel?

{ Console.WriteLine("Skriv in valfri siffra!"); string str = Console.ReadLine(); float tal = Convert.ToInt32(str); Console.WriteLine("Skiv in vilken moms du vill ha!"); string momssats = Console.ReadLine(); float moms = Convert.ToInt32(momssats); //Stämmer inte för jag vill kunna använda heltal och decimaltal. Nu fungerar bara heltal! float totalpris; totalpris = tal * moms; string myString1 = ("Din total summa plus moms blir "); string everything = (myString1 + totalpris); { Console.WriteLine(everything); } }

§3.1 (sammanfogning av trådar)
Trädvy Permalänk
Medlem
Plats
Småland
Registrerad
Sep 2012
Skrivet av Nicke_g:

Hejsan. Jag försöker skriva en metod där användaren själv ska skriva in en summa och sedan skriva in vilken momssats de vill ha. Just nu kan jag bara skriva in heltal! Jag har försökt med "double" men det funkar inte! Vad har jag gjort fel?

{ Console.WriteLine("Skriv in valfri siffra!"); string str = Console.ReadLine(); float tal = Convert.ToInt32(str); Console.WriteLine("Skiv in vilken moms du vill ha!"); string momssats = Console.ReadLine(); float moms = Convert.ToInt32(momssats); //Stämmer inte för jag vill kunna använda heltal och decimaltal. Nu fungerar bara heltal! float totalpris; totalpris = tal * moms; string myString1 = ("Din total summa plus moms blir "); string everything = (myString1 + totalpris); { Console.WriteLine(everything); } }

Prova med float moms = Convert.ToSingle(momssats); istället
Alltså,

{ Console.WriteLine("Skriv in valfri siffra!"); string str = Console.ReadLine(); float tal = Convert.ToInt32(str); Console.WriteLine("Skiv in vilken moms du vill ha!"); string momssats = Console.ReadLine(); float moms = Convert.ToSingle(momssats); //Stämmer inte för jag vill kunna använda heltal och decimaltal. Nu fungerar bara heltal! float totalpris; totalpris = tal * moms; string myString1 = ("Din total summa plus moms blir "); string everything = (myString1 + totalpris); { Console.WriteLine(everything); } }

Fungerar för mig, källa

Chassi: Fractal Design R5 Black | CPU: Intel i7 3770K @ 4.5 GHz | Kylare: Corsair H80i GT | Graffe: ASUS 1070 8GB ROG STRIX DC3 | PSU: Antec 620 W | RAM: Corsair Vengence 16GB 1600 MHz | MOBO: Asus P8Z77-V Pro
CS:GO-Maps (App) Sweclockers (App)

Trädvy Permalänk
Medlem
Registrerad
Okt 2014
Skrivet av Nicke_g:

Hejsan. Jag försöker skriva en metod där användaren själv ska skriva in en summa och sedan skriva in vilken momssats de vill ha. Just nu kan jag bara skriva in heltal! Jag har försökt med "double" men det funkar inte! Vad har jag gjort fel?

{ Console.WriteLine("Skriv in valfri siffra!"); string str = Console.ReadLine(); float tal = Convert.ToInt32(str); Console.WriteLine("Skiv in vilken moms du vill ha!"); string momssats = Console.ReadLine(); float moms = Convert.ToInt32(momssats); //Stämmer inte för jag vill kunna använda heltal och decimaltal. Nu fungerar bara heltal! float totalpris; totalpris = tal * moms; string myString1 = ("Din total summa plus moms blir "); string everything = (myString1 + totalpris); { Console.WriteLine(everything); } }

Sitter och halv sover här, kanske jag som missuppfattat helt..?

string TAL, MOMS; double TOTALPRIS; Console.WriteLine ("Skriv in valfri siffra!"); TAL = Console.ReadLine (); Console.WriteLine ("Skriv in vilken moms du vill ha! ( % )"); MOMS = Console.ReadLine (); TOTALPRIS = Convert.ToDouble(TAL)+(Convert.ToDouble(TAL)*(Convert.ToDouble(MOMS)/100)); Console.WriteLine ("Din total summa plus moms blir: " + TOTALPRIS);

Output: Skriv in valfri siffra! 10 Skriv in vilken moms du vill ha! ( % ) 25 Din total summa plus moms blir: 12.5

Dator: Ett metall chassi med varierande komponenter på insidan.

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

Ahh! Min fungerade inte alls som jag ville :S Den andra varianten var mycket bättre och tydligare!
float moms = Convert.Tosingle(momssats) gör inte som jag vill.
Men den av /Creatooz fungerar perfekt och är tydlig
Tack för svaren!

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

C# interna metod och CTF

Hejsan

Jag jobbar med en uppgift från programmeringsläroboken där jag ska räkna ut vad celsius blir i Fahrenheit. Inget svårt direkt. Men det jag inte förstår är att "Metoden inte ska vara synlig utifrån (private) och att jag ska kalla metoden för CTF()". Vet någon vad det innebär? Eller om någon hittat en länk till där man kan läsa sig till det! Toppen om man kan se ett exempel!
Tack för svar.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Maj 2004

MSDN skriver så här:
"The private keyword is a member access modifier. Private access is the least permissive access level. Private members are accessible only within the body of the class or the struct in which they are declared"

https://msdn.microsoft.com/sv-SE/library/st6sy9xe.aspx

Om det nu var private du ville ha förklarat.

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

@jovnas:

Aha tack! Jo hjälpte mig en bit på vägen :P. Men det kluriga är att jag ska kalla metoden för CTF() vilket jag inte fattar! Har sökt runder men hittar inget på CTF()

Trädvy Permalänk
Medlem
Plats
Skövde
Registrerad
Nov 2003

@Nicke_g: Det är inte så enkelt att det står för CelciusToFahrenheit?

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Feb 2006
Skrivet av Nicke_g:

@jovnas:

Aha tack! Jo hjälpte mig en bit på vägen :P. Men det kluriga är att jag ska kalla metoden för CTF() vilket jag inte fattar! Har sökt runder men hittar inget på CTF()

Metoden skall heta CTF(). Givetvis hittar du inget när du söker då det bara är ett namn du skall ange på något i din uppgift. Du skulle även kunna döpa metoden till ConvertCelsiusToFarenhiet, ConvertTemperature, Banan, MyConverter eller något annat spännande. Nu ska den heta CTF.

Du skall alltså skriva

private int CTF(int celsius){ ... ... }

eller motsvarande, du kanske kör double eller float

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

C# hjälp med överlagringar

Jag har som uppgift att ta uträkningen från Celsius till Fahrenheit från en tidigare uppgift som då låg i två överlagringar. Och skapa en intern metod för uträkningen. Jag gjorde såhär.

namespace TemepratureProgram { class MyTemperature { public static bool IsBoiling(int temperature) { if (temperature < 100) { return false; } return true; } public static bool IsBoiling(float temperature) { if (temperature < 100) { return false; } return true; } private static int CelsiusToFahrenheit(int celsius) { int fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; } private static float CelsiusToFahrenheit(float celsius) { float fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; } } }

När jag sen ska öppna den så får jag det inte att fungera! Just nu står det "CelsiusToFahrenheit" men jag vet ej vad jag ska skriva. Det går ju inta att skriva CTF eftersom att det är private! Hur gör för att få det att fungera? Tack för svar

namespace TemepratureProgram { class Program { static void Main(string[] args) { float fahrenheit = 212.5f; float celsius = MyTemperature. CelsiusToFahrenheit(fahrenheit); Console.WriteLine("Vattnet är " + celsius, 2 + " grader"); if (MyTemperature.IsBoiling(celsius)) { Console.WriteLine("Det kokar!"); } else { Console.WriteLine("Det kokar inte än!"); } } } }

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Maj 2004

Är det månne internal du är ute efter? Lite svårt att veta utan att se uppgiften.

Hur som helst, så borde du få följande felmeddelande från kompilatorn/intellisense;
CS0122 'MyTemperature.CelsiusToFahrenheit(int)' is inaccessible due to its protection level
Det betyder att det är precis som du säger, att du inte kan anropa funktionen från en annan klass eftersom funktionen är private.
(Namnet har för övrigt inget med saken att göra, utan det är bara "access modifier" som spelar roll.)
Lösningen är alltså att göra funktionerna "mer tillgängliga" genom att byta ut private mot någon annan modifier.

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

@jovnas:

Jag kan skriva uppgiften så förstår du lättare. Skapa en intern metod för denna uträkning. Metoden ska inte vara synlig utifrån (private). De båda överlagringarna ska användas denna interna metod. Kalla metoden CTF()
Jag har som sagt gjort metoden (private) men där tar det stop. Jag vet inte hur jag går vidare. Jag undrar ifall jag krånglar till en enkel uppgift! -.-

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Maj 2004

Det gjorde ju inte saken helt glasklar för mig iaf.

Jag tolkar det som att du skall ha två publika metoder som anropar en privat metod.
Ex:

class Program { static void Main(string[] args) { int resultat = MinKlass.MinPublikaMetod(42); Console.WriteLine(resultat); } } public static class MinKlass { public static int MinPublikaMetod(int i) { int resultat = MinPrivataMetod(i); return resultat; } private static int MinPrivataMetod(int i) { return i * i; // Eller till exempel en konvertering från Celsius till Farenheit. } }

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

@jovnas:

Aha jo det är sant!! De två publika metoderna anropar en privat. Tack:D

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

C# private och public

Hejsan! Längst ner jobbar jag med private och public. Själva uträkningen av Fahrenheit och Celsius görs i private och jag vill att det ska länkas till public sen. Vad gör jag för fel? Har kollar massa videos och massa länkar men jag blir inte klokare Tack för svar!!:)

namespace TemepratureProgram
{
class MyTemperature
{
public static bool IsBoiling(int temperature)
{
if (temperature < 100)
{
return false;
}
return true;
}
public static bool IsBoiling(float temperature)
{
if (temperature < 100)
{
return false;
}
return true;
}

public static int CelsiusToFahrenheit(int celsius)
{
return fahrenheit;
}

public static float CelsiusToFahrenheit(float celsius)
{
return fahrenheit;
}
private static int CTF(int celsius)
{
int fahrenheit = ((celsius * 9) / 5) + 32;
return fahrenheit;
}
private static float CTF(float celsius)

float fahrenheit = ((celsius * 9) / 5) + 32;
return fahrenheit;

}
}

Trädvy Permalänk
Medlem
Registrerad
Jan 2009

@Nicke_g: Börja med att titta på felmeddelandet du får när du försöker kompilera koden. Vad gnäller den på? Var finns fahrenheit?

Trädvy Permalänk
Medlem
Plats
Norrland
Registrerad
Apr 2012
Skrivet av Nicke_g:

Hejsan! Längst ner jobbar jag med private och public. Själva uträkningen av Fahrenheit och Celsius görs i private och jag vill att det ska länkas till public sen. Vad gör jag för fel? Har kollar massa videos och massa länkar men jag blir inte klokare Tack för svar!!:)

namespace TemepratureProgram
{
class MyTemperature
{
public static bool IsBoiling(int temperature)
{
if (temperature < 100)
{
return false;
}
return true;
}
public static bool IsBoiling(float temperature)
{
if (temperature < 100)
{
return false;
}
return true;
}

public static int CelsiusToFahrenheit(int celsius)
{
return fahrenheit;
}

public static float CelsiusToFahrenheit(float celsius)
{
return fahrenheit;
}
private static int CTF(int celsius)
{
int fahrenheit = ((celsius * 9) / 5) + 32;
return fahrenheit;

}
private static float CTF(float celsius)

float fahrenheit = ((celsius * 9) / 5) + 32;
return fahrenheit;
}
}

Dold text

namespace TemepratureProgram { class MyTemperature { public static bool IsBoiling(int temperature) { if (temperature < 100) { return false; } return true; //Du kan korta ned ovan till : return temperature >= 100 } public static bool IsBoiling(float temperature) { if (temperature < 100) { return false; } return true; //Samma gäller här } public static int CelsiusToFahrenheit(int celsius) { return fahrenheit; //Var finns fahrenheit? Vart har du deklarerat den variabeln? } public static float CelsiusToFahrenheit(float celsius) { return fahrenheit; //Samma här, vart är variabeln? } private static int CTF(int celsius) { int fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; //Varför inte : return ((celsius * 9) / 5) + 32; } private static float CTF(float celsius) float fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; //Samma } }

2600k @ STOCK <|> GTX 970 Omega!<|> Nån samsung 500gb ssd <|> 8 GB Kingston Hyper X <|> BenQ XL2420t
"Det finns inget skrot, bara gamla delar som kan användas på nya sätt" - Mulle Meck

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Sep 2003

Frågan är om du behöver fahrenheitvariabeln i vilket fall...

private static float CTF(float celsius) { return ((celsius * 9) / 5) + 32; } public static float CelsiusToFahrenheit(float celsius) { return CTF(celsius); }

1: Intel i7-3930K | 32GB Corsair Dominator GT | Asus Rampage IV Extreme x79 | 2 x 1080 GameRock Premium 8GB | 2 x Samsung Pro 840 512GB | Corsair AX1200i | BenQ XL2411 24" / W1070 135" | Bose QC25 | Windows 10 Pro x64 | HTC Vive |
2: Intel Core i7-4700HQ | 32GB RAM | Intel HM87 Express | GTX 780M | 17" | Windows 10 x64 |

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

C# Vad har jag missat :O

Hejsan. Jag har dessa två programmen. Först har jag MyTemperature som sköter uträkningen. Den tycker jag fungerar fint vad jag vet! Men det är fortsättningen som blir kaos!

namespace TemepratureProgram { class MyTemperature { public static bool IsBoiling(int temperature) { if (temperature < 100) { return false; } return true; } public static bool IsBoiling(float temperature) { if (temperature < 100) { return false; } return true; } public int CelsiusToFahrenheitC(int celsius) { return CTF(celsius); } public float CelsiusToFahrenheit(float celsius) { return FTC(celsius); } private int CTF(int celsius) { int fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; } private float FTC(float celsius) { float fahrenheit = ((celsius * 9) / 5) + 32; return fahrenheit; } } }

Här är då själva menyn. När jag skriver in ex: 20 grader Celsius. Då räknar programmet ut vad 100 Celsius blir i Fahrenheit. Stämmer ju inte riktigt. Vart är de fel? Är det i klassen ovan? Eller är det här i menyn? Tack för svar!!

namespace TemepratureProgram { class Program { static void Main(string[] args) { Console.WriteLine("Skriv in grader i celsius!"); int answer = Convert.ToInt32(Console.ReadLine()); float fahrenheit = 212.5f; MyTemperature instance = new MyTemperature(); instance.CelsiusToFahrenheit(fahrenheit); float celsius = instance.CelsiusToFahrenheit(fahrenheit); Console.WriteLine("Vattnet är " + celsius, 2 + " grader"); if (MyTemperature.IsBoiling(celsius)) { Console.WriteLine("Det kokar!"); } else { Console.WriteLine("Det kokar inte än!"); } } } }

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Dec 2010

@Nicke_g:
Om jag förstår det rätt så vill du ta emot graderna i celsius, sedan konvertera till fahrenheit och skriva ut?

float fahrenheit = 212.5f; // Den här raden kan du helt ta bort;
MyTemperature instance = new MyTemperature();
float fahrenheit = instance.CelsiusToFahrenheit(answer);
float celsius = instance.CelsiusToFahrenheit(fahrenheit); // Den här raden kan du helt ta bort;

Edit: Sedan bör du se över variabel-namn, i utskriften ska det väl vara fahrenheit?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2003

Problemet ligger i menyn. Du läser in temperaturen till variabeln answer, men skickar variabeln fahrenheit(som du initialiserar till 212,5*F(100*C)) MyTemperature-instansen.

Edit: puck-tvåa!

Skickades från m.sweclockers.com

Quidquid latine dictum sit, altum videtur.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2004

Istället för att skapa en ny tråd varenda gång du stöter på trubbel i c# så kanske du kan hålla dig till en enda tråd? Du har skapat fem trådar på en vecka.

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

C# subtraktion och addition

Hej! Jag vill att min temperatur ska gälla mellan 78-82! Får det inte att stämma. Just nu är rätt svar bara 78, 80, 82. Hur skriver jag för att programmet ska fatta att det är alla siffror från 78-82?

Jag försökte mig på en try an Catch här men det gick inte alls! Nån som har tips? Tack

namespace TemperatuenIBastun
{
class Program
{
static void Main(string[] args)
{
bool loop = true;
do
{

Console.WriteLine("Skriv in den perfekta temperaturen för bastun i celsius!");
string str = Console.ReadLine();
int celsius = Convert.ToInt32(str);

if (celsius == 80 - 2 || celsius == 80 + 2)
{
Console.WriteLine("Du har ställt in rätt temperatur för bastuaggregatet!");
loop = false;
}
else if (celsius < 78)
{
Console.WriteLine("Det är för kallt i bastun! Skruva upp temperaturen!");
loop = true;
}
else if (celsius > 82)
{
Console.WriteLine("Det är för varmt i bastun! Skruva ner temperaturen!");
loop = true;
}
} while (loop);
}
}
}

Trädvy Permalänk
Medlem
Registrerad
Jul 2013

celsius >= 78 && celsius <= 82

Trädvy Permalänk
Medlem
Registrerad
Jan 2009

@Nicke_g: Titta på dina if-satser. För varje if-sats, beskriv med dina egna ord vad den jämför och vilka temperaturer som täcks in. Då borde svaret bli uppenbart varför du inte täcker in allt du borde täcka in.

Överväg även starkt att hålla dig till en tråd istället för att starta en ny om varje problem.

Trädvy Permalänk
Medlem
Plats
Skellefteå
Registrerad
Okt 2008

Du har gjort en tankevurpa här:

if (celsius == 80 - 2 || celsius == 80 + 2)

1800X, 1080 SLI, 4K

Trädvy Permalänk
Medlem
Registrerad
Jul 2013

Tycker det är lite komiskt att folk inte bara ger svaren i denna del av forumet.

Tänk om det hade varit likadant när folk vill ha köpråd på en laptop och alla svarar med att TS ska läsa guider/reviews/manualer.

Trädvy Permalänk
Medlem
Plats
Kawlmar
Registrerad
Feb 2009

Du skriver ju i programmet att den endast accepterar 78 80 och 82. Du får ju lägga till så att den accepterar alla nummer mellan 78 och 82. Ta en titt på dina if-satser och tänk om lite så ser du snart problemet.

Förklarar istället:
if (celsius == 80 - 2 || celsius == 80 + 2)

Du säger ju i praktiken om celsius är samma som 80-2(78) eller celsius är 80+2(82) så är det rätt temperatur. Det du vill ha är om celsius är >= eller <= än 82 så är det rätt temperatur. Eller bara gör som första svaret, det är rätt.

Fractal Design Define S - ASUS Z170 Maximus VIII GENE - Corsair 16GB DDR4 2133MHz - Intel i7 7600k 4.0GHz - 3x Dell Ultrasharp U2312H - Asus GeForce GTX 1070 8GB - Corsair RM750x (750W) - NZXT Kraken X41 (140mm) - Samsung 850 EVO (500GB) - Intel 320 Series 120GB x 2

Trädvy Permalänk
Medlem
Plats
örebro
Registrerad
Okt 2001
Skrivet av sickhouse:

Tycker det är lite komiskt att folk inte bara ger svaren i denna del av forumet.

Tänk om det hade varit likadant när folk vill ha köpråd på en laptop och alla svarar med att TS ska läsa guider/reviews/manualer.

Tycker det är komiskt att folk inte inser att det är skoluppgifter och att bara ge svaret då knappast är produktivt.

Trädvy Permalänk
Medlem
Registrerad
Nov 2015

@fourbyfour:

Ahh tack! Sure! Ny på forum, därför man är lite efter