Programmering 1 c#. Beräkna hur långt tid det är kvar till pensionen med olika meddelanden för olikt antal år kvar.

Permalänk
Medlem

Programmering 1 c#. Beräkna hur långt tid det är kvar till pensionen med olika meddelanden för olikt antal år kvar.

class Program { static void Main(string[] args) { int num1, num2, sum; string /*answer1*/ answer2, answer3, answer4, answer5, answer6; //request name Console.Write("Please enter your first name: "); //input first name string name = Console.ReadLine(); Console.Write("And your last name, please. "); //input last name string surname = Console.ReadLine(); Console.WriteLine("Good day " + name + " " + ", how old are you? "); //show the inputs above num1 = int.Parse(Console.ReadLine()); //request age while adressing to first name num2 = 65; sum = num2 - num1; // answer1 = ("You have " + sum + " years left until retirement. Stay strong!"); //until retirement answer2 = ("You have been retired for " + -sum + "years."); //time retired answer3 = ("Have you even started to work?! Don´t fret, there´s a lotta years to come.... " + sum + "years."); answer4 = ("You´ve just entered adulthood. Better start thinking about saving for the golden years. " + sum + " " + "years. "); answer5 = ("Hopefully the crisis hasn´t kicked in and you think that buying something unnecessarily expensive all of a sudden. You´re almost there, stay strong. " + sum + "years to go." ); answer6 = ("Almost there." + sum + "is all you got left. "); // if (sum >= 0) // Console.WriteLine(name + ", " + answer1); if (sum < 0) Console.WriteLine(name + ", " + answer2); if (sum >= 47) Console.WriteLine(name + ", " + answer3); //if 0-18 ask if the person even has started to work yet if (sum >= 46) Console.WriteLine(name + ", " + answer4); //if 19-30 tell to better start thinking about saving for the pension if (sum <= 25) Console.WriteLine(name + ", " + answer5); //40++! Console.ReadLine(); } } }

Detta är min kod och allt här fungerar som den ska. Men jag vill lägga till en sak till.

if (sum <= 5) Console.Writeline(name + ", " + answer6); //5 years or less until retirement.

Men när jag lägger det på allt annat, så dyker ju answer5 även upp i konsolen. Hur löser jag det enklast att endast få answer6 utskrivet om man fyller i att man är över 60 år, men under 65?

Mvh Kristoffer

Permalänk
Medlem
Skrivet av koffe_o:

Detta är min kod och allt här fungerar som den ska. Men jag vill lägga till en sak till.
if (sum <= 5)
Console.Writeline(name + ", " + answer6); //5 years or less until retirement.

Men när jag lägger det på allt annat, så dyker ju answer5 även upp i konsolen. Hur löser jag det enklast att endast få answer6 utskrivet om man fyller i att man är över 60 år, men under 65?

Mvh Kristoffer

Använd CODE-taggarna i fortsättningen så får du snabbare hjälp.

class Program { static void Main(string[] args) { int num1, num2, sum; string /*answer1*/ answer2, answer3, answer4, answer5, answer6; //request name Console.Write("Please enter your first name: "); //input first name string name = Console.ReadLine(); Console.Write("And your last name, please. "); //input last name string surname = Console.ReadLine(); Console.WriteLine("Good day " + name + " " + ", how old are you? "); //show the inputs above num1 = int.Parse(Console.ReadLine()); //request age while adressing to first name num2 = 65; sum = num2 - num1; // answer1 = ("You have " + sum + " years left until retirement. Stay strong!"); //until retirement answer2 = ("You have been retired for " + -sum + "years."); //time retired answer3 = ("Have you even started to work?! Don´t fret, there´s a lotta years to come.... " + sum + "years."); answer4 = ("You´ve just entered adulthood. Better start thinking about saving for the golden years. " + sum + " " + "years. "); answer5 = ("Hopefully the crisis hasn´t kicked in and you think that buying something unnecessarily expensive all of a sudden. You´re almost there, stay strong. " + sum + "years to go."); answer6 = ("Almost there." + sum + "is all you got left. "); // if (sum >= 0) // Console.WriteLine(name + ", " + answer1); if (sum < 0) Console.WriteLine(name + ", " + answer2); if (sum >= 47) Console.WriteLine(name + ", " + answer3); //if 0-18 ask if the person even has started to work yet if (sum >= 46) Console.WriteLine(name + ", " + answer4); //if 19-30 tell to better start thinking about saving for the pension if (sum <= 25) Console.WriteLine(name + ", " + answer5); //40++! Console.ReadLine(); } }

Citat:

Hur löser jag det enklast att endast få answer6 utskrivet om man fyller i att man är över 60 år, men under 65?

Med en lite längre ifsats. I detta fall tror jag att den skulle vara så att om sum är större än 0 OCH sum är mindre än fem.

Om jag får vara lite extra petig så är det inte en "sum" (summa) då du subtraherar två termer. Det är en differens. För att göra det ännu enklare att läsa koden senare så är det bra att ha tydliga namn på sina variabler. "num1" borde heta exempelvis "userAge" och "num2" borde heta exempelvis "retirementAge".

Jag vill även passa på att rekommendera "else if". Det finns ingen poäng med att låta programmet gå igenom alla dessa if-satser då bara en av dessa ska ges som svar(?).

Det är även inget måste, snarare lite av ovanligheten, att lägga strängar inom parenteser.
Går alldeles utmärkt att skriva det enligt:

var myString = "You are" + 100 + "years old";

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

@Leedow:

else if fungerar jättebra. Jag vet bara inte hur jag ska formulera koden för att det är mindre än 5 år kvar till pension men mer än 0.

if (sum < 0) Console.WriteLine(name + ", " + answer1); else if (sum >= 47) Console.WriteLine(name + ", " + answer2); //if 0-18 ask if the person even has started to work yet else if (sum >= 46) Console.WriteLine(name + ", " + answer3); //if 19-30 tell to better start thinking about saving for the pension else if (sum <= 25) Console.WriteLine(name + ", " + answer4); //40++! else if (??????????) //60++ but younger than 65 Console.WriteLine(name + ", " + answer5);

Permalänk
Medlem

Läs på om Operators.
https://msdn.microsoft.com/en-us/library/6a71f45d.aspx

Så jag skulle läsa på om antingen || eller && operators.

lycka till!

(Ändrat)

Permalänk
Skrivet av bergann:

Läs på om Operators.
https://msdn.microsoft.com/en-us/library/6a71f45d.aspx

Så jag skulle läsa på om antingen || eller && operators.
Ett exempel som inte liknar din kod.

int a = 100; int b = 1; int c = 10; if(a > b || a > c) { Console.WriteLine("störst" + a); } Console.ReadLine(); }

Obs: Detta exemplet borde vara &&, i nuläget säger den att a är störst om den är större än NÅGON av de andra två (|| = eller, && = och)

Visa signatur

Primary setup: Fractal Define C || Asus Maximus VIII Hero Alpha || Skylake i7 @ 4.2GHz || Kingston HyperX 32GB || Asus GTX 1080Ti STRIX || Samsung 850 EVO 250GB, 860 EVO 1TB, WD Blue 2TB || EVGA G2 650W || Noctua NH-D15, 2x NF-A14, 1x NF-F12

Permalänk
Medlem
Skrivet av koffe_o:

@Leedow:

else if fungerar jättebra. Jag vet bara inte hur jag ska formulera koden för att det är mindre än 5 år kvar till pension men mer än 0.

if (sum < 0)
Console.WriteLine(name + ", " + answer1);

else if (sum >= 47)
Console.WriteLine(name + ", " + answer2); //if 0-18 ask if the person even has started to work yet

else if (sum >= 46)
Console.WriteLine(name + ", " + answer3); //if 19-30 tell to better start thinking about saving for the pension

else if (sum <= 25)
Console.WriteLine(name + ", " + answer4); //40++!

else if (??????????) //60++ but younger than 65
Console.WriteLine(name + ", " + answer5);

Du har rätt tänk iaf!
Det är exakt så som @bergann skriver.

Mer lätt information om hittar du längst ner på denna sida: https://msdn.microsoft.com/en-us/library/5011f09h.aspx

En if-sats tar ett uttryck och om det är sant så exekverar den koden i blocket.
Ett uttryck kan vara en eller många uttryck.

Ett uttryck:

int firstValue = 100; int secondValue = 10; if (firstValue > secondValue) { //Sant, då 100 är större än 10 }

Två uttryck med AND-operatorn:

int firstValue = 100; int secondValue = 10; int maxValue = 1000; if (firstValue > secondValue && firstValue < maxValue) { //Sant, då 100 är större än 10 OCH 100 är mindre än 1000. Med && så måste båda returnera sant för att det ska vara sant. }

Två uttryck med OR-operatorn:

int firstValue = 100; int secondValue = 10; int maxValue = 1000; if (firstValue > 200 || firstValue < maxValue) { //Sant, då 100 är mindre än 1000. Med || så måste minst ett av uttrycken vara sant för att det ska vara sant. //Första uttrycket är falskt men andra uttrycket är sant }

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

@Leedow: Mycket bra förklaring. Det här borde ta dig hela vägen in i mål!

Permalänk

Om du vill glänsa lite för läraren så läser du på om skillnaden mellan && och ||, respektive & och | (i användningen logiska villkor, inte bitvisa operatorer!) - sedan använder du likförbannat && och inte &

Permalänk
Medlem

@bergann:
Tack, jag har försökt med detta också.

else if (sum > 0 && sum <= 5) //60++ but younger than 65 Console.WriteLine(name + ", " + answer6); men både answer 5 och answer 6 blir answer4 när det skrivs ut. :( static void Main(string[] args) { int userAge, retirementAge, sum; string answer1, answer2, answer3, answer4, answer5, answer6; //request name Console.Write("Please enter your first name: "); //input first name string name = Console.ReadLine(); Console.Write("And your last name, please. "); //input last name string surname = Console.ReadLine(); Console.WriteLine("Good day " + name + " " + ", how old are you? "); //show the inputs above userAge = int.Parse(Console.ReadLine()); //request age while adressing to first name retirementAge = 65; sum = retirementAge - userAge; answer1 = ("You have been retired for " + -sum + " years."); //time retired answer2 = ("Have you even started to work?! Don´t fret, there´s a lotta years to come.... " + sum + " years."); answer3 = ("You´ve just entered adulthood. Better start thinking about saving for the golden years. " + sum + " years. "); answer4 = ("Hopefully the crisis hasn´t kicked in and you think that buying something unnecessarily expensive all of a sudden. " + sum + " years to go."); answer5 = ("Less than a decade!" + sum + " is all you got left. "); answer6 = ("Almost there." + sum + " years "); if (sum < 0) Console.WriteLine(name + ", " + answer1); else if (sum >= 47) Console.WriteLine(name + ", " + answer2); //if 0-18 ask if the person even has started to work yet else if (sum >= 46) Console.WriteLine(name + ", " + answer3); //if 19-30 tell to better start thinking about saving for the pension else if (sum <= 25) Console.WriteLine(name + ", " + answer4); //40++! else if (sum <= 10) Console.WriteLine(name + ", " + answer5); //55++! else if (sum > 0 && sum <= 5) //60++ but younger than 65 Console.WriteLine(name + ", " + answer6); Console.ReadLine(); } } }

Permalänk
Medlem

@koffe_o: Sitter på telefonen så det är svårt att komma med något vettig.
MEN, dina if-satser är inte så logiska.

Tex

else if (sum >= 47) Console.WriteLine(name + ", " + answer2); //if 0-18 ask if the person even has started to work

IF (om) sum är större eller lika med 47
Skriv ut name + answer 2.
Alltså om summan som du skriver in är större eller lika med 47
Får du ut texten
Answer2 = ("Have you even started to work?! Don´t fret, there´s a lotta years to come.... " + sum + " year

Men din kommentar vill ha ålder 0-18.

Permalänk
Medlem

@bergann:
svaret blev mer önskvärt med min kod tidigare än nu när jag ändrade till "rätt". Nu är answer 2 det enda jag får, oavsett ålder.

Permalänk
Medlem

@koffe_o: Hej.

Jo det är lite problematik i din kod.

Nummer 1. I din IF-sats ska det inte vara SUM utan num1 ska vara där.
Ett exempel
Om num1 är större eller lika med 19 ELLER num1 mindre eller lika med 30
Skriv då ut name + det som står i answer4

else if (num1 >= 19 && num1 <=30) Console.WriteLine(name + ", " + answer4)

Jag vill inte ge dig hela koden. Utan försök själv.
Förstår du?

num1 = Vad användaren knappar in
sum = Är num2 - num1.

Det här fungerar för att kolla hur länge han/hon har varit pensionär.
om num1 är större än 65. Alltså det användare knappar in, om det är större än 65
DÅ skriver den ut det som står i answer2.

else if (num1 > 65) Console.WriteLine(answer2); Console.ReadLine();

Permalänk
Medlem

@koffe_o: Det är säkert så att du tycker din kod fungerar bättre. Men tyvärr kommer du aldrig att lösa uppgiften som det ser ut nu.
Absolut inge illa menat. Ta till dig jag skrev i mitt inlägg ovanför och läs på om IF-satser och operatorer.
Men som sagt, det jag skrev ovanför är en storhjälp på traven. Där har du en bättre logik just för det här exemplet.
Jag är absolut ingen programmerare, är nybörjare jag själv.

Försöker hjälpa andra så kommer jag säkerligen lära mig mycket nytt

/ Bergan

Permalänk
Medlem

@bergann:
@eurythmech:
@Leedow :
@Dehumanisation:

Tack så mycket för hjälpen allesammans!
Jag försökte i flera timmar och slet mitt hår med era exempel.
Men efter att jag gått och lagt mig med läroboken en stund och andats lite frisk luft så löste det sig fint.

Jag hade inte gjort koden tillräckligt lättläst för mig själv, men nu är det löst och jag antar att jag hade alldeles för bråttom och fastnade vid småsaker som inte hade någon direkt betydelse.

Tack så mycket, ha det fint!