Permalänk
Vägledare

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

Permalänk

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

Visa signatur

AMD Ryzen 5 3600 | Sapphire R9 280

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

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
Medlem

Math.Round kanske kan vara något

Permalänk
Medlem

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

Permalänk
Medlem

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å

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

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

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

Permalänk
Medlem

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

Visa signatur

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

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

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Vägledare

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

Permalänk
Medlem

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

Visa signatur

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

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

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

Permalänk
Vägledare

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

Permalänk
Vägledare

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

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

Permalänk
Vägledare
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?

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