Win a copy of Functional Reactive Programming this week in the Other Languages forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

extending Math classes

 
Edwin Davidson
Greenhorn
Posts: 27
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Dear all:
I am working through the "Just Java 2" book by Peter van der Linden. I am on page 173 question 6. He asks me to create a class with Math's methods in it and to create a wrapper for each Math method.
What he is asking exactly is:
"Create a class that provides all the same methods as java.lang.Math but which operates on degrees not radians. Do this by creating a wrapper for each method in Math, in your class".
You cannot extend Math's methods as they are all static. I am writing to
ask if you guys can give me a hint as to the solution. I've read the abstract class section in that chapter a few times and I've been trying various things but I cannot get this to work.
In my example below I wish to overwrite math.random method to make it
multiply by 2, just to get going. Here is my code - file is mathh.java:

This doesn't work but you can see my logic, so to speak. Can someone tell me where I am going wrong ?
Thank you very much.
Edwin Davidson
Halifax, Nova Scotia
Canada
[ edited to surround code block with the UBB [code] and [/code] tags, in order to help preserve formatting -ds ]
[ February 17, 2004: Message edited by: Dirk Schreckmann ]
 
Eric Fletcher
Ranch Hand
Posts: 188
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Edwin,
You can't extend java.leng.Math, Math is a final class which means it cannot be extended. What he means by a wrapper class is to build a class that wraps Math. This class will have methods that mirror all the methods in Math, then you will call the mirrored method in the Math class.
So, you would take all the methods that take an angle in radians as an arg in the Math class, (like, say the cos(double a) method), create a new method in your class(let's call it MathWrapper) with the same method signature, but in your wrapper class the argument value will be in degrees. You will then convert the arg value to radians inside your method, then simply have your method call the cos method on Math. So you have wrapped your method around the functionality of the cos method on the Math class.
Does that make sense?
E
[ February 12, 2004: Message edited by: Eric Fletcher ]
 
Edwin Davidson
Greenhorn
Posts: 27
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
So I guess is next question is - how do I wrap the math class in a wrapper ? Is there code for that somewhere ?
Edwin
 
fred rosenberger
lowercase baba
Bartender
Posts: 12202
35
Chrome Java Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
how do I wrap the math class in a wrapper ? Is there code for that somewhere ?

nope. your assignement IS to write that code!!!
Eric's answer above tells you what you need to do. you need to create a new class, call it MathWrapper. you will then have to write a bunch of functions... all the ones you find in the Math api (see here.) make sure your signiatures match the others EXACTLY.
then, for each of your functions, you will need to convert the degress passed to you to radians (you may want to write another method in your class that does this... or you may notice that the Math class HAS a toRadians() method you may be able to use...). pass that CONVETED value to the Math method, which will send you back a result. return THAT value from your method.
This is called a wrapper because you effectively "wrap" your code around every Math method. does that help??
[ February 16, 2004: Message edited by: fred rosenberger ]
 
Edwin Davidson
Greenhorn
Posts: 27
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I think I got it now. It's a simply assigment for a complicated person !
Since I am not up on radians, I just used the Math.random() method to make my point.
The static method Math.random() will generate a simple random number by itself. In my little example below I am taking that number (generated by Math.random()) and multiplying it by two (what Math.random() does not do but I want it to).
So my version of random() in my MathWrapper does just that. So the morale of the story (assignment) was to create a class of your own, use Math.random() in it then take that result and rejig it as you like.
Thank you very much - you guys are really, really helpful.
Edwin
************************************************************
[ edited to surround code block with the UBB [code] and [/code] tags, in order to help preserve formatting -ds ]
[ February 17, 2004: Message edited by: Dirk Schreckmann ]
 
fred rosenberger
lowercase baba
Bartender
Posts: 12202
35
Chrome Java Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
If you want, when you get some done, post your code here (make sure you use the code tags!!!). I'll be happy to look at it and make sure you're on the right track (it sounds like it from your post above), or if you have any other questions about why/how it's working/not working (as probably would many others here).
good luck!!!
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic