Jämförelse av vektorer.
Jag har en uppgift i programmering 1 som går ut på att användaren ska mata in 10 heltal mellan 1-25. Dessa ska sparas i en vektor. Sedan ska programmet slumpa fram 5 stycken tal som också ska sparas i en vektor. Dessa två ska sedan jämföras och det ska skrivas ut hur många "bingo" man fick. Får endas använda loopar.
Jag får inte till jämförelsen. Vad gör jag för fel? och varför slumpas det fram 6st tal?
Kursen är på distans så har ingen att fråga. Blir tokig!
using System;
namespace ConsoleApp39
{
class Program
{
static void Main(string[] args)
{
// vektor med plats för 10. Ska fyllas av användaren
int[] tal = new int[10];
//programmet startar
Console.WriteLine("Välkommen till Lotto spelet!");
Console.WriteLine("Ange tio heltal mellan 1-25 som du vill spela med");
// vektorns fält får värde av användren
for (int anvandareTal = 0; anvandareTal < tal.Length; anvandareTal++)
{
tal[anvandareTal] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Kanon, nu ska vi se om du vinner");
//vektor för slumptal+lopp för att sätta värdet
int[] talTvå = new int[5];
for (int slumpTal = 0; slumpTal < talTvå.Length; slumpTal++) //varför blir det sex stycjen nt?
{
Random randomaren = new Random();
int bingoTal = randomaren.Next(1, 26);
talTvå[slumpTal] = bingoTal;
}
//Lottodragningen skrivs ut
Console.WriteLine("Lottodragningen");
foreach (int bingo in talTvå)
{
Console.WriteLine(bingo);
}
//jämförelse börjar
int räknare = 0;
for (int i = 0; i < tal.Length; i++)
{
for (int j = 0; j < talTvå.Length; j++)
{
if (tal[i] == talTvå[j])
{
räknare++;
}
Console.WriteLine("Grattis du fick" + räknare + " bingo");
Console.ReadKey();
}
}
}
}
}
Vad menar du med att det slumpas 6 tal? loopen itererar bara 5 gånger, hade den kört 6ggr hade du fått kompileringsfel eftersom du då hade försökt lägga något på index 6 i arrayen vilket inte går. Vad är det för fel du stöter på? Tips är att köra i debug mode och köra igenom din kod, då ser du ganska snabbt vart det blir fel.
Jag hade bara räknat fel, det var fem. Tyckte väl att det var konstigt! haha.
Den den här biten av koden funkar inte. Den räknaren ökar inte även om gissningar är rätt.
//jämförelse börjar
int räknare = 0;
for (int i = 0; i < tal.Length; i++)
{
for (int j = 0; j < talTvå.Length; j++)
{
if (tal[i] == talTvå[j])
{
räknare++;
}
Ligger inte console.readkey() inne i den andra for loopen? Det är nog det som spökar, programmet inväntar input för att fortsätta att köras.
Hur gör jag det?
Jag redigerade mitt inlägg samtidigt som du svarade. :)
Dracaena skrev:Ligger inte console.readkey() inne i den andra for loopen? Det är nog det som spökar, programmet inväntar input för att fortsätta att köras.
jooooo! gud vad dumt. TACK!
Inga problem. :)
Kanske kan få hjälp även med detta? Samma uppgift. Man ska kontrollera så att användaren bara skriver in siffror mellan 1-25.
"Detta lösas enklast genom att man styr inmatning till respektive position i vektorn med en for-loop. I
for-loopen finns en variabel (förändring, exempelvis i) som kontrollerar vilken position man för
närvarande ”pekar på” i vektorn.
Om talet som användaren skriver in är under 1 eller över 25 kan man minska värdet i variabeln (i) som
styr positionen med ett (1) enligt figuren nedan. Då ”backar” vi ett steg i vektorn.
Alltså – för varje varv som for-loopen itererar så kommer värdet på variabeln som styr förändring att
öka med ett (1). Men om vi skriver in ett ”olämpligt” värde så kommer värdet att minska med ett (1) i
koden inuti loopen. "
Den biten förstod jag inte alls. Förstår inte ens vart jag ska börja? Har gjort så här istället. Men det är något som inte funkar.
// vektorns fält får värde av användren HÄR DET ÄR FEL?
for (int anvandareTal = 0; anvandareTal < tal.Length; anvandareTal++)
{
if (anvandareTal < 26 && anvandareTal > 0)
{
tal[anvandareTal] = int.Parse(Console.ReadLine());
}
else
{
Console.WriteLine("Endas tal mellan 1-25 fungerar");
continue;
}
}
visa gärna bilden
På uppgiften?
Texten säger ju att man ska referera till bilden nedan. :)
Din lärare vill att du gör följande. Antingen så loopar du över arrayen och minskar om det är ogiltigt. Dvs, antag att du är på plats a[4] och vi får något ogiltigt, då kan du peka på a[3] och plussa din variabel till 4, nu kollar vi igen är det giltigt? Pm nej, ja då går vi tillbaka igen. Alternativt kollar man om talet ligger mellan 1 och 25, om ja, lägg till den i arrayen, om nej, tvinga användaren att ange ett tal på nytt.
Okej, då förstår jag. Men jag har ingen aning om hur jag ska göra det. Några tips? Det andra alternativet antar jag att man gör med if satser?
for (int antalTal = 0; antalTal < tal.Length; antalTal++)
{
string anvandareTal = Console.ReadLine();
tal[antalTal] = int.Parse(anvandareTal);
for (int antalTalTvå = 0; antalTalTvå < 1 || antalTalTvå > 25; antalTalTvå--) //Nu hoppar den in direkt
{
string anvandareTalTvå = Console.ReadLine();
Console.WriteLine("Endast heltal mellan 1-25");
continue;
}
}
Detta knåpade jag ihop nu för att ha något att börja med. Men nu hoppar den in i andra for loopen efter första gissningen.
Den första metoden din lärare pratar om är enklast.
Loopen är självklar, men vad ska vi egentligen göra?
OM vi tar emot ett ogiltigt tal, i--;
Är talet giltigt? Lägg in den i arrayen.
hur kollar vi om värdet är inom vårt intervall? Behöver du verkligen en for loop för det?
Om talet är inom intervallet, vad gör vi då?
Om talet inte är i intervallet, vad gör vi med antalTal?
Vad mycket lättare det blev nu! TACK!
Blev så här. Ska ändra namn på xxx. och har tagit bort continue.
for (int antalTal = 0; antalTal < tal.Length; antalTal++)
{
string anvandareTal = Console.ReadLine();
int xxx = int.Parse(anvandareTal);
tal[antalTal] = int.Parse(anvandareTal);
if (xxx < 1 || xxx > 25)
{
antalTal--;
Console.WriteLine("Endast tal mellan 1-25");
continue;
}
}
Precis, det ser rätt ut. :)
Stort stort tack! 😊