Amerikanen i bastun C# programmering 1
Hej!
Jag har försökt få detta att fungera men det är något som inte funkar och jag kan inte riktigt hitta vad. Har sökt och sökt och kollat kurslitteraturen. Vet inte om jag bara missar något. Oavsett om jag skriver in 2000 grader så står det bara "too cold" . Sen får min måsvinge i slutet på do loopen detta errorsen:
Syntax error, 'while' expected [Bastun]csharp(CS1003)
Syntax error, '(' expected [Bastun]csharp(CS1003)
Invalid expression term '}' [Bastun]csharp(CS1525)
) expected [Bastun]csharp(CS1026)
; expected [Bastun]csharp(CS1002)
Denna uppgift går ut på att simulera inställning av temperatur i en bastu. Premissen är att användaren kommer från Amerika och känner bara till fahrenheit medan aggregatet bara förstår celsius. Så du får skapa kod som tar emot värdet i fahrenheit och omvandla detta.
Du fastslår en lagom temperaturen i ett sifferspann - exempelvis 82 till 87 grader.
I denna uppgift ska ni jobba med undantagshantering enligt studiematerialet. Det innebär att om man skriver in en bokstav eller felaktig siffra så kommer inte programmet att krascha. Då ska man lösa det med en loop som itererar så länge man inte skrivit in ett korrekt värde.
I uppgiften ska ni skapa en metod som ligger utanför main-metoden. Den nya metoden ska användas för att omvandla Fahrenheit till Celsius. Metoden tar emot ett heltal som argument. Sedan ska metoden returnera ett heltal som motsvarar Celsius.
Värdet Celsius ska testas om det är för lågt respektive för högt. Då skriver ni en lämplig text om detta. Och koden för inmatning upprepas.
Skulle temperaturen i Celsius matcha en lagom temperatur (mellan 82 och 87) så kommer programmet avslutas med ett trevligt meddelande om att bastun är redo att bada i.
Utmaningen:
Denna uppgift handlar mycket om att öva på metoder och hur de kan användas. Det är viktigt att ni övar både på detta med argument (ett värde som skickas till metoden och som krävs för att metoden ska kunna göra sitt jobb). Likaså ska metoden kunna returnera ett värde (det framräknande värdet i Celsius). En parentes är att det dock inte alls måste vara så att en metod har argument och/eller returvärde. Men i denna uppgift är så fallet alltså.
Vidare består utmaningen i att ni kan jobba med villkor och en loop för att programmet ska fungera som det är tänkt.
Uppgiften är rätt lik uppgiften "gissa talet" från ett tidigare uppdrag, men att flera värden är korrekta.
Detta kan man lösa med en bool-variabel men ännu bättre blir det om vi istället direkt jämför värden för lagom temperatur med celsius-värdet.
Man ska ha löst undantagshanteringen på ett godtagbart sätt.
Utmaningen (för betygskriterier motsvarande C) innebär att ni inte använder någon bool-variabel för loopen. Vidare ska metoden som omvandlar Fahrenheit till Celsius ska ta emot ett heltal, men däremot returnera ett decimaltal (Celsius). Detta kallas typomvandling.
Undantagshanteringen ska kännas logisk och väl avvägt. Så att det inte blir för knölig kod.
Den allra svåraste utmaningen (för betygskriterier motsvarande A) innebär att ni ska arbeta med ytterligare en metod och som ska fungera som en överlagrad metod (eng: "overloaded methods"). Om användaren skriver in 0(noll) istället för ett värde så ska den nya metoden användas istället och på ett lämpligt sätt. Den nya metoden (som ej har något argument) ska slumpa fram ett tal och därefter i sin tur returnera värdet till den ursprungliga metoden (med argument) för omvandling mellan Fahrenheit och Celsius.
using System;
class program
{
public static double FahrToCels(int fahrs)
{
double celsius = (fahrs - 32) * 5 / 9;
return celsius;
}
static void Main(string[] args)
{
Console.Title = "FahrTillCelsius - Emil K";
double temp = 0;
int maxTemp = 87;
int minTemp = 82;
Console.WriteLine("Enter the temperature: ");
int fahrenheit = Convert.ToInt32(Console.ReadLine());
do
{
try
{
int fahr = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("Error! Please only write your answer in numbers..");
continue;
}
if (temp < minTemp)
{
Console.WriteLine("The temperature is too cold, you would not enjoy the experience. Please raise the temperature..");
}
else if (temp > maxTemp)
{
Console.WriteLine("The temperature is too hot, you would not enjoy the experience. Please lower the temperature..");
}
else if (temp < minTemp || temp > maxTemp)
{
Console.WriteLine("The temperature is perfect. Enjoy your experience at the sauna.");
Console.Write("Press any key to quit...");
break;
}
}
}
}
temp förblir alltid 0. Du lägger det du läser in i en variabel som heter fahr.
Till att börja med, kommentera bort raden int fahrenheit = Convert.ToInt32(Console.ReadLine());
dvs gör om till kommentar:
// int fahrenheit = Convert.ToInt32(Console.ReadLine());
Detta för att variabeln fahrenheit används bara på den raden.
Tips: Att kommentera bort rader istället för att ta bort dem är en bra metod vid felsökning. Då kan du enkelt återskapa tidigare versioner vid behov.
Prova sedan din kod igen
Peter_ skrev:Till att börja med, kommentera bort raden int fahrenheit = Convert.ToInt32(Console.ReadLine());
dvs gör om till kommentar:
// int fahrenheit = Convert.ToInt32(Console.ReadLine());Detta för att variabeln fahrenheit används bara på den raden.
Tips: Att kommentera bort rader istället för att ta bort dem är en bra metod vid felsökning. Då kan du enkelt återskapa tidigare versioner vid behov.Prova sedan din kod igen
Okej jag gjorde det du skrev. När jag körde koden efter det så kunde jag skriva in nummer och inget skrevs ut efteråt. Men efter jag kollat lite mer på google så har jag ändrar i min kod lite. Problemet jag har nu är att oavsett vad det är för temperatur som skrivs in så står det fortfarande att det är för kallt?
Min uppdaterade kod:
using System;
class program
{
public static double FahrToCels(int fahrs)
{
double celsius = (fahrs - 32) * 5 / 9;
return celsius;
}
public static void Main(string[] args)
{
Console.Title = "FahrTillCelsius - Emil K";
double temp = 0;
Console.WriteLine("Enter the temperature: ");
//int fahrenheit = Convert.ToInt32(Console.ReadLine());
do
{
while (true)
{
try
{
int fahr = int.Parse(Console.ReadLine());
}
catch (Exception e)
{
Console.WriteLine("Error! Please only write your answer in numbers..");
continue;
}
break;
}
if (temp < 82)
{
Console.WriteLine("The temperature is too cold, you would not enjoy the experience. Please raise the temperature..");
}
else if (temp > 87)
{
Console.WriteLine("The temperature is too hot, you would not enjoy the experience. Please lower the temperature..");
}
}
while (temp < 82 || temp > 87);
{
Console.WriteLine("The temperature is perfect. Enjoy your experience at the sauna.");
Console.Write("Press any key to quit...");
}
Console.ReadKey();
}
}
Laguna skrev:temp förblir alltid 0. Du lägger det du läser in i en variabel som heter fahr.
Hmm okej, Jag antar att det har någonting med att temp = 0? Okej hur får man att det sedan printas ut eller att det liksom kommer med i själva allt? Jag förstår inte riktigt vad som menas där.
Jag tror jag har fått det att fungera nu med rätt temperatur. Det jag har problem med nu är att första gången användaren skriver in temperaturen så måste jag skriva in det igen innan jag får något svar av programmet. Samma sak händer efter jag fått om det är för kallt/ varmt. Varför händer detta?
uppdaterad kod:
using System;
class program
{
public static double FahrToCels(int fahrs)
{
double celsius = (fahrs - 32) * 5 / 9;
return celsius;
}
public static void Main(string[] args)
{
Console.Title = "FahrTillCelsius - Emil K";
double temp = 0;
Console.WriteLine("Enter the temperature: ");
//int fahrenheit = Convert.ToInt32(Console.ReadLine());
do
{
while (true)
{
try
{
int fahrInput = int.Parse(Console.ReadLine());
temp = Convert.ToDouble(Console.ReadLine());
}
catch (Exception e)
{
Console.WriteLine("Error! Please only write your answer in numbers..");
continue;
}
break;
}
if (temp < 82)
{
Console.WriteLine("The temperature is too cold, you would not enjoy the experience. Please raise the temperature..");
}
else if (temp > 87)
{
Console.WriteLine("The temperature is too hot, you would not enjoy the experience. Please lower the temperature..");
}
}
while (temp < 82 || temp > 87);
{
Console.WriteLine("The temperature is perfect. Enjoy your experience at the sauna.");
Console.Write("Press any key to quit...");
}
Console.ReadKey();
}
}
Programmet gör precis som du skriver:
int fahrInput = int.Parse(Console.ReadLine());
temp = Convert.ToDouble(Console.ReadLine());
Du läser in en rad, gör om den till int och lägger resultatet i fahrinput. Sedan läser du in en rad, gör om den till double och lägger den i temp.
Laguna skrev:Programmet gör precis som du skriver:
int fahrInput = int.Parse(Console.ReadLine());
temp = Convert.ToDouble(Console.ReadLine());Du läser in en rad, gör om den till int och lägger resultatet i fahrinput. Sedan läser du in en rad, gör om den till double och lägger den i temp.
Aha okej nu tror jag att jag fick rätt på det. Så det jag gjorde var bara att lägga in en onödig rad där på första raden egentligen ? Då jag istället bara vill ta in användarens input och lägga den i temp så att programmet kan checka utifrån värdet där i. Har jag förstått rätt?
Jag tog bort den understa raden och skrev om den första till: temp = int.Parse(Console.ReadLine());.
Nu kom jag på att nu konverterar inte mitt program från Fahrenheit till Celsius längre. Hmm.
Har fått det att fungera nu. Tack för hjälpen :)