  Second Summer 2002

Iffy Practice Problems: This is textbook chapter 5. Warmups.
Questions:

1. Find the errors in the following `if` statements.
```if quarters > 0 then System.out.println(quarters + "quarters");

if (1 + x > Math.pow(x, Math.sqrt(2)) y = y + x;

if (x = 1) y++; else if (x = 2) y = y + 2;

if (x && y == 0) p = new Point2D.Double(x, y);

if (1 <= x <= 10)
{ System.out.println("Enter y:");
}

if (s != "nickels" || s != "pennies"
|| s != "dimes" || s != "quarters")
System.out.print("Input error!");

if (input.equalsIgnoreCase("N") || "NO")
return;

if (x != null) y = y + x;

language = "English";
if (country.equals("USA"))
if (state.equals("PR")) language = "Spanish";
else if (country.equals("China"))
language = "Chinese"; ```

2. Explain the following terms and give an example for each construct:

• Expression

• Condition

• Statement

• Simple statement

• Compound statement

• Block

3. Explain the difference between an `if/else  /else` statement and nested if statements. Give an example for each.

4. Give an example for an `if/else /else` statement where the order of the tests does not matter. Give an example where the order of the tests matter.
```

```

5. Of the following pairs of strings, which comes first in lexicographic order?
```"Tom", "Dick"
"Tom", "Tomato"
"church", "Churchill"
"car manufacturer", "carburetor"
"Harry" hairy"
"C++", "Car"
"Tom", "Tom"
"Car", "Carl"
"car", "bar"```

6. Complete the following truth table by finding the truth values of the Boolean expressions for all combinations of the Boolean inputs `p`, `q`, and `r`.

`p` `q` `r` `(p && q) || !r` `!(p && (q || !r))`
false false false ? ?
false false true ? ?
false true false ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
? ? ? ? ?

7. True or false: `A && B ` is the same as `B && A ` for any Boolean conditions `A` and `B`?

8. Explain the difference between
```s = 0;
if (x > 0) s++;
if (y > 0) s++;```
and
```s = 0;
if (x > 0) s++;
else if (y > 0) s++;```

9. Use De Morgan's law to simplify the following Boolean expressions.
```!(x > 0 && y > 0)

!(x != 0 || y != 0)

!(country.equals("USA") && !state.equals("HI") && !state.equals("AK"))

!(x % 4 != 0 || !(x % 100 == 0 && x % 400 == 0))

```

10. Make up another Java code example that shows the dangling`-else` problem, using the following statement. A student with a GPA of at least 1.5, but less than 2, is on probation. With less than 1.5, the student is failing.
```

```

11. Explain the difference between the `==` operator and the `equals` method when comparing strings.

12. Explain the difference between the tests
`r == s`
and
`r.equals(s)`
where both `r` and `s` are of type `Rectangle`.

13. What is wrong with this test to see whether `r` is `null`? What happens when this code runs?
```Rectangle r;
...
if (r.equals(null))
r = new Rectangle(5, 10, 20, 30);```

14. Write Java code to test whether two objects of type `Line2D.Double` represent the same line when displayed on the graphics screen. Do not use `a.equals(b)`.
```Line2D.Double a;
Line2D.Double b;

g2.drawString("They look the same!", x, y);```
Hint: If `p` and `q` are points, then `Line2D.Double(p, q)` and `Line2D.Double(q, p)` look the same.

15. Explain why it is more difficult to compare floating-point numbers than integers. Write Java code to test whether an integer `n` equals 10 and whether a floating-point number `x` equals 10.
```

```

16. Give an example for two floating-point numbers `x` and `y` such that `Math.abs(x - y)` is larger than 1000, but `x` and `y` are still identical except for a roundoff error.
```

```

17. Consider the following test to see whether a point falls inside a rectangle.
```Point2D.Double p = ...
boolean xInside = false;
if (x1 <= p.getX() && p.getY() <= x2)
xInside = true;
boolean yInside = false;
if (y1 <= p.getY() && p.getY() <= y2)
yInside = true;
if (xInside && yInside)
g2.drawString("p is inside the rectangle.", x1, y1);```
Rewrite this code to eliminate the explicit `true` and `false` values, by setting `xInside` and `yInside` to the values of Boolean expressions.
```

```

Last updated: Jun 16, 2002 by Adrian German for A201