aspose file tools*
The moose likes Beginning Java and the fly likes Using Postfix notation...... Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Using Postfix notation......" Watch "Using Postfix notation......" New topic
Author

Using Postfix notation......

Steve Jensen
Ranch Hand

Joined: Sep 23, 2002
Posts: 126
Folks, the listing below is a small program that calculates the factorial for a given range of numbers.
public class TestFactorial
{
public static void main (String[] args)
{
for (int i = 0; i < 9; i++)
System.out.println(" f(" + i + ") = " + f(i));
}
static long f (int n)
{
long f = 1;
while (n > 1)
f *= n--;
return f;
}
}

Now, the thing is, I'm having a little problem getting my head around the line
<B> f *= n--; </B>
This is an example of a postfix operation, right?
So, f is multiplied by the value of n BEFORE its value is decreased by 1.
Going by this, and using the value of n= 3 - how does it work?


John Bonham was stronger, but Keith Moon was faster.
Barry Gaunt
Ranch Hand

Joined: Aug 03, 2002
Posts: 7729
It's equivalent to the following:
Don't write code like f *=n--; !


Ask a Meaningful Question and HowToAskQuestionsOnJavaRanch
Getting someone to think and try something out is much more useful than just telling them the answer.
Barry Gaunt
Ranch Hand

Joined: Aug 03, 2002
Posts: 7729
Here's another way using a for loop
[ March 25, 2003: Message edited by: Barry Gaunt ]
Michael Morris
Ranch Hand

Joined: Jan 30, 2002
Posts: 3451
And of course the well know recursive factoral solution:

Expanding on that to cover all the bases:


Don't write code like f *=n--; !

Passionate about not writing confusing code are we? I absolutely agree, make it clear.
Michael Morris


Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction. - Ernst F. Schumacher
Dirk Schreckmann
Sheriff

Joined: Dec 10, 2001
Posts: 7023
Note that n-- is not postfix notation (aka Polish notation). It is an example of using -- as a postfix operator.


[How To Ask Good Questions] [JavaRanch FAQ Wiki] [JavaRanch Radio]
Barry Gaunt
Ranch Hand

Joined: Aug 03, 2002
Posts: 7729
Wassisname said:
Passionate about not writing confusing code are we?

Must be this SCJP certi going to me 'ead.
Steve Jensen
Ranch Hand

Joined: Sep 23, 2002
Posts: 126
Originally posted by Barry Gaunt:
Here's another way using a for loop


OK, looking at this code.....
Taking the number 3 as an example
What happens??
OK...
The integer 3 enters the method as m.
And then within the for loop below
for ( int n = m ; n > 1 ; n-- )
We FIRSTLY decrease the value of 3 by 1, i.e., so we get 2. And then we multily this by f, i.e., the value 1. - 1 X 2 = 2
Then do the same thing again with the previously decremented value of 2, using the for loop, so we get 1.
And then we multiply this by f, i.e., the value 1. - 1 X 1 = 1
But, 2 x 1 = 2
How do we get 6???
William Barnes
Ranch Hand

Joined: Mar 16, 2001
Posts: 986


for ( int n = m ; n > 1 ; n-- )
We FIRSTLY decrease the value of 3 by 1,

Um, .... no. That isn't how a 'for' loop works. The "n--" doesn't hit until after the first iteration of the loop.


Please ignore post, I have no idea what I am talking about.
Steve Jensen
Ranch Hand

Joined: Sep 23, 2002
Posts: 126
Cheers!
Got it now!
Forgot to see that the postfix expression was relevant to the for loop.
Cheers folks!
William Barnes
Ranch Hand

Joined: Mar 16, 2001
Posts: 986

Don't know if postfix has anything to do with it. These loops will behave the same:

and
Layne Lund
Ranch Hand

Joined: Dec 06, 2001
Posts: 3061
Originally posted by Steve Jensen:
Cheers!
Got it now!
Forgot to see that the postfix expression was relevant to the for loop.
Cheers folks!

In fact, the postfix operator has NOTHING to do with it. This is all about how a for loop works. When the loop starts, the first part is executed only (commonly int i = 0 . The last section (commonly i++) isn't executed until the end if the loop. And finally the comparison, or middle part, (commonly i < SOME_FINAL_VALUE), is executed after the increment.
HTH
Layne


Java API Documentation
The Java Tutorial
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Using Postfix notation......