Jui Mahajan

Ranch Hand

Posts: 62

posted 13 years ago

The following question from dan's single topic exam:

class D {

static boolean m(double v) {

return(v != v == Double.isNaN(v));

}

public static void main (String args[]) {

double d1 = Double.NaN;

double d2 = Double.POSITIVE_INFINITY;

double d3 = Double.MAX_VALUE;

System.out.print(m(d1) + "," + m(d2) + "," + m(d3));

}

}

the ans is true, true true. I expected it to be false , true, true, because, in first case, v==Double.isNaN(v)is true and therefore, v!=v is flase.

Pls clarify

class D {

static boolean m(double v) {

return(v != v == Double.isNaN(v));

}

public static void main (String args[]) {

double d1 = Double.NaN;

double d2 = Double.POSITIVE_INFINITY;

double d3 = Double.MAX_VALUE;

System.out.print(m(d1) + "," + m(d2) + "," + m(d3));

}

}

the ans is true, true true. I expected it to be false , true, true, because, in first case, v==Double.isNaN(v)is true and therefore, v!=v is flase.

Pls clarify

-----jui<br />scjp1.4

Corey McGlone

Ranch Hand

Posts: 3271

posted 13 years ago

I believe the answer to your question lies in the order in which these operands are evaluated. First, we evaluate v != v, which returns true because Double.NaN is not equal to Double.NaN. Next, we take that result (true) and compare it to the result of Double.isNaN(Double.NaN). That also returns true. Therefore, we finally check to see if true is equivalent to true, which, obviously, it is, and we get a final returned value of true.

I hope that helps,

Corey

I hope that helps,

Corey

Dan Lastoria

Ranch Hand

Posts: 57

With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime. |