7 svar
1545 visningar
mai2020 är nöjd med hjälpen
mai2020 11 – Fd. Medlem
Postad: 15 feb 2020 18:49 Redigerad: 15 feb 2020 22:52

Vektorer och lottobollar

Hej! Jag är nybörjare för programmering C#. Jag har en uppgift som behöver er hjälp!! Det beskrivs nedan:

Uppgiften handlar om lottobollar. I denna uppgift kommer ni få arbeta med vektorer och slumptal. Vidare kommer ni få visa att ni kan loopa (iterera) genom en vektor på ett lämpligt sätt, och för vektorer används då ofta for- eller foreach.

Ytterligare funktionalitet (Betyg C)

Ni ska nu kontrollera så att användaren bara skriver in ett tal mellan 1 och 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. Alternativet är att ni sparar det inmatade talet i en temporär variabel och lagrar det i vektorn om det uppnår kraven (det vill säga är mellan ett och tjugofem).

Min kod är som nedan:

static void Main(string[] args)
{

Console.WriteLine("Vällkommen! Vänligen ange ett heltal mellan 1 och 25!");

int[] number = new int[10];
int inNumber = int.Parse(Console.ReadLine());
Random r = new Random();
int slump = r.Next(1, 25);

for (int i = 0; i < number.Length; i++)
{
if (inNumber < 1 || inNumber > 25)
{
Console.WriteLine("Endast heltal mellan 1 coh 25 funkar! ");
i--;
}

}
if (inNumber == slump)
{
Console.WriteLine(" Du har rätt! Rätt gissning är {0}!", slump, "Bingo!");
}
else if (inNumber != slump)
{
Console.WriteLine("Tyvärr! inget Bingo! Rätt gissning borde vara {0}!", slump);
}

Console.WriteLine("Tryck valfritt tangent att sluta!");
Console.ReadKey();
}
}

Kan ni hjälpa mig att rätta eller förbättra det? Kursen är distans så det finns ingen som jag kan diskutera med, känns lite tokig! Tack för ni alla i förväg!

Smaragdalena 78170 – Lärare
Postad: 15 feb 2020 19:12

Börja med att ge din tråd ett vettigt namn, som beksirver vad frågan handlar om och inte innehåller ordet Hjälp!! /moderator

Lindehaven 820 – Lärare
Postad: 16 feb 2020 13:30 Redigerad: 16 feb 2020 13:31

Du behöver visa hela uppgiften så att vi ska kunna förstå vad den går ut på i sin helhet. Du behöver också beskriva hur du testat, vilka fel du ser och vad du behöver hjälp med. 

mai2020 11 – Fd. Medlem
Postad: 17 feb 2020 15:33
Lindehaven skrev:

Du behöver visa hela uppgiften så att vi ska kunna förstå vad den går ut på i sin helhet. Du behöver också beskriva hur du testat, vilka fel du ser och vad du behöver hjälp med. 

När jag anger tal mindre 1 eller större 25 då visar "Endast heltal mellan 1 coh 25 funkar! " hela tiden. Vet ni varför?

mai2020 11 – Fd. Medlem
Postad: 17 feb 2020 15:54

Jag har gjort lite ändring. Mitt problem är att när jag anger det första talet som är mindre 1 eller större 25 visar det inte "Endast heltal mellan 1 coh 25 funkar! ". Från och med den andra gången funkar det....Någon ver varför?

Min nya kod som nedan:

class Program
{
static void Main(string[] args)
{

Console.WriteLine("Vällkommen! Vänligen ange 10st heltal mellan 1 och 25!Tyck enter mellan varje heltal!");//

int[] number = new int[10];//
int inNumber = int.Parse(Console.ReadLine());//

for (int i = 0; i < number.Length; i++)//
{
inNumber = int.Parse(Console.ReadLine());
if (inNumber < 1 || inNumber > 25)//
{
Console.WriteLine("Endast heltal mellan 1 coh 25 funkar! ");//
i--;//
}
else
{
number[i] = inNumber;
}
}

Random r = new Random();//
int randTal = r.Next(1, 25);//
for (int i = 0; i < number.Length; i++)//
{
if (number [i]== randTal)
{
Console.WriteLine(" Grattis! Du har rätt!");
}
}

Console.ReadKey();
}
}
}

Lindehaven 820 – Lärare
Postad: 17 feb 2020 17:40

I for-satsen ökas i med 1 men inuti loopen så minskas i med 1 igen, så i förblir 0. Det blir då en oändlig loop eftersom i alltid är mindre än number.Length:

for (int i = 0; i < number.Length; i++)
{
    if (inNumber < 1 || inNumber > 25)
    {
        Console.WriteLine("Endast heltal mellan 1 coh 25 funkar! ");
        i--;
    }
}

Din andra version har inte det problemet eftersom ett nytt tal inNumber läses in i början på varje loop:

for (int i = 0; i < number.Length; i++)//
{
    inNumber = int.Parse(Console.ReadLine());

mai2020 11 – Fd. Medlem
Postad: 18 feb 2020 12:01
Lindehaven skrev:

I for-satsen ökas i med 1 men inuti loopen så minskas i med 1 igen, så i förblir 0. Det blir då en oändlig loop eftersom i alltid är mindre än number.Length:

for (int i = 0; i < number.Length; i++)
{
    if (inNumber < 1 || inNumber > 25)
    {
        Console.WriteLine("Endast heltal mellan 1 coh 25 funkar! ");
        i--;
    }
}

Din andra version har inte det problemet eftersom ett nytt tal inNumber läses in i början på varje loop:

for (int i = 0; i < number.Length; i++)//
{
    inNumber = int.Parse(Console.ReadLine());

Tack!!!! Men enligt den andra versionen anger jag ett heltal som är mindre 1 eller större 25 den första gången då visa det inte "Endast heltal mellan 1 coh 25 funkar! ".....Jag blockeras här och jag vet inte hur jag kan lösa det...

Lindehaven 820 – Lärare
Postad: 18 feb 2020 12:21

Ta bort den kodrad som läser från tangentbordet en extra/onödig/felaktig gång innan for-loopen:

int inNumber = int.Parse(Console.ReadLine());//

Svara Avbryt
Close