1 / 29

Chapter 5

Chapter 5. Decisions. Figure 1 A Decision. if statement. if( condition ) statement if (amount <= balance) balance = balance - amount; statement block: if(amount <= balance) { double newBalance = balance - amount; balance = newBalance }. Figure 2 Alternative Conditions.

roary-kirk
Download Presentation

Chapter 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 5 Decisions

  2. Figure 1 A Decision

  3. if statement • if(condition)statement • if (amount <= balance) balance = balance - amount; • statement block:if(amount <= balance){ double newBalance = balance - amount; balance = newBalance}

  4. Figure 2 Alternative Conditions

  5. if/else statement • if(condition)statementelse statement • if (amount <= balance) balance = balance - amount;else balance = balance - OVERDRAFT_PENALTY;

  6. Relational operators • < > like in math • <= >= correspond to £ ³ • == != correspond to = ¹ • == is not the same as =:if (x == 5) . . .x = 5;

  7. Comparing floating-point numbers • Roundoff errors:double r = Math.sqrt(2)r * r is 2.0000000000000004, not 2r * r == 2 is false • Test if x and y are close enough:|x - y| £ e, e a small value (e.g. 10-14.) • Not good enough for very small or large values. Use |x - y| £ e max(|x|, |y|)

  8. String comparison • Don't use == for strings!if (input == "Y") // WRONG!!! • Use equals method:if (input.equals("Y")) • == tests identity, equals tests equal contents • Case insensitive test ("Y" or "y")if (input.equalsIgnoreCase ("Y"))

  9. Comparing Objects • == tests for identity, equals for identical content • Rectangle a = new Rectangle(5, 10, 20, 30);Rectangle b = new Rectangle(5, 10, 20, 30); • a != b, but a.equals(b) • Caveat: equals must be defined for the class (see chapter 9)

  10. Figure 4 Comparing Objects

  11. Lexicographic Comparison • s.compareTo(t) < 0 means: s comes before t in the dictionary • "car"comes before "cargo" comes before x"cathode". • All uppercase letters come before lowercase: "Hello" comes before "car"

  12. Figure 3 Lexicographic Comparison

  13. Multiple alternatives • if (condition1)statement1;else if (condition2)statement2;else if (condition3)statement3;elsestatement4; • The first matching condition is executed.Order matters.

  14. Program Richter.java public class Richter { public static void main(String[] args) { ConsoleReader console = new ConsoleReader(System.in); System.out.println ("Enter a magnitude on the Richter scale:"); double magnitude = console.readDouble(); Earthquake quake = new Earthquake(magnitude); System.out.println(quake.getDescription()); } } class Earthquake { public Earthquake(double magnitude) { richter = magnitude; }

  15. public String getDescription() { String r; if (richter >= 8.0) r = "Most structures fall"; else if (richter >= 7.0) r = "Many buildings destroyed"; else if (richter >= 6.0) r = "Many buildings considerably damaged, some collapse"; else if (richter >= 4.5) r = "Damage to poorly constructed buildings"; else if (richter >= 3.5) r = "Felt by many people, no destruction"; else if (richter >= 0) r = "Generally not felt by people"; else r = "Negative numbers are not valid"; return r; } private double richter; }

  16. Nested branches • if (condition1){ if (condition1a)statement1a; elsestatement1b;}

  17. Figure 7 Income Tax Computation

  18. Program Tax.java public class Tax { public static void main(String[] args) { ConsoleReader console = new ConsoleReader(System.in); System.out.println("Please enter your income:"); double income = console.readDouble(); System.out.println("Please enter S for single, " + "M for married:"); String status = console.readLine(); TaxReturn aTaxReturn = new TaxReturn(income, status); System.out.println("The tax is " + aTaxReturn.getTax()); } }

  19. class TaxReturn { public TaxReturn(double anIncome, String aStatus) { income = anIncome; status = aStatus; } public double getTax() { double tax = 0; final double RATE1 = 0.15; final double RATE2 = 0.28; final double RATE3 = 0.31; final double SINGLE_CUTOFF1 = 21450; final double SINGLE_CUTOFF2 = 51900;

  20. final double SINGLE_BASE2 = 3217.50; final double SINGLE_BASE3 = 11743.50; final double MARRIED_CUTOFF1 = 35800; final double MARRIED_CUTOFF2 = 86500; final double MARRIED_BASE2 = 5370; final double MARRIED_BASE3 = 19566; if (status.equalsIgnoreCase("S")) { if (income <= SINGLE_CUTOFF1) tax = RATE1 * income; else if (income <= SINGLE_CUTOFF2) tax = SINGLE_BASE2 + RATE2 * (income - SINGLE_CUTOFF1); else tax = SINGLE_BASE3 + RATE3 * (income - SINGLE_CUTOFF2); }

  21. else { if (income <= MARRIED_CUTOFF1) tax = RATE1 * income; else if (income <= MARRIED_CUTOFF2) tax = MARRIED_BASE2 + RATE2 * (income - MARRIED_CUTOFF1); else tax = MARRIED_BASE3 + RATE3 * (income - MARRIED_CUTOFF2); } return tax; } private double income; private String status; }

  22. The boolean type • George Boole (1815-1864): pioneer in the study of logic • value of expression x < 10 is true or false. • boolean type: one of these 2 truth values • equals method has return type xboolean

  23. Boolean operators • && and|| or! not • if (tday == bday && tmonth == bmonth)... • if (tmonth == 4 || tmonth == 6 || tmonth == 9 || tmonth == 11)... • if (tmonth > bmonth || (tmonth == bmonth && tday > bday))...

  24. Figure 8 Flowcharts for && and || Combinations

  25. Truth tables • A B A&&Btrue true truetrue false falsefalse any false • A B A||Btrue any truefalse true truefalse false false • A !Atrue falsefalse true

  26. De Morgan's Law • !(A && B)x is the same as !A || !B • !(A || B)x is the same as !A && !B • if (!(country.equals("USA") && !state.equals("AK) && !state.equals("HI")))... • if (!country.equals("USA") ||!!state.equals("AK) ||!!state.equals("HI"))...

  27. Boolean Variables • boolean shipByAir = false;if (!country.equals("USA")) shipByAir = true;else if (state.equals("AK") || state.equals("HI")) shipByAir = true;if (shipByAir) ... else ... • Boolean variables are sometimes called flags

  28. Boolean do's and don'ts • don't: if (shipByAir == true)...if (shipByAir != false)... • do:if (shipByAir)... • don't:if (balance < 0) return true; else return false; • do:return balance < 0;

  29. Useful tips • Brace layout • Indentation and tabs • Copy and paste • Prepare test cases • Make a schedule

More Related