Räkna ut pension beroende på år som skrivs in i C#

Räkna ut pension beroende på år som skrivs in i C#

Sitter med denna uppgiften och dom vill veta hur mycket man får vid 58 års ålder. Det jag inte kan komma fram till är vad som menas med "Add 1 to age" boxen. Inte heller varför talen i lådorna är så lågt som 20000 när jag antar det som är start summan är 15000. Jag var tvungen att skriva om svars meddelandena med för dom bara förvirrade ännu mer. så här långt har jag kommit.

int age;
int money = 15000;
int savingsSoFar;

Console.Write("Enter age: ");
string typedAnswer = Console.ReadLine();
age = int.Parse(typedAnswer);

do
{

if (money < 20000 || age < 60)
{
Console.Write("You are saved little \n");
savingsSoFar = age * 500 + money;

}
else
{
Console.Write("You are saved a lot \n");
savingsSoFar = age * 1000 + money;

}

} while (money > 20000 && age < 65);
Console.WriteLine("You are retired in" + " " + (65-age) + " " + "Years.");
Console.WriteLine("You saved" + " " + savingsSoFar + " " + "dollars.");

Console.ReadKey();

Varken Money eller age ändrar värde och då kommer while loopen aldrig att avslutas.

Uppdatera Money med det nya beloppet som sätts varje år (alltså 1 varv i loopen) och uppdatera age med ett +1 för varje varv i loopen.

Dessutom, titta på ditt while 'condition'. Vad betyder while (money > 20000 && age < 65);

A) Fortsätt med ett nytt varv om money är mer än 20000?
eller
B) Fortsätt med ett nytt varv om money är mindre än 20000?

När borde man fortsätta med ett nytt varv?

@karu83:
Och när det är klart.
Titta på uttrycket if (money < 20000 || age < 60)

Stämmer det över flödesschemat?

Räkna ut pension beroende på år som skrivs in i C#
Skrivet av zoomster2:

Uppdatera Money med det nya beloppet som sätts varje år (alltså 1 varv i loopen) och uppdatera age med ett +1 för varje varv i loopen.

Okay, jag förstår. Jag är verkligen super nybörjare så hur får jag dom att ändra värde?
Trodde dom gjorde det med savingsSoFar = age * 500 + money; ?

Provat att skriva in age++; under men det hjälpte inte.

@karu83:
Det fungerar med age++; eller age = age +1;

Typ flöde

