Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 
Search the JavaFAQ.nu
1000 Java Tips ebook

1000 Java Tips - Click here for the high resolution copy!1000 Java Tips - Click here for the high resolution copy!

Java Screensaver, take it here

Free "1000 Java Tips" eBook is here! It is huge collection of big and small Java programming articles and tips. Please take your copy here.

Take your copy of free "Java Technology Screensaver"!.

Easy Learn Java: Programming Articles, Examples and Tips - Page 324


Previous 1060 Stories (530 Pages, 2 Per Page) Next

Random Numbers - shuffling

Go to all tips in Java Notes by Fred Swartz

A standard approach to shuffling the elements of an array is to write some code as described below. As of Java 2 the java.util.Collections class contains a static shuffle(list) method, which is described at the bottom.

Shuffling: Random numbers without replacement

The random number methods generate numbers with replacement. This means that a particular random number may be generated repeatedly. If you don't want the same numbers to be repeated, put the values (numbers, strings, objects, ...) in an array, then shuffle the array by randomly exchanging the array elements. The example below shows how to produce the values from 0 to 51 in a random order with no repetition.

Example: Shuffling

A common problem is to shuffle (to randomly rearrange) the elements of an array. Here is how to do that.

Random rgen = new Random();  // Random number generator
int[] cards = new int[52];  

//--- Initialize the array to the ints 0-51
for (int i=0; i<52; i++) {
    cards[i] = i;
}

//--- Shuffle by exchanging each element randomly
for (int i=0; i<52; i++) {
    int randomPosition = rgen.nextInt(52);
    int temp = cards[i];
    cards[i] = card[randomPosition];
    cards[randomPosition] = temp;
}

java.util.Collections.shuffle(...)

Java has extensive classes for handling data structures, the so-called "Collections" classes. Most of these do not work on simple arrays of primitive values. If your data is already in one of the collections classes, eg, ArrayList, then you can use the java.util.Collections.shuffle() method easily. Arrays of objects can easily be converted to ArrayLists by using the java.util.Arrays.asList(. . .) method. For example, the above randomization could be accomplished with the following.

import java.util.*;
. . .
Collections.shuffle(Arrays.asList(cards));


5 comments | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Sunday, March 20, 2005 (00:00:00) (5858 reads)

Java: Random numbers - intro

Go to all tips in Java Notes by Fred Swartz

When to use random numbers

There are many types of programs that use random numbers. Game programs use them to create situations that are not always the same every time a player is in the same situation, or maybe you want to program to shuffle a deck of cards. Simulations usually use random numbers. You might want to use random numbers to change the appearance of something -- screensavers are an example of use. There are many other uses also.

Type, Range, and Distribution

When you generate random numbers, you need to decide which type you need (eg, int or double), what range you need (minimum to maximum), and how they are distributed. There are two common types of distributions: uniform and normal (equivalent to Gaussian). In a uniform distribution all numbers in the range are equally likely to be produced.

How can a computer generate a random number?

Computers are deterministic -- they do the same thing whenever they have the same input. Therefore, in some way it is impossible for a computer to compute a truly random number. But the methods that are used generate sequences of numbers that meet the statistical requirements of randomness. Because the numbers are not truly random, they are sometimes referred to as pseudorandom numbers. These random number generates will produce exactly the same sequence of pseudorandom numbers if they start with the same initial value. This initial value is called the seed.

If we start a program with the same random seed, we will get the same sequence of numbers. The default seed is the current time in milliseconds since 1970. This works very well, but there are two issues.

  • You may want to set the seed so that the sequence can be reproduced when you are testing your program.
  • If you want more than one random sequence, you should use only one random generater because, if two random generators are created during initialization, it is very likely that they are created in the same millisecond, which means they have the same seed, and will produce the same sequence of "random" values. Math.random uses only one seed, so it is safe for this even if it has less convenient methods than the Random class.

Related pages

  1. java.sun.com/docs/books/effective/excursion-random.html, Excursion 1: Random Thoughts by Joshua Bloch, author of Effective Java.


