Previous |
Next |

Write code using the following methods of the java.lang.Math class: abs ceil floor max min random round sin cos tan sqrt.

The Math class is final and these methods are static. This means you cannot subclass Math and create modified versions of these methods. This is probably a good thing, as it reduces the possibility of ambiguity. You will almost certainly get questions on these methods and it would be a real pity to get any of them wrong just because you overlooked them.

Due to my shaky Maths background I had no idea what *abs*
might do until I studied for the Java Programmer Certification
Exam. It strips off the sign of a number and returns it simply as a
number. Thus the following will simply print out 99. If the number
is not negative you just get back the same number.

System.out.println(Math.abs(-99));

This method returns the next whole number up that is an integer. Thus if you pass

ceil(1.1)

it will return a value of 2.0

If you change that to

ceil(-1.1)

the result will be -1.0;

According to the JDK documentation this method returns

*the largest (closest to positive infinity) double value that
is not greater than the argument and is equal to a mathematical
integer.*

If that is not entirely clear, here is a short program and its output

public class MyMat{ public static void main(String[] argv){ System.out.println(Math.floor(-99.1)); System.out.println(Math.floor(-99)); System.out.println(Math.floor(99)); System.out.println(Math.floor(-.01)); System.out.println(Math.floor(0.1)); } }

And the output is

-100.0 -99.0 99.0 -1.0 0.0

Take note of the following two methods as they take two parameters. You may get questions with faulty examples that pass them only one parameter. As you might expect these methods are the equivalent of

*"which is the largest THIS parameter or THIS
parameter"*

The following code illustrates how these methods work

public class MaxMin{ public static void main(String argv[]){ System.out.println(Math.max(-1,-10)); System.out.println(Math.max(1,2)); System.out.println(Math.min(1,1)); System.out.println(Math.min(-1,-10)); System.out.println(Math.min(1,2)); } }

Here is the output

-1 2 1 -10 1

Returns a random number between 0.0 and 1.0.

Unlike some random number system Java does not appear to offer the ability to pass a seed number to increase the randomness. This method can be used to produce a random number between 0 and 100 as follows.

For the purpose of the exam one of the important aspects of this method is that the value returned is between 0.0 and 1.0. Thus a typical sequence of output might be

0.9151633320773057

0.25135231957619386

0.10070205341831895

Often a program will want to produce a random number between say 0 and 10 or 0 and 100. The following code combines math code to produce a random number between 0 and 100.

System.out.println(Math.round(Math.random()*100));

Rounds to the nearest integer. So, if the value is more than half way towards the higher integer, the value is rounded up to the next integer. If the number is less than this the next lowest integer is returned. So for example if the input to round is x then :

2.0 <=x < 2.5. then Math.round(x)==2.0

2.5 <=x < 3.0 the Math.round(x)==3.0

Here are some samples with output

System.out.println(Math.round(1.01)); System.out.println(Math.round(-2.1)); System.out.println(Math.round(20)); 1 -2 20

These trig methods take a parameter of type *double* and do
just about what trig functions do in every other language you have
used. In my case that is 12 years of programming and I have never
used a trig function. So perhaps the thing to remember is that the
parameter is a double.

returns a *double* value that is the square root of the
parameter.

max and min take two parameters

random returns value between 0 and 1

abs chops of the sign component

round rounds to the nearest integer but leaves the sign

Which of the following will compile correctly?

1) System.out.println(Math.max(x));

2) System.out.println(Math.random(10,3));

3) System.out.println(Math.round(20));

4) System.out.println(Math.sqrt(10));

Which of the following will output a random with values only from 1 to 10?

1) System.out.println(Math.round(Math.random()* 10));

2) System.out.println(Math.round(Math.random() % 10));

3) System.out.println(Math.random() *10);

4) None of the above

What will be output by the following line?

System.out.println(Math.floor(-2.1));

1) -2

2) 2.0

3) -3

4) -3.0

What will be output by the following line?

System.out.println(Math.abs(-2.1));

1) -2.0

2) -2.1

3) 2.1

4) 1.0

What will be output by the following line?

System.out.println(Math.ceil(-2.1));

1) -2.0

2) -2.1

3) 2.1

3) 1.0

What will happen when you attempt to compile and run the following code?

class MyCalc extends Math{ public int random(){ double iTemp; iTemp=super(); return super.round(iTemp); } } public class MyRand{ public static void main(String argv[]){ MyCalc m = new MyCals(); System.out.println(m.random()); } }

1) Compile time error

2) Run time error

3) Output of a random number between 0 and 1

4) Output of a random number between 1 and 10

3) System.out.println(Math.round(20));

4) System.out.println(Math.sqrt(10));

Option one is incorrect as max takes two parameters and option two
is incorrect because random takes no parameters.

**
**4) None of the above

The closest is option 1 but the detail to remember is that random will include the value zero and the question asks for values between 1 and 10.

4) -3.0

3) 2.1

**Answer 5)**

1) -2.0

**
**1) Compile time error

The math class is final and thus cannot be subclassed (MyCalc is defined as extending Math). This code is a mess of errors, you can only use super in a constructor but this code uses it in the random method.)

**Jyothi Krishnan on this topic at
**
http://www.geocities.com/SiliconValley/Network/3693/obj_sec9.html#obj28

Previous |
Next |