do { if (/* money over 20000 or age < 60*/) { // then save 500 per year } // else, under 20000 or over 60 years else { // then save 1000 per year } // increase one year per iteration age++; } while (/* loop while under 20000 and age < 65*/);

@karu83:
Och en hint.
Du behöver inte savingsSoFar. Enlgt flödeschemat fiinns inte savingsSoFar.

Öka på money per varv i loopen. Hur kan du öka på money med 500 eller 1000 per varv?

Skrivet av karu83:

Okay, jag förstår. Jag är verkligen super nybörjare så hur får jag dom att ändra värde?
Trodde dom gjorde det med savingsSoFar = age * 500 + money; ?

Provat att skriva in age++; under men det hjälpte inte.

Problemet är att du hela tiden adderar till variabeln savingsSoFar istället för att öka money.
Flödesschemat nämner endast att du i varje iteration ska addera endera 500 eller 1000 till money samt öka age med 1.

Nu när du endast inkrementerar age kommer ditt villkor i while aldrig att lösas ut då det måste vara sant att både money > 20000 och age < 65, men i ditt fall kommer money alltid att vara 15000.

Hint: Du har vänt din vinkelparentes åt fel håll i villkoret också; flödesschemat säger att det ska vara money < 20000

Senast redigerat 2020-08-12 19:48

@zoomster2:

Okay, jag förstår. jag kan se det i mitt huvud. problemet är att formulera det i kod. kollar på massa olika Youtube klipp för att få en hint om hur jag ska skriva men jag hittar inget som linkar just detta.

@karu83:
Så här uppdaterar man:

money = money + 500;
eller
money += 500;

@karu83:

Hur skulle du slutföra koden som nedan?

do { if (/* money over 20000 or age < 60*/) { // then save 500 per year // money = ... } // else, under 20000 or over 60 years else { // then save 1000 per year // money = .. } age++; } while (/* loop while under 20000 and age < 65*/);

@zoomster2: @noMad17:

Tack för hjälpen. Det var den delen som fattades.

Nu loopas det till man kommer till 65 med samma text "You are saved little \n" i consolen. Är det meningen?

@zoomster2:

if (money > 20000 || age < 60) { Console.Write("You are saved little \n"); money += 500; savingsSoFar = age * money; } else { Console.Write("You are saved a lot \n"); money += 1000; savingsSoFar = age * money; } age++; } while (money < 20000 && age < 65);

Har jag nu. Antar att savingsSoFar måste ändras med?

Skrivet av karu83:

@zoomster2: @noMad17:

Tack för hjälpen. Det var den delen som fattades.

Nu loopas det till man kommer till 65 med samma text "You are saved little \n" i consolen. Är det meningen?

Beror på din kod
Din kod gör det du har kodat.

Hur ser din kod ut nu?

Använd (utan mellanslag i taggarna nedan)
[code]
[/code ]

Skrivet av karu83:

@zoomster2:

if (money > 20000 || age < 60) { Console.Write("You are saved little \n"); money += 500; savingsSoFar = age * money; } else { Console.Write("You are saved a lot \n"); money += 1000; savingsSoFar = age * money; } age++; } while (money < 20000 && age < 65);

Har jag nu. Antar att savingsSoFar måste ändras med?

Ser bättre ut.
Varför använda savingsSoFar alls?. Money innehåller nu hur mycket pengar som är sparade.

Om du skulle byta ut
Console.Write("You are saved little \n");
till
Console.WriteLine($"You are saving 500 USD this year and at age {age} you saved in total {money} USD.");

Hur ser det ut då?

Skrivet av zoomster2:

Ser bättre ut.
Varför använda savingsSoFar alls?. Money innehåller nu hur mycket pengar som är sparade.

Om jag tar bort den så blir det ingen skillnad på om jag slår in 2 år eller 58 år av någon anledning.

int age; int money = 15000; Console.Write("Enter age: "); string typedAnswer = Console.ReadLine(); age = int.Parse(typedAnswer); do { if (money > 20000 || age < 60) { Console.Write("You are saved little \n"); money += 500; } else { Console.Write("You are saved a lot \n"); money += 1000; } age++; } while (money < 20000 && age < 65); Console.WriteLine("You are retired in" + " " + (65-age) + " " + "Years."); Console.WriteLine("You saved" + " " + money + " " + "dollars.");

något jag missat någon annan stans nu?

Skrivet av karu83:

Om jag tar bort den så blir det ingen skillnad på om jag slår in 2 år eller 58 år av någon anledning.

int age; int money = 15000; Console.Write("Enter age: "); string typedAnswer = Console.ReadLine(); age = int.Parse(typedAnswer); do { if (money > 20000 || age < 60) { Console.Write("You are saved little \n"); money += 500; } else { Console.Write("You are saved a lot \n"); money += 1000; } age++; } while (money < 20000 && age < 65); Console.WriteLine("You are retired in" + " " + (65-age) + " " + "Years."); Console.WriteLine("You saved" + " " + money + " " + "dollars.");

något jag missat någon annan stans nu?

Vi tar en sak i taget.
Är
Console.WriteLine("You are retired in" + " " + (65 - age) + " " + "Years.");
Verklgen samma som det som efterfrågas i flödeschemat?

Skrivet av zoomster2:

Vi tar en sak i taget.
Är
Console.WriteLine("You are retired in" + " " + (65 - age) + " " + "Years.");
Verklgen samma som det som efterfrågas i flödeschemat?

Nej, det är sant. Dom talar om att man når det vid en viss summa med. Ändra det till

Console.WriteLine("You are retired by the age of" + " " + age);

slår jag in 2år då så blir det 12 år som jag går i pension. låter lite underligt men.

Skrivet av karu83:

Nej, det är sant. Dom talar om att man når det vid en viss summa med. Ändra det till

Console.WriteLine("You are retired by the age of" + " " + age);

slår jag in 2år då så blir det 12 år som jag går i pension. låter lite underligt men.

Ja, men enligt flödesschemat slutar man spara året man har 20000 på banken eller fyllt 65 år.
Tolkar du det på samma sätt?

Skrivet av zoomster2:

Ja, men enligt flödesschemat slutar man spara året man har 20000 på banken eller fyllt 65 år.
Tolkar du det på samma sätt?

Ja, precis. Det har varit underligt från start. varför start summan är så hög/låg. tar ju bara ett eller två varv i loppen att uppnå 20000...

Skrivet av karu83:

Ja, precis. Det har varit underligt från start. varför start summan är så hög/låg. tar ju bara ett eller två varv i loppen att uppnå 20000...

Så hur ser din kod ut nu?

Skrivet av zoomster2:

Så hur ser din kod ut nu?

int age; int money = 15000; Console.Write("Enter age: "); string typedAnswer = Console.ReadLine(); age = int.Parse(typedAnswer); do { if (money > 20000 || age < 60) { Console.Write("You are saved little \n"); money += 500; } else { Console.Write("You are saved a lot \n"); money += 1000; } age++; } while (money < 20000 && age < 65); Console.WriteLine("You are retired by the age of" + " " + age); Console.WriteLine("You saved" + " " + money + " " + "dollars."); Console.ReadKey();

Skrivet av karu83:

int age; int money = 15000; Console.Write("Enter age: "); string typedAnswer = Console.ReadLine(); age = int.Parse(typedAnswer); do { if (money > 20000 || age < 60) { Console.Write("You are saved little \n"); money += 500; } else { Console.Write("You are saved a lot \n"); money += 1000; } age++; } while (money < 20000 && age < 65); Console.WriteLine("You are retired by the age of" + " " + age); Console.WriteLine("You saved" + " " + money + " " + "dollars."); Console.ReadKey();

Ok. Dags att städa upp.
Lägga på några best practise (och några'opiniated' ändraingar)

Best practise inom C#.

Du har
int age; och age = int.Parse(typedAnswer);
Varför inte slå ihop dessa till ett statement?
int age = int.Parse(.....

Du har
Console.Write("You are saved little \n");
Varför inte använda Console.WriteLine som automatiskt lägger skapar en ny rad efter det du skriver ut?

"Opiniated"
Du har Console.WriteLine("You are retired by the age of" + " " + age);
Kan förenklas med
A) Console.WriteLine("You are retired by the age of " + age);
B) Console.WriteLine("You are retired by the age of {0}", age);
C) Console.WriteLine($"You are retired by the age of {age}");