9 comments | Printer Friendly Page  Send to a Friend | Score: 5
Posted by jalex on Saturday, March 19, 2005 (00:00:00) (8779 reads)

Previous 1060 Stories (530 Pages, 2 Per Page) Next

530| 529| 528| 527| 526| 525| 524| 523| 522| 521| 520| 519| 518| 517| 516| 515| 514| 513| 512| 511| 510| 509| 508| 507| 506| 505| 504| 503| 502| 501| 500| 499| 498| 497| 496| 495| 494| 493| 492| 491| 490| 489| 488| 487| 486| 485| 484| 483| 482| 481| 480| 479| 478| 477| 476| 475| 474| 473| 472| 471| 470| 469| 468| 467| 466| 465| 464| 463| 462| 461| 460| 459| 458| 457| 456| 455| 454| 453| 452| 451| 450| 449| 448| 447| 446| 445| 444| 443| 442| 441| 440| 439| 438| 437| 436| 435| 434| 433| 432| 431| 430| 429| 428| 427| 426| 425| 424| 423| 422| 421| 420| 419| 418| 417| 416| 415| 414| 413| 412| 411| 410| 409| 408| 407| 406| 405| 404| 403| 402| 401| 400| 399| 398| 397| 396| 395| 394| 393| 392| 391| 390| 389| 388| 387| 386| 385| 384| 383| 382| 381| 380| 379| 378| 377| 376| 375| 374| 373| 372| 371| 370| 369| 368| 367| 366| 365| 364| 363| 362| 361| 360| 359| 358| 357| 356| 355| 354| 353| 352| 351| 350| 349| 348| 347| 346| 345| 344| 343| 342| 341| 340| 339| 338| 337| 336| 335| 334| 333| 332| 331| 330| 329| 328| 327| 326| 325|
324
| 323| 322| 321| 320| 319| 318| 317| 316| 315| 314| 313| 312| 311| 310| 309| 308| 307| 306| 305| 304| 303| 302| 301| 300| 299| 298| 297| 296| 295| 294| 293| 292| 291| 290| 289| 288| 287| 286| 285| 284| 283| 282| 281| 280| 279| 278| 277| 276| 275| 274| 273| 272| 271| 270| 269| 268| 267| 266| 265| 264| 263| 262| 261| 260| 259| 258| 257| 256| 255| 254| 253| 252| 251| 250| 249| 248| 247| 246| 245| 244| 243| 242| 241| 240| 239| 238| 237| 236| 235| 234| 233| 232| 231| 230| 229| 228| 227| 226| 225| 224| 223| 222| 221| 220| 219| 218| 217| 216| 215| 214| 213| 212| 211| 210| 209| 208| 207| 206| 205| 204| 203| 202| 201| 200| 199| 198| 197| 196| 195| 194| 193| 192| 191| 190| 189| 188| 187| 186| 185| 184| 183| 182| 181| 180| 179| 178| 177| 176| 175| 174| 173| 172| 171| 170| 169| 168| 167| 166| 165| 164| 163| 162| 161| 160| 159| 158| 157| 156| 155| 154| 153| 152| 151| 150| 149| 148| 147| 146| 145| 144| 143| 142| 141| 140| 139| 138| 137| 136| 135| 134| 133| 132| 131| 130| 129| 128| 127| 126| 125| 124| 123| 122| 121| 120| 119| 118| 117| 116| 115| 114| 113| 112| 111| 110| 109| 108| 107| 106| 105| 104| 103| 102| 101| 100| 99| 98| 97| 96| 95| 94| 93| 92| 91| 90| 89| 88| 87| 86| 85| 84| 83| 82| 81| 80| 79| 78| 77| 76| 75| 74| 73| 72| 71| 70| 69| 68| 67| 66| 65| 64| 63| 62| 61| 60| 59| 58| 57| 56| 55| 54| 53| 52| 51| 50| 49| 48| 47| 46| 45| 44| 43| 42| 41| 40| 39| 38| 37| 36| 35| 34| 33| 32| 31| 30| 29| 28| 27| 26| 25| 24| 23| 22| 21| 20| 19| 18| 17| 16| 15| 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|


Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy