Lite hjälp med en skoluppgift kanske? ;)

Permalänk

Lite hjälp med en skoluppgift kanske? ;)

Hej, Jag har försökt få till denna uppgift men får inte till det.
problemet är att jag inte får random array att funka.

här är en länk till uppgiften
https://antbring.files.wordpress.com/2016/03/lottobollar.pdf

här är min kod, är långt ifrån klar.
en enkel förklaring på var som är fel skulle inte sitta fel.
tack i förhand!

static void Main(string[] args) { bool AnWin = false; // array/vektor som sparar 6 slumptal int Min = 0; int Max = 25; int[] WinNum = new int[6]; Random randNum = new Random(); for (int j = 0; j < WinNum.Length; j++) { WinNum[j] = randNum.Next(Min, Max); } // array/vektor som sparar 6 in mattade tal int[] UserNum = new int[6]; for (int i = 0; i < UserNum.Length; i++) { UserNum[i] = Convert.ToInt32(Console.ReadLine()); } for (int i = 0; i < 6; i++) { if (UserNum[i] == WinNum[i]) { AnWin = true; } Console.Write(UserNum[j] + " " ); } if (AnWin = true) { Console.Write("Match" + WinNum); } else { Console.Write("Ingen Match"); } Console.ReadKey(); }

Permalänk
Hedersmedlem

Jag har uppdaterat ditt inlägg med code-taggar så att det blir mer läsbart.

/Giplet, Moderator

Visa signatur

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

Permalänk
Hedersmedlem

Nivåerna för betyg verkar uppbyggda så att du kan bygga ut ditt program efter hand. Så om du börjar med att bara lösa E-uppgiften så blir det lättare. Sedan kan du bygga vidare på din kod och lösa C och sedan A.

Visa signatur

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

Permalänk
Medlem

Vad är det som du har problem med?

Detta går inte att köra för mig. Felmeddelandet jag får är:
main.cs(34,39): error CS0103: The name `j' does not exist in the current context

Edit: Hittade ett fel till som är relaterat till din kontroll för om det är match eller inte.

Förbättringsförslag:

Gör mer utskrifter på skärmen, så att användaren kan bekräfta sin input och du kan hålla koll på vart i koden som något går på tok.

Börja med en väldig liten del som faktiskt går att köra och utöka i små steg hela tiden för att veta vilken ändring som du senast gjorde som ställer till med problem.

Permalänk

Tja ja jag har nog inte förklarat så bra. jag försöker få random arrayen slå ut slumpmässiga tal som ska försöka hitta matchande värden i i den andra arrayen som användaren bestämmer innehållet på, slutligen ska dom matchande värdena skrivas ut (typ som keno antar jag) . försöker bygga ett skelett på koden jag kan bygga vidare på. men har fastnat helt.
Uppskattar svaren.

Permalänk
Medlem
Skrivet av NoobBiscotti:

Tja ja jag har nog inte förklarat så bra. jag försöker få random arrayen slå ut slumpmässiga tal som ska försöka hitta matchande värden i i den andra arrayen som användaren bestämmer innehållet på, slutligen ska dom matchande värdena skrivas ut (typ som keno antar jag) . försöker bygga ett skelett på koden jag kan bygga vidare på. men har fastnat helt.
Uppskattar svaren.

Vart har du fastnat? Försök förklara så bra du kan - då blir det mycket lättare för oss att faktiskt hjälpa dig och inte bara lösa uppgiften

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

När jag kör programmet och skriver in mina 6 värden ska ju denna kod random arrayen också skriva sina 6 värden och då ska ju dom matchande numrera skrivas ut i konsolen kan man tycka, hehe. men jag får inte till det hur jag än vänder och vrider på koden.

det känns som felet borde någon stans i denna del av koden

for (int i = 0; i < 6; i++)
{
if (UserNum[i] == WinNum[i])
{

AnWin = true;

}
Console.Write(UserNum[j] + " " );
}

if (AnWin = true)
{
Console.Write("Match" + WinNum);
}
else
{
Console.Write("Ingen Match");
}
Console.ReadKey();
}

Permalänk
Medlem
Skrivet av NoobBiscotti:

Tja ja jag har nog inte förklarat så bra. jag försöker få random arrayen slå ut slumpmässiga tal som ska försöka hitta matchande värden i i den andra arrayen som användaren bestämmer innehållet på, slutligen ska dom matchande värdena skrivas ut (typ som keno antar jag) . försöker bygga ett skelett på koden jag kan bygga vidare på. men har fastnat helt.
Uppskattar svaren.

Spelar ordningen roll när du matchar winNum med UserNum? Som det är nu så får du bara en match om siffrorna är på samma array index och om de har samma värde. T.ex om WinNum är [0, 3, 5, 7, 13, 19] så får du inga matchar om userNum är [19, 5, 7, 3, 0 ,13]. Eftersom du inte räknar hur många gånger du får en match utan bara om en match inträffar så skulle du kunna ta bort sista if else.

for (int i = 0; i < 6; i++) { if (UserNum[i] == WinNum[i]) // detta matchar endast om även index är det rätta { AnWin = true; //behövs denna? Om första if satsen är uppfylld skulle du kunna skriva ut resultatet redan här. } Console.Write(UserNum[j] + " " ); } if (AnWin = true) { Console.Write("Match" + WinNum); } else { Console.Write("Ingen Match"); } Console.ReadKey(); }

Permalänk
Medlem
Skrivet av NoobBiscotti:

for (int i = 0; i < 6; i++) { if (UserNum[i] == WinNum[i]) { AnWin = true; } Console.Write(UserNum[j] + " " ); }

Problemet här är att du skriver ut UserNum[j] men j är inte definierat i den här loopen där loop variabeln är döpt till i

Permalänk

Aha ja det där med ordningen var nytt för mig hehe
Vad rekommendera? en array.sort eller?

Permalänk

oj vilken miss! lekte lite med dom där [i] och [j] för att se om det gjorde något. kanske märks att man är gröngöling på detta.

Permalänk
Medlem
Skrivet av NoobBiscotti:

Aha ja det där med ordningen var nytt för mig hehe
Vad rekommendera? en array.sort eller?

Det skulle bara fungera om du ville kolla om arrayerna innehåller samma siffror, men enligt uppgiften ska du snarare kolla hur många av de slumpade talen som användaren gissade. Att sortera arrayerna skulle göra det möjligt att göra det mer effektivt, men det ingår inte i uppgiften.

Allt detta är dock för betyg A, jag skulle som andra sagt börja med att lösa E och C först.

Permalänk
Medlem
Skrivet av NoobBiscotti:

Aha ja det där med ordningen var nytt för mig hehe
Vad rekommendera? en array.sort eller?

Jag rekommenderar papper och penna när det kommer till att komma på algoritmer.

Försök strukturera upp din uppgift. Vad vet du från början? Vilket är slutresultatet du letar efter? Vilka datatyper skulle kunna hjälpa dig? Börja t.ex med att som jag exemplifierade i förra inlägget skapa två arrayer på papper en med slumptal och en med tal som du väljer (samma sak i detta fall). Fundera sen kring vilka krav som ställs för att en match har inträffat? Du har redan tänkt på ett av dem, värdena måste vara de samma. Finns det några fler krav?

Eftersom det är liten array kan du testa om din algoritm funkar i huvudet. Vad händer när du itererar index, prova rita pilar, använd färger, ringa in saker, gör listor, räkna antalet matchningar. En algoritm är sällan något du skriver perfekt direkt, prova olika lösningar, t.ex som du föreslog att sortera din array, vad hade hänt om du sorterade mitt exempel?

Permalänk

grymt mycket tack för tipsen!
ja då är det väl bara att ta nya tag imorgon och hoppas att saker släpper

Permalänk
Medlem
Skrivet av NoobBiscotti:

Aha ja det där med ordningen var nytt för mig hehe
Vad rekommendera? en array.sort eller?

Det står också i uppgiften att du inte får använda några hjälpmetoder.

Räknas Array.sort som en sådan?

Permalänk
Medlem

Nu är det 20 år sen jag pluggade programmering (och har inte jobbat med det) så jag kan vara ute och segla men:

din variabel j deklarerar du i en tidigare for-loop. Den variabeln existerar således bara inne i den specifika for-loopen, och variabeln är alltså inte känd i din kommande for-loop där du använder variabeln i.

Hjälper det dig vidare något?

Edit: Ooops, hade inte refreshat inlägget så jag var 20 svar för sen. Sorry

Klantskalle
Permalänk

Hej igen. har fixat lite mer nu. Men får inte if satsen som gör att man bara kan gissa mellan 1 - 25 att funka. några tips?
här ar en link till min kod.

https://pastebin.com/C5pBtuLV

Tack i förhand!

Permalänk
Hedersmedlem

Varför har du din if-sats där den är i koden?

Visa signatur

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

Permalänk

Eeh hehe Sitter den inte bra där?
tänkte att den är i for loopen så den loopar tillbaka med fel meddelande och i-- så den inte räknas.

Permalänk
Hedersmedlem
Skrivet av NoobBiscotti:

Eeh hehe Sitter den inte bra där?
tänkte att den är i for loopen så den loopar tillbaka med fel meddelande och i-- så den inte räknas.

If satsen där du kollar att talet är mellan 1 - 25 är inte i for-loopen.

Visa signatur

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

Permalänk

Den ser ut att va i "for (int i = 0; i < VekTor.Length; i++)" eller ska den flyttas till en av looparna inne i den?

Permalänk
Hedersmedlem

Du har en if-sats med liknande felmeddelande. Där någonstans hade jag förväntat mig att den skulle vara.
Det ser dessutom ut som att du tänkt fel i ditt test. Talet är ju fel om det är mindre än 1 eller större än 25, eller hur?

Visa signatur

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

Permalänk
Medlem
Skrivet av NoobBiscotti:

Den ser ut att va i "for (int i = 0; i < VekTor.Length; i++)" eller ska den flyttas till en av looparna inne i den?

Det skulle teoretiskt sett fungera som du har nu, men du har inverterat villkoret i if-satsen mot vad det borde vara. Det vore nog också vettigare att lägga kontrollen inne i do-while-loopen istället, så slipper du "stega tillbaka" i for-loopen när användaren matar in ett felaktigt värde.

En annan sak att tänka på är att variabelnamn i C# brukar inledas med liten bokstav medan klassnamn börjar på stor bokstav. Det är inte förbjudet att ge variabler namn som börjar på stor bokstav som du gör, men det blir lite förvirrande. Jag gillar för övrigt din helt slumpmässiga användning av stor bokstav i mitten av VekTor

Permalänk

Oj såg inte det alls. ja jag ska försöka möblera om lite, så får vi se om man får till något.
tack så för tipset.

Permalänk

Har ändrat lite. Men funkar ändå inte.
förstår inte vart problemet ligger

https://pastebin.com/0ZFQCKmD

Permalänk
Medlem

@NoobBiscotti: Varför har du lagt till en break efter inläsningen? Du vill ju inte avbryta loopen om användaren matar in ett tal, då hoppar du över alla kontroller. Du behöver heller inte hålla på och ändra på i, do-while-loopen kör tills du fått ett giltigt tal från användaren. Koden för att spara de inmatade värdena i vektorn verkar även ha försvunnit när du stuvat om i koden.

Var gärna lite tydligare med vad som inte fungerar också, att bara säga "fungerar inte" gör att vi måste gissa vad det är du har problem med. Att försöka beskriva vad som går fel är också ofta hjälpsamt för att själv inse vad problemet är.

Något annat som är väldigt hjälpsamt är att använda debuggern för att stega igenom koden medan programmet körs, då kan du direkt se vad som händer i programmet. Se t.ex. denna snabbgenomgång för hur man använder debuggern.