Permalänk

Amerikanen i bastun

Hej, behöver lite hjälp med min kod får den inte riktigt att fungera, vill först få den att fungera med INT tal. sen tänkte jag lägga till double samt try och catch.Jag försöker lista ut hur jag ska kunna göra så att loopen sparar värdet som användaren mattar in.

Mvh illiam

som killen nämner här:

"Den första gissningen kommer alltså aldrig användas för att kontrollera om loopen ska fortsätta eller ej, eftersom du alltid läser in ett nytt värde i slutet av loopen.

I det här fallet så behöver du inte ha inläsning på flera ställen i koden, utan det räcker med att läsa in värdet i början av loopen. D.v.s. du bör inte ha "första gissningen" som ett specialfall utanför loopen, utan hantera alla gissningar på samma sätt inne i loopen istället."

class MainClass
{

public static int FahrToCels(int fahr)
{

int celsius = (fahr - 32) * 5 / 9;
return celsius;

}
public static void Main(string[] args)
{
Console.WriteLine("Welcome");
Console.WriteLine("Enter the temperatur of the sauna in farenheit");

int fahr = int.Parse(Console.ReadLine());
int celsius = FahrToCels(fahr);

do
{

if (celsius < 73)
{
Console.WriteLine(" The current temperature is " + celsius + " which is to cold");
Console.WriteLine("Please raise the temperature in the sauna for comfort: ");

}

else if (celsius > 77)
{

Console.WriteLine(" The current temperature is " + celsius + " which is to hot");
Console.WriteLine("Please lower the temperature in the sauna for comfort: ");

}
else if (celsius == 75)

{

Console.WriteLine(" The current temperature is " + celsius + " which is perfect: ");

}
else
{

Console.WriteLine("You can no enjoy the Sauna,but for future refernce the optimal temp is 100 deggres celsius ");

}
} while (celsius <= 73 || celsius >= 77);

Console.WriteLine(" Program terminated ");

}
}
}

Permalänk
Medlem

Inget språk jag studerat, men ger min input:
Temp frågas endast en gång, i början.
Är temp "fel", dvs while (celsius <= 73 || celsius >= 77);
då kommer du fastna i loopen.

Jag ser då inte var programmet läser in temperatur innuti loopen.

Jag ser inget annat fel i koden.
Förslag på att lägga in:
Console.WriteLine(celcius);
typ innan do-loopen, mest för att veta vilket värde du har innan du kommer in i loopen.

Permalänk
Skrivet av Sions:

Inget språk jag studerat, men ger min input:
Temp frågas endast en gång, i början.
Är temp "fel", dvs while (celsius <= 73 || celsius >= 77);
då kommer du fastna i loopen.

Jag ser då inte var programmet läser in temperatur innuti loopen.

Jag ser inget annat fel i koden.
Förslag på att lägga in:
Console.WriteLine(celcius);
typ innan do-loopen, mest för att veta vilket värde du har innan du kommer in i loopen.

Okey har ändrat lite nu men, kommer fortfarande inte på hur jag ska göra så att den lagrar svaret i loopen. för att nu looper den bara och försätter att skriva ut texten. Måst jag skapa en till variable typ INT newtemp eller något.

public static int FahrToCel(int fahr)
{
int ce = (fahr - 32) * 5 / 9;
return ce;
}

public static void Main(string[] args)
{
Console.WriteLine("Hello!");
Console.WriteLine("Please enter the current temp in farenheit: ");

int MinDeg = 73;
int MaxDeg = 77;
int OptimalDeg = 75;
int fahrenheit = int.Parse(Console.ReadLine());
int celsius = FahrToCel(fahrenheit);
Console.WriteLine(celsius);

do
{

if (celsius < MinDeg)
{
Console.WriteLine("The temperature in the sauna is {0}C.", celsius);
Console.WriteLine("which is to cold, please raise the temp");

}

else if (celsius > MaxDeg)
{

Console.WriteLine("The temperature in the sauna is {0}C.", celsius);
Console.WriteLine("which is to warm, please lower the temp");

}
else if (celsius == OptimalDeg)

{

Console.WriteLine("The temperature in the sauna is {0}C.", celsius);
Console.WriteLine("which is the optimal temp for the sauna");

}
else
{

Console.WriteLine("You can no enjoy the Sauna,but for future refernce the optimal temp is 100 degrees celsius ");

}
} while (celsius < MinDeg || celsius > MaxDeg);

Console.WriteLine(" Program terminated ");

}
}
}

Permalänk
Medlem

