Results 1 to 4 of 4
Thread: Java random number
- 11-21-2009, 12:28 AM #1
Member
- Join Date
- Nov 2009
- Posts
- 2
- Rep Power
- 0
Java random number
Hey everyone, I am a beginner at Java ( totally ). And i wanted to create my first java program with the little things I know that will generate a random number in a defined domain I choose. ( eg a random number between [x,y] )
But something is wrong and I dont know why and where to look for a solution, so I post here.
Thanks very much, please explain me what is my fault.
import java.io.*;
class Runner
{
int a;
int b;
int x;
Runner (int x, int y)
{
a=x;
b=y;
}
Runner ekt()
{
x=a+(int)(Math.random()*b);
return x;
}
}
class RanNum
{
public static void main(String[] args) throws IOException
{
int x;
int a;
int b;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Write the first number of the domain");
a=(int)br.read();
System.out.println("Write the last number of the domain");
BufferedReader nt=new BufferedReader(new InputStreamReader(System.in));
b=(int)nt.read();
Runner RanCon=new Runner(a,b);
x=RanCon.ekt();
System.out.println("The random number is: "+x);
}
}
- 11-21-2009, 12:39 AM #2
Member
- Join Date
- Nov 2009
- Posts
- 2
- Rep Power
- 0
Made a mistake here, instead of Runner ekt it is int ekt.. still wrong results though
- 11-21-2009, 08:40 AM #3
- Join Date
- Sep 2008
- Location
- Voorschoten, the Netherlands
- Posts
- 11,406
- Blog Entries
- 7
- Rep Power
- 17
Care to elaborate on that 'something is wrong' part?
kind regards,
Jos
- 11-22-2009, 06:15 AM #4
When you say "random number", do you mean a random integer, or a random floating point value? From your code, it seems a random integer, so I'll go with that.
In your code you ask for two values, the "start" and "end" value. Math.random() returns a number, x, such that 0.0 < x < 1.0
So, to return a number between start and end (exclusive), do the following
Thus, you number is Math.random * (end - start) + start, which will be between start and end (exclusive).Java Code:1) Take your number 0.0 <= x < 1.0 2) Multiply it by (end - start) 0.0 <= x * (end - start) < (end - start) 3) Add "start" start <= x * (end - start) + start < end
To have the value between start and end (inclusive), multiply by (end - start + 1) and take the floor of the value.
So at step 3 you get
start <= x * (end - start + 1) + start < end + 1
After you take the floor
start <= Math.floor(x * (end - start + 1) + start) <= end
Note: this method will not work (due to overflow) if (end - start + 1) causes an overflow.
For example, if "start" is Integer.MIN_VALUE and "end" is Integer.MAX_VALUE, (end - start + 1) is ZERO!
end = 2^31 - 1
start = -2^31
-start = -2^31 (incorrectly)
end - start + 1 = (2^31 - 1) - 2^31 + 1 = 0 (big problem)Last edited by CodesAway; 11-22-2009 at 06:22 AM.
CodesAway - codesaway.info
writing tools that make writing code a little easier
Similar Threads
-
Trying to Generate Random number
By PeterFeng in forum New To JavaReplies: 10Last Post: 01-14-2009, 08:37 AM -
Random number help
By jgonzalez14 in forum New To JavaReplies: 5Last Post: 09-16-2008, 09:13 AM -
Random number
By jithan in forum Advanced JavaReplies: 1Last Post: 06-13-2008, 01:42 PM -
Generate a random number
By romina in forum New To JavaReplies: 1Last Post: 08-07-2007, 05:23 AM -
How to generate random number in java
By fernando in forum New To JavaReplies: 1Last Post: 08-01-2007, 07:32 PM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks