Java question: Need some sort of global variable.

Click For Summary

Discussion Overview

The discussion revolves around implementing a function in Java that generates pseudo-random numbers between 0 and 9, with a specific requirement for incrementing a certain number each time the function is called. Participants explore different approaches and share experiences related to random number generation, including a simulation conducted in C++.

Discussion Character

  • Exploratory
  • Technical explanation
  • Mathematical reasoning

Main Points Raised

  • One participant seeks advice on how to implement a function called rand9() in Java that returns a pseudo-random number between 0 and 9, emphasizing the need for a variable to increment with each call.
  • Another participant shares results from a C++ simulation, indicating that their random number distribution appears uniform, providing specific counts for each number generated.
  • The same participant notes a potential issue with repetition in their output, mentioning a formula for generating numbers: f(n) = (n * ∏(n)) mod 10.
  • There is a mention of using JGrasp and a limitation regarding having only one class per file, which may affect implementation.

Areas of Agreement / Disagreement

Participants have not reached a consensus on the best approach to implement the desired functionality, and multiple viewpoints on the problem and its solutions remain present.

Contextual Notes

Participants express uncertainty regarding the implementation details and the effectiveness of their proposed solutions, particularly in relation to the limitations of their development environment.

Jamin2112
Messages
973
Reaction score
12
Just wondering if the Java experts here could help me. As part of a project I'm making a function rand9() that returns a pseudo-random number 0 through 9. The problem is that each time it's called I need a certain number to increment so that it can generate a new (not necessarily different) random number next time it's called. Hope that makes sense. Just wondering how to approach this. I've checked out http://www.glenmccl.com/tip_002.htm, but I'm not sure how to how to implement that because, at least with JGrasp, I can only have 1 class in a file.
 
Last edited:
Technology news on Phys.org
By the way, I just ran a simulation (using C++ since I suck at Java) and it looks like my random number distributor is pretty uniform.

TOTAL:
# of 0's: 226
# of 1's: 232
# of 2's: 208
# of 3's: 247
# of 4's: 230
# of 5's: 227
# of 6's: 240
# of 7's: 208
# of 8's: 226
# of 9's: 216

EDIT:

Dang it! There's a little repetition. I noticed that a 0 is appearing every 50th character eventually in the output. My formula for the nth number is f(n) = (n * ∏(n)) mod 10.

5, 8, 5, 8, 9, 2, 7, 0, 1, 4, 3, 2, 5, 8, 3, 8, 3, 0, 3, 8, 9, 6, 5, 6, 1, 6, 1, 0, 7, 2, 1, 6, 5, 6, 9, 4, 3, 0, 9, 2, 3, 2, 5, 4, 7, 4, 3, 0, 3, 8, 3, 4, 5, 8, 3, 8, 3, 0, 3, 6, 1, 4, 5, 2, 7, 6, 3, 0, 3, 8, 1, 2, 5, 8, 3, 6, 9, 0, 9, 2, 3, 2, 5, 8, 3, 6, 9, 0, 7, 8, 1, 4, 5, 8, 3, 8, 7, 0, 7, 4, 9, 6, 5, 2, 9, 4, 1, 0, 7, 6, 1, 6, 5, 6, 1, 6, 7, 0, 1, 6, 1, 2, 5, 6, 3, 2, 3, 0, 9, 6, 3, 8, 5, 4, 1, 6, 3, 0, 1, 2, 9, 8, 5, 4, 1, 6, 1, 0, 7, 2, 9, 8, 5, 6, 3, 2, 3, 0, 7, 6, 1, 4, 5, 8, 7, 6, 1, 0, 9, 2, 3, 2, 5, 4, 7, 8, 7, 0, 7, 2, 9, 8, 5, 4, 9, 4, 1, 0, 3, 6, 3, 4, 5, 8, 7, 4, 3, 0, 9, 2, 1, 6, 5, 2, 3, 4, 1, 0, 7, 2, 9, 8, 5, 6, 9, 8, 3, 0, 1, 8, 7, 2, 5, 4, 1, 2, 3, 0, 3, 8, 3, 4, 5, 2, 3, 4, 1, 0, 3, 2, 9, 6, 5, 4, 9, 8, 1, 0, 7, 2, 1, 6, 5, 4, 7, 6, 3, 0, 3, 4, 7, 2, 5, 4, 3, 8, 7, 0, 1, 4, 9, 6, 5, 8, 9, 2, 9, 0, 3, 2, 1, 4, 5, 6, 1, 6, 1, 0, 1, 4, 9, 4, 5, 4, 7, 4, 1, 0, 3, 4, 7, 2, 5, 2, 9, 2, 1, 0, 3, 8, 3, 2, 5, 4, 3, 8, 7, 0, 1, 4, 3, 2, 5, 6, 3, 4, 3, 0, 1, 4, 7, 2, 5, 2, 3, 4, 9, 0, 3, 4, 7, 4, 5, 4, 7, 6, 9, 0, 1, 4, 3, 2, 5, 8, 3, 8, 3, 0, 7, 2, 1, 6, 5, 8, 9, 4, 9, 0, 9, 6, 7, 4, 5, 4, 7, 4, 1, 0, 1, 6, 1, 8, 5, 8, 7, 6, 7, 0, 9, 6, 7, 8, 5, 8, 3, 2, 9, 0, 9, 6, 1, 8, 5, 6, 9, 8, 7, 0, 3, 4, 9, 4, 5, 6, 3, 6, 3, 0, 9, 4, 1, 6, 5, 2, 1, 2, 9, 0, 1, 2, 7, 2, 5, 6, 3, 8, 3, 0, 3, 8, 7, 6, 5, 2, 1, 6, 1, 0, 7, 2, 9, 6, 5, 6, 3, 8, 7, 0, 9, 2, 7, 4, 5, 8, 3, 4, 1, 0, 3, 4, 7, 4, 5, 8, 3, 8, 3, 0, 3, 8, 1, 4, 5, 2, 3, 8, 1, 0, 7, 4, 7, 2, 5, 6, 9, 6, 1, 0, 1, 6, 9, 8, 5, 2, 1, 8, 3, 0, 9, 2, 9, 8, 5, 2, 7, 2, 1, 0, 3, 8, 3, 8, 5, 4, 1, 6, 7, 0, 3, 6, 1, 4, 5, 8, 9, 8, 1, 0, 1, 4, 7, 2, 5, 6, 1, 6, 3, 0, 1, 6, 1, 2, 5, 6, 9, 2, 9, 0, 3, 8, 3, 2, 5, 6, 9, 2, 7, 0, 3, 4, 7, 8, 5, 6, 9, 2, 1, 0, 1, 6, 9, 6, 5, 6, 1, 4, 1, 0, 7, 4, 7, 6, 5, 8, 1, 8, 3, 0, 1, 6, 3, 8, 5, 2, 1, 8, 7, 0, 7, 6, 1, 6, 5, 2, 3, 8, 3, 0, 1, 4, 9, 4, 5, 4, 1, 2, 9, 0, 3, 6, 7, 4, 5, 6, 1, 2, 7, 0, 9, 6, 1, 6, 5, 4, 7, 4, 3, 0, 1, 2, 1, 6, 5, 4, 3, 8, 7, 0, 3, 2, 1, 8, 5, 8, 9, 4, 1, 0, 9, 2, 3, 2, 5, 6, 3, 6, 9, 0, 9, 2, 1, 2, 5, 2, 1, 6, 9, 0, 9, 4, 7, 8, 5, 8, 9, 8, 7, 0, 1, 4, 9, 6, 5, 8, 9, 8, 9, 0, 3, 8, 1, 2, 5, 4, 7, 6, 9, 0, 9, 2, 1, 6, 5, 6, 1, 6, 1, 0, 7, 2, 1, 2, 5, 8, 7, 8, 7, 0, 1, 4, 3, 2, 5, 4, 3, 4, 1, 0, 1, 2, 1, 8, 5, 8, 3, 2, 7, 0, 1, 4, 9, 4, 5, 4, 1, 2, 9, 0, 1, 4, 7, 6, 5, 2, 1, 4, 3, 0, 3, 2, 1, 8, 5, 4, 9, 4, 3, 0, 7, 6, 7, 6, 5, 6, 1, 8, 9, 0, 3, 2, 9, 2, 5, 4, 1, 8, 3, 0, 9, 4, 1, 2, 5, 6, 9, 6, 1, 0, 1, 4, 9, 6, 5, 8, 1, 2, 9, 0, 3, 8, 7, 8, 5, 2, 3, 8, 1, 0, 1, 2, 3, 6, 5, 6, 1, 4, 1, 0, 7, 2, 7, 8, 5, 2, 1, 2, 9, 0, 9, 8, 3, 4, 5, 4, 3, 4, 3, 0, 3, 8, 3, 4, 5, 8, 1, 6, 1, 0, 1, 4, 9, 6, 5, 8, 3, 6, 9, 0, 7, 8, 7, 4, 5, 6, 9, 4, 9, 0, 1, 6, 7, 8, 5, 8, 9, 2, 1, 0, 9, 2, 1, 6, 5, 4, 9, 6, 7, 0, 1, 6, 7, 6, 5, 8, 9, 4, 7, 0, 7, 8, 3, 4, 5, 4, 7, 2, 7, 0, 7, 6, 3, 8, 5, 2, 7, 6, 1, 0, 7, 4, 9, 6, 5, 6, 9, 2, 1, 0, 3, 4, 9, 6, 5, 8, 9, 8, 1, 0, 9, 8, 9, 4, 5, 6, 3, 4, 3, 0, 7, 2, 9, 8, 5, 4, 1, 6, 7, 0, 1, 6, 1, 2, 5, 4, 1, 8, 3, 0, 7, 6, 1, 6, 5, 8, 1, 2, 9, 0, 9, 6, 7, 6, 5, 2, 3, 4, 9, 0, 7, 6, 1, 4, 5, 6, 3, 8, 1, 0, 1, 2, 9, 8, 5, 8, 3, 4, 3, 0, 3, 4, 3, 8, 5, 8, 1, 2, 3, 0, 9, 8, 9, 6, 5, 8, 9, 8, 3, 0, 3, 2, 1, 8, 5, 8, 1, 4, 9, 0, 9, 8, 9, 8, 5, 6, 9, 4, 1, 0, 1, 8, 9, 6, 5, 8, 3, 8, 3, 0, 7, 6, 3, 6, 5, 8, 9, 2, 9, 0, 7, 8, 7, 4, 5, 2, 9, 4, 7, 0, 3, 2, 3, 2, 5, 6, 3, 8, 3, 0, 3, 8, 3, 2, 5, 4, 9, 8, 7, 0, 7, 6, 1, 4, 5, 6, 1, 8, 3, 0, 3, 8, 3, 8, 5, 6, 9, 6, 9, 0, 3, 2, 7, 2, 5, 6, 1, 2, 9, 0, 1, 4, 9, 2, 5, 6, 7, 4, 3, 0, 1, 6, 1, 2, 5, 6, 9, 8, 9, 0, 9, 4, 3, 8, 5, 8, 3, 4, 1, 0, 3, 8, 3, 8, 5, 4, 9, 2, 9, 0, 9, 6, 7, 8, 5, 6, 9, 8, 7, 0, 7, 8, 9, 6, 5, 2, 3, 8, 7, 0, 1, 4, 9, 6, 5, 6, 3, 6, 7, 0, 9, 4, 7, 4, 5, 4, 3, 8, 7, 0, 3, 2, 9, 6, 5, 6, 3, 4, 1, 0, 1, 6, 3, 2, 5, 2, 1, 2, 3, 0, 3, 8, 3, 2, 5, 6, 7, 4, 3, 0, 7, 8, 3, 6, 5, 4, 1, 4, 3, 0, 3, 4, 1, 6, 5, 8, 3, 8, 1, 0, 9, 4, 3, 8, 5, 2, 7, 2, 9, 0, 3, 4, 1, 4, 5, 6, 1, 2, 7, 0, 3, 2, 3, 6, 5, 6, 9, 6, 7, 0, 1, 4, 9, 6, 5, 8, 3, 6, 1, 0, 7, 6, 7, 8, 5, 8, 9, 6, 3, 0, 9, 2, 9, 8, 5, 8, 9, 2, 9, 0, 9, 2, 3, 2, 5, 2, 1, 2, 7, 0, 7, 2, 9, 6, 5, 4, 7, 6, 9, 0, 1, 6, 7, 2, 5, 4, 7, 4, 3, 0, 7, 4, 3, 2, 5, 6, 9, 4, 1, 0, 9, 2, 7, 8, 5, 2, 9, 8, 7, 0, 7, 2, 7, 6, 5, 2, 3, 8, 7, 0, 9, 6, 7, 4, 5, 8, 7, 6, 9, 0, 9, 6, 1, 8, 5, 8, 3, 4, 3, 0, 9, 2, 9, 6, 5, 6, 7, 6, 3, 0, 7, 2, 9, 6, 5, 8, 9, 8, 3, 0, 3, 8, 9, 6, 5, 6, 1, 6, 7, 0, 7, 8, 3, 4, 5, 8, 3, 6, 9, 0, 1, 6, 7, 2, 5, 8, 9, 2, 9, 0, 9, 6, 3, 2, 5, 6, 9, 4, 1, 0, 1, 4, 9, 4, 5, 2, 3, 8, 3, 0, 9, 4, 9, 6, 5, 6, 1, 2, 3, 0, 7, 6, 7, 4, 5, 2, 1, 4, 9, 0, 3, 4, 9, 4, 5, 4, 3, 8, 7, 0, 1, 6, 7, 2, 5, 2, 7, 6, 1, 0, 1, 6, 7, 8, 5, 4, 1, 8, 7, 0, 9, 6, 1, 2, 5, 8, 1, 2, 7, 0, 1, 4, 1, 4, 5, 8, 7, 6, 7, 0, 7, 8, 7, 4, 5, 4, 9, 8, 3, 0, 3, 4, 3, 8, 5, 2, 7, 6, 1, 0, 7, 2, 3, 4, 5, 8, 3, 6, 3, 0, 3, 6, 1, 2, 5, 2, 7, 6, 7, 0, 7, 6, 7, 6, 5, 6, 9, 8, 7, 0, 9, 2, 3, 2, 5, 6, 9, 2, 7, 0, 9, 8, 1, 6, 5, 6, 3, 4, 3, 0, 3, 2, 9, 8, 5, 6, 7, 4, 7, 0, 7, 8, 7, 4, 5, 8, 7, 6, 9, 0, 3, 4, 1, 2, 5, 8, 3, 4, 3, 0, 7, 2, 9, 6, 5, 6, 1, 4, 9, 0, 7, 2, 1, 6, 5, 4, 7, 6, 9, 0, 3, 2, 1, 8, 5, 6, 3, 2, 7, 0, 3, 4, 9, 6, 5, 2, 7, 4, 9, 0, 1, 4, 7, 2, 5, 8, 9, 2, 7, 0, 3, 4, 9, 4, 5, 6, 9, 4, 1, 0, 1, 8, 9, 8, 5, 6, 9, 8, 7, 0, 7, 8, 7, 8, 5, 2, 1, 2, 1, 0, 1, 4, 7, 2, 5, 2, 7, 4, 9, 0, 7, 6, 3, 4, 5, 6, 7, 6, 1, 0, 1, 6, 1, 2, 5, 2, 9, 4, 9, 0, 3, 8, 3, 8, 5, 4, 3, 6, 7, 0, 9, 2, 7, 6, 5, 8, 9, 4, 9, 0, 3, 4, 7, 2, 5, 6, 9, 4, 7, 0, 1, 4, 3, 4, 5, 4, 7, 4, 9, 0, 9, 8, 3, 2, 5, 4, 7, 6, 9, 0, 3, 4, 3, 2, 5, 4, 3, 8, 3, 0, 7, 2, 1, 2, 5, 2, 1, 2, 3, 0, 7, 8, 3, 8, 5, 4, 1, 6, 1, 0, 3, 2, 3, 8, 5, 2, 7, 4, 3, 0, 3, 4, 3, 8, 5, 6, 9, 2, 9, 0, 7, 8, 9, 8, 5, 4, 7, 2, 7, 0, 3, 2, 7, 2, 5, 4, 7, 4, 1, 0, 1, 4, 3, 8, 5, 2, 7, 4, 3, 0, 7, 6, 7, 6, 5, 8, 7, 6, 7, 0, 7, 8, 3, 2, 5, 6, 9, 8, 7, 0, 3, 8, 9, 6, 5, 2, 3, 4, 3, 0, 3, 8, 3, 2, 5, 4, 1, 2, 9, 0, 1, 4, 3, 8, 5, 8, 3, 8, 3, 0, 1, 2, 1, 6, 5, 6, 9, 4, 3, 0, 9, 4, 1, 2, 5, 4, 9, 4, 1, 0, 3, 4, 7, 4, 5, 2, 7, 4, 1, 0, 1, 4, 9, 4, 5, 4, 9, 4, 3, 0, 3, 2, 1, 6, 5, 8, 3, 6, 9, 0, 3, 8, 3, 8, 5, 4, 3, 8, 1, 0, 9, 2, 1, 6, 5, 8, 9, 6, 1, 0, 1, 6, 1, 2, 5, 2, 9, 2, 9, 0, 9, 2, 1, 8, 5, 4, 7, 4, 9, 0, 3, 8, 3, 4, 5, 4, 3, 6, 1, 0, 7, 2, 1, 6, 5, 6, 1, 6, 1, 0, 1, 4, 7, 8, 5, 6, 9, 8, 7, 0, 9, 8, 3, 4, 5, 6, 9, 4, 1, 0, 1, 6, 1, 6, 5, 4, 7, 6, 9, 0, 9, 2, 9, 8, 5, 4, 9, 8, 7, 0, 3, 8, 9, 4, 5, 6, 7, 4, 7, 0, 1, 6, 7, 4, 5, 8, 9, 4, 3, 0, 1, 2, 7, 4, 5, 8, 3, 8, 7, 0, 7, 6, 1, 2, 5, 8, 3, 2, 1, 0, 1, 6, 1, 6, 5, 4, 1, 2, 9, 0, 3, 2, 1, 4, 5, 8, 3, 8, 3, 0, 9, 2, 1, 2, 5, 8, 9, 8, 7, 0, 1, 4, 7, 6, 5, 8, 3, 8, 1, 0, 3, 6, 7, 4, 5, 6, 1, 6, 9, 0, 7, 8, 9, 4, 5, 2, 1, 2, 9, 0, 3, 8, 3, 8, 5, 6, 1, 4, 1, 0, 7, 6, 1, 2, 5, 6, 7, 6, 3, 0, 9, 4, 1, 6, 5, 8, 3, 4, 3, 0, 1, 6, 7, 4, 5, 8, 7, 6, 1, 0, 3, 8, 1, 8, 5, 6, 1, 4, 1, 0, 3, 4,
 
