Willekeurig getal in c #, dat elke keer precies willekeurig zou moeten zijn?

ik probeer willekeurige getallen te genereren voor mijn mentale wiskundevuisspel. Maar ik denk dat ik iets verkeerd doe. Help me om mijn code te corrigeren. Probeer een verklaring te geven waarom mijn code onjuist is. Bij voorbaat dank!

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


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

                Console.WriteLine("Enter the digits of first number ");
                int a=int.Parse(Console.ReadLine());
                Console.WriteLine("Enter the digits of second number");
                int b = int.Parse(Console.ReadLine());

                Random RandomClass = new Random(DateTime.UtcNow.Second);

                int RandomNumber = RandomClass.Next(10^(a-1), 10^a);
                Console.WriteLine(RandomNumber);
    }


    }

}

Wat ik probeer te bereiken is, ik wil dat de gebruiker het aantal cijfers in nummer a en het aantal cijfers in nummer b invoert

Dan zou het programma willekeurig getal genereren, zeg gebruiker 2 voor a ingevoerd, dan moet het programma getallen tussen 0 en 10 genereren (willekeurig getal, telkens verschillend)

als gebruiker 3 heeft ingevoerd voor a, dan tussen 10 en 100,

Vergelijkbaar met b en vervolgens het berekenen van het product. Het nummer mag niet meer dan 2 keer worden herhaald tijdens de looptijd van het programma.

Ok, ik heb mijn code gewijzigd in

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


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

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random(DateTime.UtcNow.Second);
            double num1=Math.Pow(10,a-1);
            double num2=Math.Pow(a,1);
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}}

// Maar nog steeds krijg ik geen resultaat, ik gooi fout,

Deze werkte!

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


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

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random();
            double num1=Math.Pow(10,(a-1));
            double num2=Math.Pow(10,(a));
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}


}






        }
4
Als je iets "precies willekeurig" wilt (ik neem aan dat je zoiets bedoelt als "waarschijnlijk elke keer anders te zijn"), waarom beperk je je dan tot slechts 60 mogelijke zaadwaarden?
toegevoegd de auteur Joe White, de bron
Het is moeilijk om te vertellen wat u verkeerd doet als we niet weten wat u verwacht dat deze code precies doet.
toegevoegd de auteur Joel Etherton, de bron
"Nummer mag niet meer dan 2 keer worden herhaald, tijdens programma-uitvoering" is incompatibel met "exact willekeurig". Een echt willekeurige reeks kan altijd willekeurig lange herhalingen van dezelfde waarde bevatten. Dat is niet de oorzaak van je probleem, maar het is de moeite waard om te begrijpen.
toegevoegd de auteur Dan Bryant, de bron

4 antwoord

^ is geen verhoging voor de machinist in c #. Gebruik hiervoor Math.Pow .

1
toegevoegd
Bedankt, dat wist ik niet.
toegevoegd de auteur MADAN RAWAT, de bron

De operator ^ in C# betekent "exclusive or" (XOR), niet exponentiation. Lees er hier meer over: http://www.dotnetperls.com/xor . Probeer Math.Pow in plaats daarvan.

1
toegevoegd
Ik weet niet zeker of dit een geval is van 'grote geesten denken hetzelfde' of 'dwazen verschillen zelden' ... alleen de tijd zal het uitwijzen!
toegevoegd de auteur Rich O'Kelly, de bron
Bedankt, meer hulp wordt op prijs gesteld.
toegevoegd de auteur MADAN RAWAT, de bron

Tijdens het genereren van een TRULY willekeurig getal, kun je niet veronderstellen dat het getal altijd anders is, ik hoop dat je het hebt begrepen. Je moet er dus ook voor zorgen dat het nummer elke keer anders is.

0
toegevoegd

is er een reden waarom je een seed-waarde wilt gebruiken die zo beperkt is? Waarom niet gebruiken

Random RandomClass = new Random();

welke neemt een op standaardtijd gebaseerde seed-waarde voor uw object?

Gebruik ook Math.pow (base, exp) om het bereik voor uw Random.next() -oproepen te berekenen als:

int RandomNumber = RandomClass.Next((int)Math.Pow(10,(a-1)), (int)Math.Pow(10,a));

In uw code vindt de fout plaats omdat,

double num2=Math.Pow(a,1);

geeft zichzelf terug. Dus je maxwaarde in de Random.next() is lager dan je minwaarde, wat logisch incorrect is. Dit is de fout, die ik kreeg door het uitvoeren van uw code, dat is afgezien van het feit dat u aan het einde een sluitende steun mist.

Je moet je ook realiseren dat er niet zoiets bestaat als een perfect willekeurige nummergenerator. Dit zijn allemaal pseudo-willekeurige generatoren. Ze volgen de normale verdeling van nummers op de getallenlijn. Dus, om te zeggen dat een nummer niet meer dan twee keer wordt gegenereerd in één uitvoering, is niet haalbaar, tenzij je alle gegenereerde nummers opslaat en tegen ze blijft controleren. Dit zou een laatste redmiddel moeten zijn, alleen is er sprake van strenge eisen.

0
toegevoegd
Hallo Darnir, ik heb dit geprobeerd. Het zegt RandomClass.Next neemt int argument en math.pow geeft dubbel argument, dus dit zal niet werken. Ook heb ik mijn code bewerkt, volgens jouw aanbeveling. Geef alsjeblieft een follow-up.
toegevoegd de auteur MADAN RAWAT, de bron
Oh oke ... juist, mijn slechte, zou expliciet moeten typen.
toegevoegd de auteur darnir, de bron