Samma med Console.WriteLine("You saved" + " " + money + " " + "dollars.");

Kanske dags att fixa engelskan
Antingen
"You are saving little" och "You are saving alot"
eller som jag liknande som jag föreslog i ett inlägg tidigare
Console.WriteLine($"You are saving 500 USD this year and at age {age} you have in total {money} USD.");
och
Console.WriteLine($"You are saving 1000 USD this year and at age {age} you have in total {money} USD.");

@zoomster2:

Tack så mycket. Mycket att tänka på och mycket nytt.

{ int money = 15000; Console.Write("Enter age: "); string typedAnswer = Console.ReadLine(); int age = int.Parse(typedAnswer); do { if (money > 20000 || age < 60) { Console.WriteLine("You are saving little \n"); money += 500; } else { Console.WriteLine("You are saving alot \n"); money += 1000; } age++; } while (money < 20000 && age < 65); Console.WriteLine($"You are retired by the age of {age}"); Console.WriteLine($"You saved {money} dollar."); Console.ReadKey(); }

Men koden är ok eller? för den bara visar 20000 vad jag än skriver in och när det skrivs ut i consolen så ser det inte så snyggt ut heller.... får ju 20000 som svar både om jag skriver in 58 år och 2 år.

Du kommer alltid få 20000 som svar, eventuellt så finns det någon ålder dom ger 20500. Åldern som det avslutar vid borde dock variera beroende på startålder. Dock finns det ingen garanti för att loopen någonsin kommer sluta

Skrivet av HerrNilsson54:

Du kommer alltid få 20000 som svar, eventuellt så finns det någon ålder dom ger 20500. Åldern som det avslutar vid borde dock variera beroende på startålder. Dock finns det ingen garanti för att loopen någonsin kommer sluta

Okay, som jag trodde när jag först såg det låga talet och start summan. tack för svar!

Skrivet av karu83:

@zoomster2:

Tack så mycket. Mycket att tänka på och mycket nytt.

{ int money = 15000; Console.Write("Enter age: "); string typedAnswer = Console.ReadLine(); int age = int.Parse(typedAnswer); do { if (money > 20000 || age < 60) { Console.WriteLine("You are saving little \n"); money += 500; } else { Console.WriteLine("You are saving alot \n"); money += 1000; } age++; } while (money < 20000 && age < 65); Console.WriteLine($"You are retired by the age of {age}"); Console.WriteLine($"You saved {money} dollar."); Console.ReadKey(); }

Men koden är ok eller? för den bara visar 20000 vad jag än skriver in och när det skrivs ut i consolen så ser det inte så snyggt ut heller.... får ju 20000 som svar både om jag skriver in 58 år och 2 år.

Så länge som flödesschemat är korrekt, och du har tolkat den korrekt.
Igen, hur tolkar du true/false blocket i flödesschemat på svenska? Gör ditt program detta?

Skrivet av zoomster2:

Så länge som flödesschemat är korrekt, och du har tolkat den korrekt.
Igen, hur tolkar du true/false blocket i flödesschemat på svenska? Gör ditt program detta?

Den fortsätt med ett nytt varv om money är mindre än 2000 och åldern är mindre än 65. Annars så avslutas den.

Skrivet av karu83:

Den fortsätt med ett nytt varv om money är mindre än 2000 och åldern är mindre än 65. Annars så avslutas den.

Alltså, när vi vänder på det du sa.
Avsluta om 20000 eller mer, eller om åldern är 65 eller över.

Programmering handlar om detaljer, tolkning av krav, ifrågasättande av kraven och ha all logik rätt. Man kan inte ha program som har nästan all logik rätt.
Normalt för en utvecklare skulle var som du precis gjorde, ifrågasätta sin kod och sen verifiera mot kraven. -"Har jag förstått allt rätt."

Senast redigerat 2020-08-12 21:58