English 中文(简体)
Is there a difference on how java performs operations using shortcut operators from the regular ones?
原标题:

I am working on a java program concerning the pascal s triangle.

So this is how it is coded:

for(int i = 0; i < 5; i++){
    for(int j = 0, x = 1; j <= i; j++){
        System.out.print(x + " ");
        x = x * (i - j) / (j + 1);
    }
    System.out.println();
}

and it shows:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

But when I tried to change the code to:

for(int i = 0; i < 5; i++){
    for(int j = 0, x = 1; j <= i; j++){
        System.out.print(x + " ");
        x *= (i - j) / (j + 1);
    }
    System.out.println();
}

and as you may have noticed, only the operator has changed to *=, but the result is:

1
1 1
1 2 0
1 3 3 0
1 4 4 0 0

Any idea what must have happened? Thanks in advance!

最佳回答

It s because you re using integer arithmetic in the wrong order.

x *= (i - j) / (j + 1);

is the same as

x = x * ((i - j) / (j + 1));

The brackets are important. (i - j) / (j + 1) is in most cases not a whole number, but java rounds it to an integer anyway.

The way you did it first

x = x * (i - j) / (j + 1);

the multiplication happens before the division, so you don t get any rounding errors.

问题回答

You switched the high precedence * for a low precedence *= resulting in

x = x * ((i - j) / (j + 1)); 

in stead of

x = (x * (i - j)) / (j + 1);

which you probably wanted.

Looks like integer division versus order of operations. Try adding some parenthesis and I think you will eventually achieve the same results. If you, say, divide 2/3 in integers, you get 0. So it matters if you do some multiplying first.





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签