Permalänk
Medlem

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)
Permalänk
Medlem
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

Visa signatur

Chassi: Fractal Design Meshify C Mini | CPU: AMD Ryzen 5 3600 | Kylare: Be Quiet! Dark Rock Pro 4 | Graffe: ASUS 1070 8GB ROG STRIX DC3 | PSU: Corsair RM750X V2 | RAM: Corsair Vengence 32GB 3200 MHz | MOBO: MSI B450M MORTAR MAX
CS:GO-Maps (App) Sweclockers (App)

Permalänk
Medlem
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

Visa signatur

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

Permalänk
Medlem

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!

Permalänk
Medlem

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.

Permalänk
Medlem

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.

Visa signatur

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

Permalänk
Medlem

@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()

Permalänk
Medlem

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

Permalänk
Inaktiv
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

Permalänk
Medlem

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!"); } } } }

Permalänk
Medlem

Ä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.

Visa signatur

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

Permalänk
Medlem

@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! -.-

Permalänk
Medlem

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. } }

Visa signatur

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

Permalänk
Medlem

@jovnas:

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

Permalänk
Medlem

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;

}
}

Permalänk
Medlem

@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?

Permalänk
Medlem
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 } }

Visa signatur

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

Permalänk
Medlem

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); }

Permalänk
Medlem

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!"); } } } }

Permalänk
Medlem

@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?

Permalänk
Medlem

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

Visa signatur

Quidquid latine dictum sit, altum videtur.

Permalänk
Medlem

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.

Permalänk
Medlem

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);
}
}
}

Permalänk
Medlem

celsius >= 78 && celsius <= 82

Permalänk
Medlem

@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.

Permalänk
Medlem

Du har gjort en tankevurpa här:

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

Visa signatur

5950X, 3090

Permalänk
Medlem

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.

Permalänk
Medlem

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.

Visa signatur

ᕦ(ツ)ᕤ

Permalänk
Medlem
Skrivet av hultron:

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.

Permalänk
Medlem

@fourbyfour:

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