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

Permalänk
Medlem

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

Permalänk

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?

Permalänk

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

Stämmer det över flödesschemat?

Permalänk
Medlem

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.

Permalänk

@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*/);

Permalänk

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

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

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

Permalänk
Medlem

@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.

Permalänk

@karu83:
Så här uppdaterar man:

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

Permalänk

@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*/);

Permalänk
Medlem

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

Permalänk
Medlem

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

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

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

Permalänk

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

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

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

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

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

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

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

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

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

Permalänk
Medlem

@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.

Permalänk

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

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

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

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

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