Slumpa tal mellan 1-20, men vill att alla tal ska skrivas ut

Permalänk
Medlem

Slumpa tal mellan 1-20, men vill att alla tal ska skrivas ut

Hej, funderar på att göra ett litet program till julklappsbytet. Tänkte om man kunde slumpa tal mellan 1-20 men att det bara blir ett av varje och att alla 20 tal skrivs ut. Har kommit så här långt än så länge

int rnd; Random generator = new Random(); for (int i = 0; i < 20; i++) { rnd = generator.Next(1, 20); Console.WriteLine(rnd); }

Hoppas ni förstår vad jag menar, hjälp uppskattas!

Permalänk
Medlem

Skapa en array med alla siffror i och randomizera denna.
http://blog.ryanrampersad.com/2008/10/shuffle-an-array-in-jav...

Permalänk

Detta går att lösa på flera olika sätt. Här är ett sätt.

class Program { static void Main(string[] args) { Julklappsbyte _julklappar = new Julklappsbyte(); _julklappar.Start(10); Console.Read(); } } public class Julklappsbyte { public int Tal; public Guid Id; // unik guid gör det enkelt att sortera slumpmässigt. public void Start(int Antal) { DateTime _start = DateTime.Now; // Start tid List<Julklappsbyte> _giltigaTal = GiltigaTal(Antal ); // hämta giltiga tal int _index = 0; foreach (Julklappsbyte _tal in _giltigaTal) // { Console.WriteLine(string.Format("{0}. {1}", _index, _tal.Tal)); _index++; } TimeSpan _ts = (DateTime.Now - _start); // Tid att utföra Console.WriteLine(string.Format("Tid att utföra: {0}", _ts.ToString())); } private List<Julklappsbyte> GiltigaTal(int Antal) // skapar en lista med giltiga tal { Random _rand = new Random(); List<Julklappsbyte> _giltigaTal = new List<Julklappsbyte>(); for (int i = 0; i < Antal; i++) _giltigaTal.Add(new Julklappsbyte { Id = Guid.NewGuid(), Tal = i }); return _giltigaTal.OrderBy(px => px.Id).ToList(); // Sortera din lista efter det unika Id't } }

Permalänk
Medlem

Java:

List<Integer> list = new ArrayList<Integer>(); for(int i=1;i<=20;i++){ list.add(i); } Collections.shuffle(list); for(Integer i : list){ System.out.println(i); }

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk

Eftersom det här kan vara något du vill återanvända så kan det vara vettigt att göra en extension och då kan du lösa det så här istället.
På det här sättet blir den även snabbare att använda och du blir inte låst att använda en specific model.

class Program { static void Main(string[] args) { Julklappsbyte _julklappar = new Julklappsbyte(); _julklappar.Start(10); Console.Read(); } } public class Julklappsbyte { public void Start(int Antal) { DateTime _start = DateTime.Now; // Start tid List<int> _giltigaTal = GiltigaTal(Antal ); // hämta giltiga tal int _index = 0; foreach (int _tal in _giltigaTal) // { Console.WriteLine(string.Format("{0}. {1}", _index, _tal)); _index++; } TimeSpan _ts = (DateTime.Now - _start); // Tid att utföra Console.WriteLine(string.Format("Tid att utföra: {0}", _ts.ToString())); } private List<int> GiltigaTal(int Antal) // skapar en lista med giltiga tal { Random _rand = new Random(); List<int> _giltigaTal = new List<int>(); for (int i = 0; i < Antal; i++) _giltigaTal.Add(i); _giltigaTal.Shuffle(); return _giltigaTal; } } public static class ExtensionList { public static void Blanda<T>(this List<T> self) { Random _rand = new Random(); int _listStorlek = self.Count(); while (_listStorlek > 1) { _listStorlek--; int _randomIndex = _rand.Next(0, _listStorlek + 1); T _listValue = self[_randomIndex]; self[_randomIndex] = self[_listStorlek]; self[_listStorlek] = _listValue; } } }

Mvh
Stefan

Permalänk
Medlem

I python (kanske lättare att följa logiken iom mindre code-overhead)

#!/bin/python from random import randint r = range(1,20) while True: try: print (r.pop(randint(0,len(r)-1))) except ValueError: break

Permalänk
Medlem

var numbers = Enumerable.Range(1, 20).OrderBy(x => Guid.NewGuid()); foreach (var n in numbers) Console.WriteLine(n);