Last edited:
Jamin2112 said:
By the way, I just ran a simulation (using C++ since I suck at Java) and it looks like my random number distributor is pretty uniform.

Look at the header files of http://www.boost.org/doc/libs/1_53_0/doc/html/boost_random.html, pick your flavor and recode that with Java. (And pls don't forget to properly credit the inventors of the algorithms).

About the static var issue:
- If your program is single-threaded you already have all pieces,
- BUT don't make that var "public", but add it to your RNG class itself with "private" visibility.

Regards, Solkar
 
Solkar said:
(And pls don't forget to properly credit the inventors of the algorithms).

I didn't know it was already invented.
 
Unless the purpose of this is to try implementing an random number generator then I'd just use an off-the-shelf one. For Java something in http://commons.apache.org/proper/commons-math/ would probably work. Note that it also supports http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/random/SynchronizedRandomGenerator.html if you want to use it in a multi-threaded environment.

Javadoc of the random generator interface in that library:
http://commons.apache.org/proper/commons-math/javadocs/api-3.2/index.html

As to static variables in Java that example is fine. I am not sure what you mean about about only one class per file being a jGRASP thing (also why jGRASP instead of Eclipse, NetBeans, or even the free version of Intellij?). Having only one top level class per file is just part of the Java language. You just put the Global class in a separate file and then make sure its on the classpath when you build your main class.
 
I might hide the random number generator in a static function (that returns the random number), and also you need to think about whether multiple threads will be calling the static function. If they are, the static function itself needs to complete before another thread can call it. There is a way to do that, but right off hand, I am not remembering it.
 
harborsparrow said:
I might hide the random number generator in a static function (that returns the random number), and also you need to think about whether multiple threads will be calling the static function. If they are, the static function itself needs to complete before another thread can call it. There is a way to do that, but right off hand, I am not remembering it.
synchronized
 

Similar threads

  • · Replies 14 ·
Replies
14
Views
6K
Replies
1
Views
2K
  • · Replies 18 ·
Replies
18
Views
9K
  • · Replies 13 ·
Replies
13
Views
3K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 4 ·
Replies
4
Views
5K
  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 13 ·
Replies
13
Views
2K