c# loop problem, någon kunnig?

Permalänk
Medlem

c# loop problem, någon kunnig?

Jag har fastnat på olika smådelar i denna kod.
Först o främst representerar programmet ett schema där användaren väljer 0, 1 eller 2.
0 stänger ner programmet och 1 så hämtar sopbilen varannan vecka, medans val 2 så hämtar sopbilen var 6: e vecka.

1. Det jag fastnat på är i ReadIntegerValue() metoden, while loopen där 'weeks' inte blir assignad 2 eller 6(veckor) beroende på 'value' 1 eller 2.
meningen är att weeks ska användas till for-loopen så att det skriver ut resultatet.

2. Det är något jag gör fel, förtillfället går inte loopen alls antingen körs den alltid en gång(även om jag väljer 0 eller blir oändliga loops), eller så körs den inte alls.

3 sen verkar inte 'index += weeks' incrementet fungera alls på grund av att weeks på något sätt inte blir satta värdena 2 eller 6.

Om någon snäll o kunig person skulle kunna hjälpa mig, är jag väldigt tacksam.

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Assignment_2 { class WasteSchedule { /// <summary> /// Input Variables /// </summary> private int numOfInput; /// <summary> /// output Variables /// </summary> private int weeks; /// <summary> /// Reads private method and make those callable. /// </summary> public void Start() { ReadInput(); ReadIntegerValue(); CalculateWeeksResults(); } /// <summary> /// Reads the input integer by the user /// </summary> /// <param name="numOfInput">Input - a given choice frum user.</param> /// <returns>The integer value from the console.</returns> private void ReadInput() { Console.WriteLine("\n\nChoose type of trash bin:"); Console.WriteLine("\n\nBin no 1. Kitchen trash, household wastes(every other week"); Console.WriteLine("Bin no 2. Paper, carton packages, yard wastes, ect(every 6th week)"); Console.WriteLine("0 to exit program"); numOfInput = int.Parse(Console.ReadLine()); Console.WriteLine(); } /// <summary> /// Take the integer and put it in the while-loop. /// Value 0 for quiting the program. Value 1 for for week = 2. value 2 for week to be = 6. /// </summary> /// <param name="num">num = numOfInput from previous ReadInput() method.</param> /// <param name="value">The value should be 0, 1 or 2</param> /// <param name="weeks">if value 1 then week is assigned to 2, if value 2 then week is assigned to 6</param> private void ReadIntegerValue() { bool done = false; //initiation int value = 0; //for the input while (!done)// { value = numOfInput; if (value == 0) { done = true; //quits the program } else if (value == 1) { weeks = 2; } else if (value == 2) { weeks = 6; } } } /// <summary> /// A for that is looping if the value is 1 or 2. /// If other value, the for-loop should not run. /// </summary> /// <param name="weeksInYear">Max weeks in a year. If index max year - end the loop.</param> /// <param name="index">index starting at 1 = first week in a year. </param> /// <param name="weeks">adding to index increment, so the index should either increase to 2 or 6 per loop </param> private void CalculateWeeksResults() { int weeksInYear = 52; int index; for (index = 1; index <= weeksInYear; index += weeks) { Console.Write("{0,15} {1,2}", "Week", index); } } } }

kallelsen av metoden fungerar på en annan klass och fungerar bra.

Permalänk
Medlem
Skrivet av Bennon:

1. Det jag fastnat på är i ReadIntegerValue() metoden, while loopen där 'weeks' inte blir assignad 2 eller 6(veckor) beroende på 'value' 1 eller 2.
meningen är att weeks ska användas till for-loopen så att det skriver ut resultatet.

Din ReadIntegerValue() här.. den kommer ju alltid att fastna i denna loopen om du inte ska avsluta.. du har ett knepigt villkor för satsen. Du måste ändra din "done-variabel" i varje utfall av satsen, skulle jag föreslå.

while (!done)// { value = numOfInput; if (value == 0) { done = true; //quits the program } else if (value == 1) { weeks = 2; } else if (value == 2) { weeks = 6; } }

.. kan du kanske skriva som..

value = numOfInput; if (value > 1) weeks = 6; if (value > 0) weeks = 2;

Jag kanske missförstår programmet?

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk
Medlem

Den loopen känns helst meningslös? Om du t.ex. har skrivit 1 så kommer loopen fortsätta i all oändlighet att sätta weeks till 2. Den kommer aldrig gå ur loopen.

Permalänk
Medlem

private void CalculateWeeksResults()

Inuti denna kanske du ska kolla din "done" i en inledande if-sats, och om satt till false (!true) , så kör du koden annars kör du ingen kod..

Detta borde du kunna lösa själv..

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk
Medlem

Behöver du en loop där över huvud taget?

Du har ju bara ett värde att kolla, dvs numOfInput och det ändras aldrig medan du loopar så loopen är helt onödig vad jag kan se.

Visa signatur

He who hasn't hacked assembly language as a youth has no heart. He who does so as an adult has no brain.
~John Moore

Permalänk
Medlem

Som dom andra har sagt så fastnar programmet i din while-loop som i sin tur ser rätt meningslös ut

Skickades från m.sweclockers.com

Permalänk
Medlem

Du sätter ju aldrig done till true i dina else if-satser, alltså kommer du aldrig komma ur loopen om användaren väljer något av dessa val.

Visa signatur

Stationär: i5 2500K @ 4.3 GHz / GTX570 / 8GB @ 1600MHz / P8Z68-V Pro / 120GB SSD + 320 GB HDD / HX650 / FD Define R3 / W7 64 bit
Bärbart: 13.3" MacBook Pro / iPhone 4 / Nikon D80 + 18-135/3.5-5.6 + 50/1.8D
Hemmabio: Samsung 40" UE40D6515 / Yamaha RX-V465 + Canton GLE 490 (MW)
Kaffe: Moccamaster KB741 || Planerat: Rancilio Silvia + Gaggia MDF

Permalänk
Medlem

Ett tips är att sätta ut brytpunkter (klicka ute i vänsterkanten vid en kodrad) och sedan stega (F11, F10) genom programmet för att få en förståelse för vad som händer i programmet.

Permalänk
Medlem

hej alla, tack för era svar, jag har tagit åt det saker ni har sagt o specielt med den där konstiga while loopen som ni tycker är värdelöst. Varför jag har en loop är för att menyn ska upprepas tills någon trycker 0. Det är därför jag inte har satt en done = true där då while(menyn kommer att stänga av sig själv) samtidigt måste den ju ju stanna eveighetsloopen när man tex har tryckt 1 eller 2. Har ni några förslag hur jag skulle kunna ändra koden?

Permalänk
Medlem

ah fixade det, gjorde lite små ändringar i while loopen och whips var det klart.
tack alla för hjälpen.