@Will Sheza C: Se detta svar i en annan tråd om samma uppgift, och sen detta svar när du gjort samma misstag som alla andra och flyttat in för mycket i loopen

Permalänk
Medlem

En loop är som namnet antyder, att den går runt.
I detta fallet så länge Celsius inte är inom rätt intervall.
Men "gissar" du fel i början av programmet så kommer Celsius aldrig ändras.
Efter "do" så börjar loopen, när du kommer ner till "while" så har Celsius aldrig ändras.
Så länge Celsius inte ändras så kommer du inte komma ut ur loopen.

Du måste helt enkelt fråga efter en ny gissning inom loopen.

Gillar igentligen inte att svara på skoluppgifter, men hoppas du tänkte till själv innan du frågar annars kommer du få det svårt på slutprovet.

Permalänk

Hej har ändrat det nu och det funkar förutom att decimaler inte skrivs ut samt om man skriver in "hej" skrivs det ut att det är för kallt.vad ska jag tänka på för att det ska fungera.ge mig en ledtråd tack

class MainClass
{

static double FahrToCelsius(double fahr)
{
double celsius = ((fahr - 32) * 5) / 9;
return celsius;
}
static void Main(string[] args)
{

Console.WriteLine("Hello and welcome into the sauna ");

int MinDeg = 73;
int MaxDeg = 77;
int OptimalDeg = 75;

int temperature = 0;
double celsius,fahr;

do
{

Console.WriteLine("Please enter the current temp in farenheit: ");
try
{
fahr = Convert.ToDouble(Console.ReadLine());
celsius = FahrToCelsius(fahr);
temperature = (int)Math.Round(celsius, 1);

}

catch (Exception Wrongnumeral)
{
Console.WriteLine("You can only enter variables!");
Console.WriteLine(Wrongnumeral);
}

if (temperature < MinDeg)
{
Console.WriteLine("The temperature in the sauna is {0}C.", temperature);
Console.WriteLine("which is to cold, please raise the temp");

}

else if (temperature > MaxDeg)
{

Console.WriteLine("The temperature in the sauna is {0}C.", temperature);
Console.WriteLine("which is to warm, please lower the temp");

}
else if (temperature == OptimalDeg)

{

Console.WriteLine("The temperature in the sauna is {0}C.", temperature);
Console.WriteLine("which is the optimal temp for the sauna");

}
else
{

Console.WriteLine("You can now enjoy the Sauna,but for future refernce the optimal temp is 100 degrees celsius ");
Console.WriteLine(" Program terminated ");

}
} while (temperature <= MinDeg || temperature >= MaxDeg);

Console.ReadKey();

}
}
}

Permalänk
Medlem
Skrivet av Will Sheza C:

Hej har ändrat det nu och det funkar förutom att decimaler inte skrivs ut samt om man skriver in "hej" skrivs det ut att det är för kallt.vad ska jag tänka på för att det ska fungera.ge mig en ledtråd tack

class MainClass
{

static double FahrToCelsius(double fahr)
{
double celsius = ((fahr - 32) * 5) / 9;
return celsius;
}
static void Main(string[] args)
{

Console.WriteLine("Hello and welcome into the sauna ");

int MinDeg = 73;
int MaxDeg = 77;
int OptimalDeg = 75;

int temperature = 0;
double celsius,fahr;

do
{

Console.WriteLine("Please enter the current temp in farenheit: ");
try
{
fahr = Convert.ToDouble(Console.ReadLine());
celsius = FahrToCelsius(fahr);
temperature = (int)Math.Round(celsius, 1);

}

catch (Exception Wrongnumeral)
{
Console.WriteLine("You can only enter variables!");
Console.WriteLine(Wrongnumeral);
}

if (temperature < MinDeg)
{
Console.WriteLine("The temperature in the sauna is {0}C.", temperature);
Console.WriteLine("which is to cold, please raise the temp");

}

else if (temperature > MaxDeg)
{

Console.WriteLine("The temperature in the sauna is {0}C.", temperature);
Console.WriteLine("which is to warm, please lower the temp");

}
else if (temperature == OptimalDeg)

{

Console.WriteLine("The temperature in the sauna is {0}C.", temperature);
Console.WriteLine("which is the optimal temp for the sauna");

}
else
{

Console.WriteLine("You can now enjoy the Sauna,but for future refernce the optimal temp is 100 degrees celsius ");
Console.WriteLine(" Program terminated ");

}
} while (temperature <= MinDeg || temperature >= MaxDeg);

Console.ReadKey();

}
}
}

