Gå til innhold

C#: Merkelig problem med arrays - Kan dette være mulig?


Anbefalte innlegg

Jeg har skrevet et program i C#, var egentlig meninge å bare teste random funksjonen, så hvor jevn den spredte tallene, men det viste seg at jeg kom over et merkelig problem.

 

Programmet fungerer akkurat slik det skal når jeg legger ett debugpoing (bruker Microsoft Visual C# 2008) inne i loopen, men med en gang jeg kjører programmet på vanlig måte blir alle verdiene i arrayen den samme verdien.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Oppgaves140
{
class Program
{
	public static int RandomTall()
	{
		Random generator = new Random();
		int tall = generator.Next(0, 100);
		return tall;
	}

	static void Main(string[] args)
	{
		int[] teller = new int[101];
		int[] tall = new int[10];
		string resultat = null;

		for (int i = 0; i < tall.Length; i++)
		{
			tall[i] = RandomTall();// Må ha debug point her
		}

		for (int i = 0; i < tall.Length; i++)
		{
			resultat += tall[i] + "\n";
		}

		for (int k = 0; k < tall.Length; k++)
		{
			for (int j = 0; j <= 100; j++)
			{
				if (tall[k] == j)
				{
					teller[j] += 1;
					int test = teller[j];
					break;
				}
			}
		}

		for (int t = 0; t < teller.Length; t++)
		{
			resultat += "Antall " + t + ": " + teller[t] + "\n";
		}

		Console.WriteLine(resultat);
		Console.ReadLine();

	}//slutt main
}
}

 

Ser noen noe feil? Eller hvorfor programmet oppfører seg så merkelig.

Lenke til kommentar
Videoannonse
Annonse
Det er fordi du oppretter en ny Random()-klasse for hver gang. For å få randomverdier kjører du gjennom en løkke med next

 

int[] arr = new int[10];
Random random = new Random();

for(int i = 0; i < 10; i++)
{
 arr[i] = random.Next(0,100);
}

Vet at jeg kan gjøre dette på flere måter, men i oppgaven jeg gjør står det at jeg skal lage en funksjon.

 

Spørsmålet er hvorfor programmet oppfører seg riktig når jeg legger inn ett debugpoint i for-loopen, mens når jeg kjører det uten debugpoint blir alle tallene i arrayen like.

Lenke til kommentar

Fordi "new Random()" bruker klokken som seed. Når du har et debug point, så blir det en liten pause... Når du kjører programmet går det for kjapt, så de får samme seed, regner jeg med.

 

Men da kan du jo bare:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Oppgaves140
{
class Program
{
	Random generator;

	public Program()
	{
		 generator = new Random();
	}

	public static int RandomTall()
	{
		return generator.Next(0, 100);
	}

	static void Main(string[] args)
	{
		int[] teller = new int[101];
		int[] tall = new int[10];
		string resultat = null;

		for (int i = 0; i < tall.Length; i++)
		{
			tall[i] = RandomTall();// Må ha debug point her
		}

		for (int i = 0; i < tall.Length; i++)
		{
			resultat += tall[i] + "\n";
		}

		for (int k = 0; k < tall.Length; k++)
		{
			for (int j = 0; j <= 100; j++)
			{
				if (tall[k] == j)
				{
					teller[j] += 1;
					int test = teller[j];
					break;
				}
			}
		}

		for (int t = 0; t < teller.Length; t++)
		{
			resultat += "Antall " + t + ": " + teller[t] + "\n";
		}

		Console.WriteLine(resultat);
		Console.ReadLine();

	}//slutt main
}
}

 

You see?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...