Trädvy Permalänk
Medlem
Registrerad
Okt 2007

Kod-koll

Hallåj

Håller på att koda i C# och undrar hur jag ska göra så att graderna i celsius i "Välkommen in att basta...." endast skrivs ut med två decimaler?
Dessutom undrar jag hur koden ser ut i övrigt. Några tips på hur den kan bli "bättre"?

class Program { //METOD: Konverterar celsius till fahrenheit private static float fahrenheit; private static float celsius; static float FahrenheitToCelsius(float fahrenheit) { float celsius = (fahrenheit - 32) * 5 / 9; return celsius; } static void Main(string[] args) { int perfectTemp = 80; // Den optimala temperaturen int minTemp = perfectTemp - 2; // 78C Den lägsta temp int maxTemp = perfectTemp + 2; // 82C Den högsta temp do { Console.WriteLine("Vänligen ange temperatur i fahrenheit: "); fahrenheit = Convert.ToSingle(Console.ReadLine()); celsius = FahrenheitToCelsius(fahrenheit); if (celsius < minTemp) { Console.WriteLine("För låg temperatur engiven."); } else if (celsius > maxTemp) { Console.WriteLine("För hög temperatur angiven."); } } while (celsius >= maxTemp || celsius <= minTemp); Console.WriteLine("Välkommen in att basta i denna ljuvliga temperatur som är " + celsius + " grader celsius."); Console.ReadLine(); } } }

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2013

Jag skulle omvandla talet till en String och sedan klippa bort alla tecken till höger om positionen 2 höger om "."

AMD FX-8350|Sapphire R9 280|Obsidian 800D|Argon AR01

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Miikks:

Hallåj

Jag undrar hur jag ska göra så att graderna i celsius i "Välkommen in att basta...." endast skrivs ut med två decimaler?
Dessutom undrar jag hur koden ser ut i övrigt. Några tips på hur den kan bli "bättre"?

class Program { //METOD: Konverterar celsius till fahrenheit private static float fahrenheit; private static float celsius; static float FahrenheitToCelsius(float fahrenheit) { float celsius = (fahrenheit - 32) * 5 / 9; return celsius; } static void Main(string[] args) { int perfectTemp = 80; // Den optimala temperaturen int minTemp = perfectTemp - 2; // 78C Den lägsta temp int maxTemp = perfectTemp + 2; // 82C Den högsta temp do { Console.WriteLine("Vänligen ange temperatur i fahrenheit: "); fahrenheit = Convert.ToSingle(Console.ReadLine()); celsius = FahrenheitToCelsius(fahrenheit); if (celsius < minTemp) { Console.WriteLine("För låg temperatur engiven."); } else if (celsius > maxTemp) { Console.WriteLine("För hög temperatur angiven."); } } while (celsius >= maxTemp || celsius <= minTemp); Console.WriteLine("Välkommen in att basta i denna ljuvliga temperatur som är " + celsius + " grader celsius."); Console.ReadLine(); } } }

Ett tips när du ber om hjälp, berätta vilket språk det är du kodar i, generellt tycker jag din kod verkar se ganska bra ut.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Registrerad
Jul 2012

Math.Round kanske kan vara något

Trädvy Permalänk
Medlem
Plats
Lappland
Registrerad
Feb 2008

Är det c#? Isåfall kanske detta skulle funka http://stackoverflow.com/questions/8239969/rounding-of-float-...

Mwn behöver man verkligen veta med två decimalers noggranhet temperaturen i en bastu och är tempgivaren så exakt till att börja med?

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Jan 2007

Dum fråga kanske men vad är det för temperatur givare? såvidare det är någon billigare modell så är decimaler om 2 ganska oviktiga då det inte är någon vidare precision på dom. Är det en PT100 givare då kan du börja gå ner på decimal nivå

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Henrixon:

Dum fråga kanske men vad är det för temperatur givare? såvidare det är någon billigare modell så är decimaler om 2 ganska oviktiga då det inte är någon vidare precision på dom. Är det en PT100 givare då kan du börja gå ner på decimal nivå

Om jag ser rätt är temperaturgivaren en människa, inte någon teknisk pryl.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Jan 2007
Skrivet av gaminggirl:

Om jag ser rätt är temperaturgivaren en människa, inte någon teknisk pryl.

Du.. Jag tror du har rätt

Trädvy Permalänk
Medlem
Plats
Götet
Registrerad
Okt 2013

Läs på om String.Format() och Stringbuilder. Två bra klasser för att trixa med format på utskrifter. Där hittar du allt från valutor till decimaler och potenser.

-TM

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Trädvy Permalänk
Medlem
Plats
London / Göteborg
Registrerad
Jul 2007
Skrivet av Miikks:

Hallåj

Jag undrar hur jag ska göra så att graderna i celsius i "Välkommen in att basta...." endast skrivs ut med två decimaler?
Dessutom undrar jag hur koden ser ut i övrigt. Några tips på hur den kan bli "bättre"?

class Program { //METOD: Konverterar celsius till fahrenheit private static float fahrenheit; private static float celsius; static float FahrenheitToCelsius(float fahrenheit) { float celsius = (fahrenheit - 32) * 5 / 9; return celsius; } static void Main(string[] args) { int perfectTemp = 80; // Den optimala temperaturen int minTemp = perfectTemp - 2; // 78C Den lägsta temp int maxTemp = perfectTemp + 2; // 82C Den högsta temp do { Console.WriteLine("Vänligen ange temperatur i fahrenheit: "); fahrenheit = Convert.ToSingle(Console.ReadLine()); celsius = FahrenheitToCelsius(fahrenheit); if (celsius < minTemp) { Console.WriteLine("För låg temperatur engiven."); } else if (celsius > maxTemp) { Console.WriteLine("För hög temperatur angiven."); } } while (celsius >= maxTemp || celsius <= minTemp); Console.WriteLine("Välkommen in att basta i denna ljuvliga temperatur som är " + celsius + " grader celsius."); Console.ReadLine(); } } }

Det ser ut som C#. Titta på String.Format.

Du kan skriva det som

Console.WriteLine("Välkommen in att basta i denna ljuvliga temperatur som är {0:##.00} grader celsius.", celsius);

WS: Bärbar workstation, 2 * Dell U2412M
HTPC: Intel NUC, Canton GLE 496, Yamaha RV-A830, Sanyo PLV-Z700
Server: Intel Xeon E3-1240@3.4 GHz, ESXi, 16GB RAM, 8*2TB RAID-Z2 + SSD-cache
Slösurf: MacBook Air 11,6", Nokia Lumia 925, OnePlus Two
Kamera: Canon EOS 5DII + 1DIII, Canon 100/2.8 Macro, Canon 70-200/2.8L, Canon 24-70/2.8L

Trädvy Permalänk
Medlem
Registrerad
Okt 2007

Jo det är C# Har korrigerat mitt inlägg.

Trädvy Permalänk
Medlem
Plats
Götet
Registrerad
Okt 2013

Ett övrigt tips:
Du validerar aldrig användarens input. Kolla på TryParse istället för Parse. Om man använder TryParse bör man dock alltid tala om för datorn vilket land man är i. Detta pga att vi skriver 1,35 medans amerikanerna skriver 1.35. Finns många fler avvikelser att ta hänsyn till och detta är redan gjort i något som heter Culture variabeln.

copy/pasta från stackoverflow:

using System.Globalization; string value = "1345,978"; NumberStyles style = System.Globalization.NumberStyles.AllowDecimalPoint; CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR"); if (Single.TryParse(value, style, culture, out number)) Console.WriteLine("Converted '{0}' to {1}.", value, number); else Console.WriteLine("Unable to convert '{0}'.", value);

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Trädvy Permalänk
Medlem
Registrerad
Okt 2015
Skrivet av Miikks:

Hallåj

Håller på att koda i C# och undrar hur jag ska göra så att graderna i celsius i "Välkommen in att basta...." endast skrivs ut med två decimaler?
Dessutom undrar jag hur koden ser ut i övrigt. Några tips på hur den kan bli "bättre"?

class Program { //METOD: Konverterar celsius till fahrenheit private static float fahrenheit; private static float celsius; static float FahrenheitToCelsius(float fahrenheit) { float celsius = (fahrenheit - 32) * 5 / 9; return celsius; } static void Main(string[] args) { int perfectTemp = 80; // Den optimala temperaturen int minTemp = perfectTemp - 2; // 78C Den lägsta temp int maxTemp = perfectTemp + 2; // 82C Den högsta temp do { Console.WriteLine("Vänligen ange temperatur i fahrenheit: "); fahrenheit = Convert.ToSingle(Console.ReadLine()); celsius = FahrenheitToCelsius(fahrenheit); if (celsius < minTemp) { Console.WriteLine("För låg temperatur engiven."); } else if (celsius > maxTemp) { Console.WriteLine("För hög temperatur angiven."); } } while (celsius >= maxTemp || celsius <= minTemp); Console.WriteLine("Välkommen in att basta i denna ljuvliga temperatur som är " + celsius + " grader celsius."); Console.ReadLine(); } } }

Det finns ju nu en hel massa sätt att gå tillväga i Java. Men så här såg en liten kod jag satte ihop just nu ut:

//import java.util.Locale; import java.util.Scanner; public class CelsiusToFahrenheit { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); //Locale.setDefault(new Locale("en", "US")); System.out.print("Celsius to Fahrenheit calculator: "); double number = keyboard.nextDouble(); System.out.printf(number + " celsius is %.2f fahrenheit", calc(number)); } public static double calc(double celsius){ double fahrenheit = (celsius * 1.8) + 32; return fahrenheit; } }

Jag har med Locale.setDefault(new Locale("en", "US")); bara om du tycker det är viktigt med punkt istället för komma. Och vill du använda klassen Locale måste du importera java.util.Locale;

Hoppas det kunde vara till någon hjälp!

Trädvy Permalänk
Medlem
Registrerad
Okt 2015
Skrivet av Miikks:

Jo det är C# Har korrigerat mitt inlägg.

Tyckte det såg precis ut som som Java, så mitt tips kanske ändå kan vara till hjälp

Trädvy Permalänk
Medlem
Registrerad
Okt 2007

Tackar för svaren. Ska kollas på nu!
Under tiden fick det bli ett aktivitetsdiagram också https://www.n0.se/v/f/cc827_namnls.png

Trädvy Permalänk
Medlem
Registrerad
Okt 2007

Använder en av mina före detta trådar eftersom det i princip är på samma topic.

Kort och gott så vill jag göra så att det skrivs ut ett meddelande när ett tal utanför ramen 1-25 matas in. Borde det inte, så som jag tänkt i min kod, fungera med en catch? :S

{ class Program { static void Main(string[] args) { int right = 0; int min = 1; int max = 25; int[] bingobricka = new int[10]; //Bingobrickans storlek bestäms string[] positions = { "första", "andra", "tredje", "fjärde", "femte", "sjätte", "sjunde", "åttånde", "nionde", "tionde" }; Console.WriteLine("---------------------------"); Console.WriteLine("Välkommen till Bingo med C#"); Console.WriteLine("---------------------------"); Console.WriteLine(); Console.WriteLine("Skriv in dina siffror mellan 1 och 25"); Console.WriteLine(); for (int i = 0; i < bingobricka.Length; i++) { try { Console.WriteLine("Skriv ditt {0} nummer:", positions[i]); int bingonr = int.Parse(Console.ReadLine()); bingobricka[i] = bingonr; } catch { ???????????????????????????????? // ;( } } int[] vinstnumer= new int[10]; Random randmNr = new Random(); for (int r = 0; r < vinstnummer.Length; r++) { // Tal mellan 1 och 25 slumpas vinstnummer[r] = randmNr.Next(1, 26); } // Loopar genom varje nummer som användren skivit in for (int i = 0; i < bingobricka.Length; i++) { if (vinstnummer.Contains(bingobricka[i])) { right++; // För varje matchat nummer ökas antalet rätt } } { Console.WriteLine(); Console.WriteLine("-Du fick: {0} av 10 rätt", right); Console.ReadLine(); } } } }

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Mar 2011
Skrivet av Miikks:

Använder en av mina före detta trådar eftersom det i princip är på samma topic.

Kort och gott så vill jag göra så att det skrivs ut ett meddelande när ett tal utanför ramen 1-25 matas in. Borde det inte, så som jag tänkt i min kod, fungera med en catch? :S

{ class Program { static void Main(string[] args) { int right = 0; int min = 1; int max = 25; int[] bingobricka = new int[10]; //Bingobrickans storlek bestäms string[] positions = { "första", "andra", "tredje", "fjärde", "femte", "sjätte", "sjunde", "åttånde", "nionde", "tionde" }; Console.WriteLine("---------------------------"); Console.WriteLine("Välkommen till Bingo med C#"); Console.WriteLine("---------------------------"); Console.WriteLine(); Console.WriteLine("Skriv in dina siffror mellan 1 och 25"); Console.WriteLine(); for (int i = 0; i < bingobricka.Length; i++) { try { Console.WriteLine("Skriv ditt {0} nummer:", positions[i]); int bingonr = int.Parse(Console.ReadLine()); bingobricka[i] = bingonr; } catch { ???????????????????????????????? // ;( } } int[] vinstnumer= new int[10]; Random randmNr = new Random(); for (int r = 0; r < vinstnummer.Length; r++) { // Tal mellan 1 och 25 slumpas vinstnummer[r] = randmNr.Next(1, 26); } // Loopar genom varje nummer som användren skivit in for (int i = 0; i < bingobricka.Length; i++) { if (vinstnummer.Contains(bingobricka[i])) { right++; // För varje matchat nummer ökas antalet rätt } } { Console.WriteLine(); Console.WriteLine("-Du fick: {0} av 10 rätt", right); Console.ReadLine(); } } } }

Nej. En catch-sats fångar ett exception (men applikationen fortsätter köras), se exempel nedan:

//Exception: Index was outside the bounds of the array. try { int[] test = new int[2]; MessageBox.Show(test[2].ToString()); } catch(Exception ex) { MessageBox.Show(ex.Message); }

Här är information om felhantering inom C#:

Felhantering

Problemet är att du måste kolla OM användaren angett ett tal som är över 25, för att sedan göra någonting åt det.

//debben

Trädvy Permalänk
Medlem
Registrerad
Okt 2007
Skrivet av debben:

Nej. En catch-sats fångar ett exception (men applikationen fortsätter köras), se exempel nedan:

//Exception: Index was outside the bounds of the array. try { int[] test = new int[2]; MessageBox.Show(test[2].ToString()); } catch(Exception ex) { MessageBox.Show(ex.Message); }

Här är information om felhantering inom C#:

Felhantering

Problemet är att du måste kolla OM användaren angett ett tal som är över 25, för att sedan göra någonting åt det.

//debben

Tackar så mycket för ditt svar men uppriktigt sagt så förstår jag fortfarande inte riktigt hur detta med exceptions fungerar...

Efter att kollat rundor så antar jag att det ska se ut något åt detta hållet:

for (int i = 0; i < bingobricka.Length; i++) { Console.WriteLine("Skriv ditt {0} nummer:", positions[i]); int bingonr = int.Parse(Console.ReadLine()); bingobricka[i] = bingonr; try { if (bingonr < 1 || bingonr > 25) throw new Exception(); } catch (Exception) { Console.WriteLine("Fel!"); } }

Det är förmodligen endast något litet som återstår att ändra, hoppas jag , men får inte till det och börjar smått tappa det efter en hel eftermiddag med detta.
Dessutom undrar jag hur man får programmet till att fortsätta vid det tal som användaren skrivit ett tal utanför intervallen?

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Mar 2011
Skrivet av Miikks:

Tackar så mycket för ditt svar men uppriktigt sagt så förstår jag fortfarande inte riktigt hur detta med exceptions fungerar...

Efter att kollat rundor så antar jag att det ska se ut något åt detta hållet:

for (int i = 0; i < bingobricka.Length; i++) { Console.WriteLine("Skriv ditt {0} nummer:", positions[i]); int bingonr = int.Parse(Console.ReadLine()); bingobricka[i] = bingonr; if (bingonr < 1 || bingonr > 25) //Gör någonting }

Det är förmodligen endast något litet som återstår att ändra, hoppas jag , men får inte till det och börjar smått tappa det efter en hel eftermiddag med detta.
Dessutom undrar jag hur man får programmet till att fortsätta vid det tal som användaren skrivit ett tal utanför intervallen?

Läs på om felhantering. Det är bad practice att generera ett fel bara för att man fyller ett if-statement.
Try / catch används oftast där ska ha åtkomst till någonting eller i ett dylikt case, vid t.ex. StreamWriter, MemoryStream, Entity Framework osv. Detta wrappas dock allt som oftast i ett using-statement, som i sin tur har en try/catch/finally inbakad i sig.

Kolla på länken jag skickade ang. felhantering

Edit:

En till: Felhantering