Jag kommer ge samma råd som jag ger till alla nybörjare. Lär dig använda debuggern, det tar dig 10 minuter att förstå principen med det och det är guld värt för att kunna felsöka i kod och bli självständig. Det är ett måste att lära sig använda.
Dokumentationen finns här https://docs.microsoft.com/en-us/visualstudio/debugger/debugg...
Video finns här https://youtu.be/sACkw915kmg?t=150

Anledningen till varför det är för kallt skrivs ut är för att om du skriver "hej" så fångar du det i ditt catch block.
Sedan kommer alla if-satser efter det att exekveras. Temperature är satt som default till 0, vilket då kommer att vara ditt jämförelsevärde om användaren misslyckades att ange ett nytt. Varav 0 < 73 (temperatur < minDeg) i din första if-sats.
Istället kan du sätta en continue i slutet av ditt catch-block, då kommer loopen att börja om från början om fel värde har angivits av användaren.

Decimaler skrivs inte ut för temperature är en int och int är endast heltal.

Permalänk
Skrivet av zaibuf:

Jag kommer ge samma råd som jag ger till alla nybörjare. Lär dig använda debuggern, det tar dig 10 minuter att förstå principen med det och det är guld värt för att kunna felsöka i kod och bli självständig. Det är ett måste att lära sig använda.
Dokumentationen finns här https://docs.microsoft.com/en-us/visualstudio/debugger/debugg...
Video finns här https://youtu.be/sACkw915kmg?t=150

Anledningen till varför det är för kallt skrivs ut är för att om du skriver "hej" så fångar du det i ditt catch block.
Sedan kommer alla if-satser efter det att exekveras. Temperature är satt som default till 0, vilket då kommer att vara ditt jämförelsevärde om användaren misslyckades att ange ett nytt. Varav 0 < 73 (temperatur < minDeg) i din första if-sats.
Istället kan du sätta en continue i slutet av ditt catch-block, då kommer loopen att börja om från början om fel värde har angivits av användaren.

Decimaler skrivs inte ut för temperature är en int och int är endast heltal.

OKey tack men vad menar du med en continue i slutet av min "catch"?

Permalänk

Har löst allt nu tack så mycket för all hjälp ni är guld

class MainClass
{

static double FahrToCelsius(double fahr)
{
double celsius = ((fahr - 32) * 5) / 9;
return celsius;
}
static void Main(string[] args)
{

Console.WriteLine("Hello and welcome into the sauna ");

int MinDeg = 73;
int MaxDeg = 77;
int OptimalDeg = 75;

double temperature = 0;
double celsius,fahr;

do
{

Console.WriteLine("Please enter the current temperature in farenheit");

try
{

fahr = Convert.ToDouble(Console.ReadLine());
celsius = FahrToCelsius(fahr);
temperature = (double)Math.Round(celsius, 1);

}

catch (FormatException ex)
{

Console.WriteLine("An Error has occured: You can only enter variables!");
continue;

}

if (temperature < MinDeg)
{
Console.WriteLine("The temperature in the sauna is {0} degrees celsius.", temperature);
Console.WriteLine("which is to cold, please raise the temp");

}

else if (temperature > MaxDeg)
{

Console.WriteLine("The temperature in the sauna is {0}degrees celsius.", temperature);
Console.WriteLine("which is to warm, please lower the temp");

}
else if (temperature == OptimalDeg)

{

Console.WriteLine("The temperature in the sauna is {0}degrees celsius.", temperature);
Console.WriteLine("which is the optimal temp for the sauna");

}
else
{
Console.WriteLine("The temperature in the sauna is {0}degrees celsius.", temperature);
Console.WriteLine("You can now enjoy the Sauna,but for future refernce the optimal temp is 100 degrees celsius ");
Console.WriteLine("Program terminated ");

}
} while (temperature <= MinDeg || temperature >= MaxDeg);

Console.ReadKey();

}
}
}

Permalänk
Medlem
Skrivet av Will Sheza C:

OKey tack men vad menar du med en continue i slutet av min "catch"?

continue är ett s.k. control-statement som innebär att en loop börjar om från början utan att exekvera någon eventuell logik som annars skulle ha exekverats. Ett annat control-statement är break som istället avbryter loopen.

T.ex.

while (someCondition) { // Logik if (someOtherCondition) { continue; // Avbryt nuvarande iteration och hoppa tillbaka till början av while-loopen } // Logik här kommer inte att köras om vi nådde "continue" }

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W