AKUT HJÄLP med tärningssimulator C#

Permalänk

AKUT HJÄLP med tärningssimulator C#

HEJ hoppas jag kan få lite hjälp med min tärningssimulator, väldigt ont om tid och jag sitter fast och vet ej hur jag ska lösa problemet. Detta e vad jag har gjort hittills. Jag ska alltså skapa en tärningssimulator som ett antal tärningar, beroende på hur många tärningar användaren väljer att kasta, max är 5, och programmet skriver även ut totalsumman av de kastade tärningarna. Men får någon av tärningarna siffran 6 så ska detta inte adderas till totalsumman, det ska alltså inte sparas i myList utan istället ska då två nya tärningar kastas och det är detta jag inte får till!! Har gjort allt jag kan komma på men ingenting funkar.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace uppgift { class Program { static int RullaTärning(Random slumpObjekt) { int siffra = slumpObjekt.Next(1, 7); return siffra; } static void Main() { Random slump = new Random(); List<int> tärningar = new List<int>(); Console.WriteLine("\n\tVälkommen till tärningsgeneratorn\n\tBörja med att välja nr 1 i menyn, \n\tvälj därefter hur många tärningar du vill slå (max är 5). \n\tFår du en sexa slås tärningen om två gånger."); bool kör = true; while (kör) { Console.WriteLine("\n\t[1] Rulla tärning\n" + "\t[2] Kolla vad du rullade\n" + "\t[3] Avsluta"); Console.Write("\tVälj: "); int val; int.TryParse(Console.ReadLine(), out val); switch (val) { case 1: Console.Write("\n\tHur många tärningar vill du rulla: "); bool inmatning = int.TryParse(Console.ReadLine(), out int antal); if (antal < 6) { for (int i = 0; i < antal; i++) { tärningar.Add(RullaTärning(slump)); } foreach (int tärning in tärningar) //HÄR DYKER PROBLEMET UPP och jag har bara gjort det som jag tror men de fungerar ej och det jag vill göra är då alltså att för varje 6a istället slå två nya tärningar { if (tärning == 6) { Console.WriteLine("Du fick en sexa! Två nya tärningar slås"); RullaTärning(slump); RullaTärning(slump); } } } else { Console.WriteLine("\n\tMax antal tärningar är 5! Försök igen"); } break; case 2: int sum = 0; if (tärningar.Count <= 0) { Console.WriteLine("\n\tDet finns inga sparade tärningsrull! "); } else { Console.WriteLine("\n\tRullade tärningar: "); foreach (int tärning in tärningar) { Console.WriteLine("\t" + tärning); sum += tärning; } Console.WriteLine("\n\tSumman av alla tärningsrull: " + sum); } break; case 3: Console.WriteLine("\n\tTack för att du rullade tärning!"); Thread.Sleep(1000); kör = false; break; default: Console.WriteLine("\n\tVälj 1-3 från menyn."); break; } } } } }

Permalänk
Medlem

Liten hint: du anropar RullaTärning() två gånger vid sexa, men kastar returvärdet och inget annat händer.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Medlem

Hej och välkommen till forumet!

När du klistrar in kod, slå in den i [code]-taggar, annars blir den svårläst eftersom indenteringen försvinner och den inte får monospace-font. Exempel:

namespace Foo { // … }

Redigera gärna ditt inlägg enligt ovanstående.

Ditt problem går att lösa på flera olika sätt.

Ett skulle vara att justera koden där du tar hand om värdet 6 och faktiskt lägga de två nya talen till listan:

tärningar.Add(RullaTärning(slump)); tärningar.Add(RullaTärning(slump));

Ett annat hade varit att ta hand om det redan när det slumpas fram, d.v.s. inte returnera värdet 6 utan istället summan av två tal, som ett resultat av att det första slumpade talet blev en 6:a.

Permalänk

@Dimman: Om jag förstår rätt menar du att jag istället ska skriva tärningar.Add(RullaTärning(slump)); ?? Då kraschar programmet och det står "Mängden har ändrats. Det går inte att köra uppräkningsåtgärden."

Permalänk

@MickeBoy: Heejj tackk! Blev precis medlem och fattar ej hur jag ska göra det vad är code-taggar fattar ej?
när jag istället skriver tärningar.Add(RullaTärning(slump)); så kraschar programmet för att "mängden har ändrats". Du beskrev exakt det jag vill göra, jag vill kasta värdet 6 och istället slumpa fram två nya tal men vet ej hur jag ska gå till väga i praktiken ??

Permalänk
Medlem

Han menar att när du klistrar in kod här på forumet så skriv koden inom taggarna så formateras den bättre (dvs är lättare för oss att läsa).

Kort svar (sorry, sitter på mobilen); det finns flera problem med din kod. Det du stöter på med kraschen handlar om att du kan inte modifiera ’tärningar’ under tiden du loopar över den. Du har foreach tärning in tärningar, där inuti kan du inte modifiera tärningar. Ska du modifiera (lägga till/ändra/ta bort i listan) så måste du göra det utanför loopen.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Medlem

@najgomman: code-taggarna fungerar så här:
[code]
Kod här
[/code]

Detta ger:

Kod här

Permalänk

@Dimman: Jag förstår vad du menar, men vet inte hur jag ska skriva om den. Har testat massa saker men ingenting fungerar som jag vill att det ska. Har testat byta loop och flytta RullaTärning innanför och utanför olika loopar :(((

Permalänk

@perost: Tack!!!! har fixat det nu

Permalänk
Medlem

Hej Najgomman! Jag vet nog exakt vad du gör den här uppgiften för då jag blev given samma. Mitt tips till dig är att köra en rekursiv metod med antal tärningar som argument. När det blir en sexa så kallar metoden då sig själv två gånger på nytt. Om det nu är så att det är samma uppgift så kan jag också tipsa om att läsa uppgiften igen och se om det inte står att all kod ska vara på engelska(även kommentarer men du har inga)

Skickades från m.sweclockers.com

Permalänk

@Haesst: jaaa det verkar som det är samma. Vet att det ska vara på engelska men använde mig av en gammal uppgift jag hade som var liknande så har ej ändrat allt än, men ska fixa det så fort jag har löst huvudproblemet!! Tack för hjälpen men måste säga att jag fattar ingenting "en rekursiv metod med antal tärningar som argument", fattar 0. Är väldigt färsk på det här området så behöver typ seriöst klara lösningar :((( Behöver bara få programmet att kasta två tärningar när en 6a uppstår sedan är det komplett, men kan inte göra det på egen hand för jag förstår inte vad jag ska ändra

Permalänk

@Mordekai: ojjjj wow tack!!! Funkar jätte bra!! men är det inte uppenbart att detta inte är nybörjarnivå ??

Permalänk
Medlem
Skrivet av najgomman:

@Mordekai: ojjjj wow tack!!! Funkar jätte bra!! men är det inte uppenbart att detta inte är nybörjarnivå ??

Det var lite buggar i (fel vid multipla sexor exempelvis), dessa är fixade.

Stega igenom koden med en massa breakpoints så att du förstår vad som händer.

Frågan är vad som händer om man slår en sexa efter man slagit en sexa, jag antog att man då fick två nya slag osv.

Det som visas är rött för sexor, mörkrött för sexor som slagits som bonusslag för en sexa och grönt för slag som är bonusslag men inte sexor.

Det är inte så komplicerat egentligen utan bör klassas som nybörjarkod. Inget rekursivt en enkel funktion för tärningen. Lite snyggare menyer/hantering.

Det är inte ens en rekursiv funktion i vilket jag anser helt onödigt. Personligen är jag mot rekursiva funktioner eftersom de är helt opålitliga vid minnesallokering och prestanda och kan göra koden svårläst. Dessutom inte tillämpligt då vill visa alla tärningsslag.

Permalänk
Medlem

Du lär dig inget av att andra löser dina skoluppgifter...

Permalänk
Medlem
Skrivet av Sholdar:

Du lär dig inget av att andra löser dina skoluppgifter...

Helt fel. Alla lär sig olika. För mig är det bästa sättet att lära mig att studera andras lösningar. Dock måste man ju såklart lägga ner energin på att förstå hur den lösningen fungerar. Bäst är det ju om man skriver om eller tar delar av den andra lösningen. Lite som att lösa ett pussel mha bilden på kartongen.

Moralmästrande har inget med inlärning att göra.

Permalänk

@Mordekai: jo jag läser och jag lär försöker förstå vad alla individuella koder gör. Men det verkar funka som det ska iallafall, ska göra den lite mer personlig utseendemässigt o så. Detta är min backup såvida jag inte lyckas fixa mitt egna amatörprogram eller kombinera dem på ngt sätt. Så tusen tack för denna!!!!!

Permalänk

@Sholdar: ojjjjj det visste jag inte men där lärde jag mig sannerligen ngt nytt!!!!!! tack för det hahahahaha

Permalänk
Medlem

Många trådar om tärningssimulator senaste dagarna, är det något antagningsprov eller slutuppgift i gymnasieprogrammering?

Skickades från m.sweclockers.com

Permalänk
Hedersmedlem

Jag använder programmeringsuppgifter som en del i rekrytering. Det första man gör när man får en lösning är att googla valda delar som är centrala för funktionaliteten. Man brukar få någon match. Alla googlar lösningar. Men om man då ser att hela koden är klippt och klistrad så brukar jag konfrontera kandidaten med det och det brukar inte gå så bra för dem.

Vid rekrytering vill jag se kandidatens kod. Om man inte själv skrivit koden, inte skrivit kommentarer, inte gjort något tillägg är det ingen mening att diskutera koden med kandidaten och det finns inget för mig som anställande chef att bedöma utifrån hur bra utvecklare man är.

Jag gissar (hoppas) att det samma gäller för skoluppgifter som är betygsgrundande eller ett antagningsprov. Tillför du inget själv till lösningen så bör det vara ett F oavsett om du har löst uppgiften.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
99:e percentilen
Skrivet av MickeBoy:

Hej och välkommen till forumet!

När du klistrar in kod, slå in den i [code]-taggar, annars blir den svårläst eftersom indenteringen försvinner och den inte får monospace-font. Exempel:

namespace Foo { // … }

Redigera gärna ditt inlägg enligt ovanstående.

Då jag känner igen detta inlägg tar jag mig friheten att upplysa om att det saknar det viktigaste:

[code] namespace Foo { // … } [/code]

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
Skrivet av zaibuf:

Många trådar om tärningssimulator senaste dagarna, är det något antagningsprov eller slutuppgift i gymnasieprogrammering?

Skickades från m.sweclockers.com

Oftast gymnasiekurser skulle jag tro. Beror på språk och skola. Brukar väl vara en blandning av denna tärningssimulator, läskbacken, kortleken och troligen någon annan uppgift jag glömt att någon frågat om.

Visa signatur

i7 4790k | Asus Z97M-Plus | 16gb ram | Asus Strix 970 | Phanteks PH-TC12DX | Samsung 850 Evo 250gb | Corsair Force GS 120gb | Fractal Design Integra M 650w | Fractal Design Define Mini C

Permalänk
Moderator
Testpilot

* Hel lösning till uppgift raderad *

@Mordekai: Vi har valt att ta bort ditt inlägg, även om det inte direkt uppenbart bryter mot några av våra forumregler så är det tydligt att detta enbart kan betraktas som fusk för den som använder sig av det till sin skoluppgift.

Hjälp gärna till på ett sätt som gör att TS själv kan komma fram till lösningen. Att bli serverad lösningen på ett fat främjar inte lärande.

MVH
Dinoman
Moderator

Visa signatur

ASrock x470 Taichi Ultimate - AMD Ryzen R9 3900x - G.Skill Ripjaws@3.6GHz 16GB RAM - RTX 3080 Ti - Super Flower Leadex Gold 1000W - Phanteks Enthoo Pro - AOC AG35UCG 34" 3440x1440p@100Hz - kalaset vattenkylt

Permalänk
Medlem
Skrivet av Dinoman:

@Mordekai: Vi har valt att ta bort ditt inlägg, även om det inte direkt uppenbart bryter mot några av våra forumregler så är det tydligt att detta enbart kan betraktas som fusk för den som använder sig av det till sin skoluppgift.

Hjälp gärna till på ett sätt som gör att TS själv kan komma fram till lösningen. Att bli serverad lösningen på ett fat främjar inte lärande.

MVH
Dinoman
Moderator

Jag tycker du är ute och cyklar. Jag lär mig bäst genom ett se en hel lösning. På så sätt lär jag mig andra knep och ser ett sammanhang. Att som programmera lära sig att skriva bra kod handlar i första hand om att studera andras kod, inte famla i blindo. Verkligheten för en programmerare som vill utvecklas är att google är din bästa vän. Den som sitter kvar med bokkunskap blir snabbt akterseglad. Det är klart att det är fusk om man helt sonika kopierar koden och lämnar in. Det är upp till TS och inte moralister att avgöra om det är vad han vill. Lär han sig förstå koden är det bara ett mekaniskt arbete att själv skriva den, det är inte programmering. Merparten av programmering är tankeverksamheten kring hur man löser ett problem, det rent praktiska är att klippa och klistra från egen och andras kod eller skriva nytt, inlärningsmässigt är det ingen skillnad. Dessutom kan de hjälpa andra med samma problem att se en annan lösning än deras egen.

Permalänk
Medlem

Wow jag missade helt att jag svarat i två olika trådar. Lösningen med lite otäcka buggar finns i denna tråd. Radera gärna mitt inlägg då det finns ett obehagligt fel som kan vara svårt att hitta.
#17911035

Permalänk
Medlem
Skrivet av Mordekai:

Jag tycker du är ute och cyklar. Jag lär mig bäst genom ett se en hel lösning. På så sätt lär jag mig andra knep och ser ett sammanhang. Att som programmera lära sig att skriva bra kod handlar i första hand om att studera andras kod, inte famla i blindo. Verkligheten för en programmerare som vill utvecklas är att google är din bästa vän. Den som sitter kvar med bokkunskap blir snabbt akterseglad. Det är klart att det är fusk om man helt sonika kopierar koden och lämnar in. Det är upp till TS och inte moralister att avgöra om det är vad han vill. Lär han sig förstå koden är det bara ett mekaniskt arbete att själv skriva den, det är inte programmering. Merparten av programmering är tankeverksamheten kring hur man löser ett problem, det rent praktiska är att klippa och klistra från egen och andras kod eller skriva nytt, inlärningsmässigt är det ingen skillnad. Dessutom kan de hjälpa andra med samma problem att se en annan lösning än deras egen.

Att googla information och läsa i dokumentation och forum är en sak.
Att googla "xx solution" och endast copy pasta koden är en annan.

Jag skulle föredra att googla t.ex. "How to x so I can y" istället för "Dice simulator C# solution".

Även om man googlar mycket som programmerare så kommer du inte långt om du hela tiden behöva googla, det gäller att veta hur man använder koden och endast googla då du kör fast eller har ett humm hur en lösning ska göras men glömt syntax.
Sitter du och jobbar med det kan man inte sitta och googla varannan kodrad man ska skriva.

Det jag lärt mig absolut mest ifrån är att sitta och öva algoritmer på t.ex. codewars, att förstå hur en dator fungerar är A och O om man vill bli duktig på lösningar i kod.
Det är lätt hänt i början att man googlar fram hela lösningar så fort man kör fast i något, istället för att sitta och öva på det själv.

Helt OK att ge färdiga lösningar, bara man förklarar för personen på en nivå där hen kan förstå koden. Jag är emot att bara lösa en uppgift åt någon utan att förklara vad som görs. Det är mycket bättre att hjälpa personen komma på lösning själv, genom att hinta i rätt håll.
Om läraren frågar ut angående koden gäller det att personen kan stå för det hen gjort och kan förklara all kod. Annars är man toast.

Permalänk
Medlem
Skrivet av Alling:

Då jag känner igen detta inlägg tar jag mig friheten att upplysa om att det saknar det viktigaste:

[code] namespace Foo { // … } [/code]

Jo jag såg senare på morgonen att det blev fel när jag kopierade posten och taggarna hade fallit bort.

Jag noterade också att andra hade lyckats med det bättre och att trådskaparen även fått mer hjälp med själva problemet, så jag tänkte att det var inte någon större vits med att post ännu fler off topic meddelanden utan bara låta tråden ha sin gång...

Permalänk
Medlem

Tips/vägledning sökes - Hur får man till funktionen två nya slag vid varje slagen 6:a?

Hej,

Jag förstår att en konkret lösning inte bör presenteras, men jag har samma problem som trådskaparen (lyckas inte fixa funktionen som ger två extra slag vid varje sexa som spelaren får - det kan vara en eller flera 6:or i samma spelomgång). Kan någon ge ett tips/lite vägledning? Jag kikade på rekursiva metoder men det var alldeles för avancerat för min nivå. Min kod liknar TS då även jag utgår från en tidigare uppgift från Programmering 1.

Tack på förhand!

Permalänk
Medlem

Prova att byta från iteration över ett fixerat "antal" tärningskast till en

while (numberOfRemainingThrows > 3)

Så om du slår en 6a så behöver du bara

numberOfRemainingThrows += 2