Chapter 6 - Data types, variables, and arithmetic. In this chapter, the learning objectives are: Discuss primitive data types; learn how to declare fields and local variables; learn about arithmetic operators, compound assignment operators, and increment/decrement operators; discuss common mistakes in arithmetic.
Java Methods Object-Oriented Programming and Data Structures 2nd AP edition with GridWorld Maria Litvin ● Gary Litvin int chapter = 6; Data Types, Variables, and Arithmetic Copyright © 2011 by Maria Litvin, Gary Litvin, and Skylight Publishing All rights reserved Objectives: • Discuss primitive data types • Learn how to declare fields and local variables • Learn about arithmetic operators, compound assignment operators, and increment / decrement operators • Discuss common mistakes in arithmetic 62 Variables • A variable is a “named container” that holds a value count • q = 100 - q; means: Read the current value of q Subtract it from 100 Move the result back into q mov ax,q mov bx,100 sub bx,ax mov q,bx 63 Variables (cont’d) • Variables can be of different data types: int, char, double, boolean, etc • Variables can hold objects; then the type is the class of the object • The programmer gives names to variables • Names of variables usually start with a lowercase letter 64 Variables (cont’d) • A variable must be declared before it can be used: int Type count; double x, y; JButton go; Name(s) Bug bob; String firstName; 65 Variables (cont’d) • The assignment operator = sets the variable’s value: count = 5; x = 0; go = new JButton("Go"); firstName = args[0]; 66 Variables (cont’d) • A variable can be initialized in its declaration: int count = 5; JButton go = new JButton("Go"); String firstName = args[0]; 67 Variables: Scope • Each variable has a scope — the area in the source code where it is “visible.” • If you use a variable outside its scope, the compiler reports a syntax error • Variables can have the same name when their scopes not overlap { int k = ; } for (int k = ) { } 68 Fields • Fields are declared outside all constructors and methods • Fields are usually grouped together, either at the top or at the bottom of the class • The scope of a field is the whole class 69 Fields (cont’d) Scope public class SomeClass { Fields } Construct ors and methods Or: Scope public class SomeClass { Construct ors and methods Fields } 610 Literal Constants new line tab 'A', '+', '\n', '\t' char -99, 2010, int 0.75, -12.3, 8., double “coin.gif", "1776", "y", "\n" String 618 Symbolic Constants • Symbolic constants are initialized final variables: private final int sideLength = 8; private static final int BUFFER_SIZE = 1024; public static final int PIXELS_PER_INCH = 6; 619 Why Symbolic Constants? • Easy to change the value throughout the program, if necessary • Easy to change into a variable • More readable, self-documenting code • Additional data type checking by the compiler 620 Arithmetic • Operators: +, -, /, * , % • The precedence of operators and parentheses is the same as in algebra • m % n means the remainder when m is divided by n (for example, 17 % is 2; % is 2) • % has the same rank as / and * • Same-rank binary operators are performed in order from left to right 621 Arithmetic (cont’d) • The type of the result is determined by the types of the operands, not their values; this rule applies to all intermediate results in expressions • If one operand is an int and another is a double, the result is a double; if both operands are ints, the result is an int 622 Arithmetic (cont’d) • Caution: if a and b are ints, then a / b is truncated to an int… 17 / gives 3 / gives • …even if you assign the result to a double: double ratio = / 3; The double type of the result doesn’t help: ratio still gets the value 0.0 623 Arithmetic (cont’d) • To get the correct double result, use double constants or the cast operator: double ratio = 2.0 / 3; double ratio = / 3.0; int m = , n = ; double factor = (double)m / (double)n; double factor = (double)m / n; Casts double r2 = n / 2.0; 624 Arithmetic (cont’d) • A cast to int can be useful: Returns a double int ptsOnDie = (int)(Math.random() * 6) + 1; int miles = (int)(km * 1.61 + 0.5); Converts kilometers to miles, rounded to the nearest integer 625 Arithmetic (cont’d) • Caution: the range for ints is from -231 to 231-1 (about -2·109 to 2·109) • Overflow is not detected by the Java compiler or interpreter: n n n n n n n = = = = = = = 10 11 12 13 14 10^n 10^n 10^n 10^n 10^n 10^n 10^n = = = = = = = 100000000 1000000000 1410065408 1215752192 -727379968 1316134912 276447232 n! n! n! n! n! n! n! = 40320 = 362880 = 3628800 = 39916800 = 479001600 = 1932053504 = 1278945280 626 Arithmetic (cont’d) • Compound assignment operators: • Increment and decrement operators: a = a + b; a += b; a = a + 1; a++; a = a - b; a -= b; a = a - 1; a ; a = a * b; a *= b; a = a / b; a /= b; a = a % b; a %= b; Do not use these in larger expressions 627 From Numbers to Strings • The easiest way to convert x into a string is to concatenate x with an empty string: String s = x + ""; 'A' 123 -1 3.14 Math.PI Empty string "A" "123" "-1" "0.1" "3.14" "3.141592653589793" • The same rules apply to System.out.print(x) 628 From Objects to Strings • The toString method is called: public class Fraction { private int num, denom; public String toString () { return num + "/" + denom; } } Fraction f = new Fraction (2, 3); System.out println (f) ; Output: 2/3 is called automatically f.toString() 629 Review: • What is a variable? • What is the type of a variable that holds an object? • What is meant by the scope of a variable? • What is the scope of a field? • What is the scope of a local variable? 630 Review (cont’d): • Is it OK to give the same name to variables in different methods? • Is it OK to give the same name to a field and to a local variable of the same class? • What is the range for ints? • When is a cast to double used? 631 Review (cont’d): • Given double dF = 68.0; double dC = / * (dF - 32); what is the value of dC? • When is a cast to int used? • Should compound assignment operators be avoided? 632 ... 100000000 1000000000 1410 065 408 1215752192 -7 27379 968 13 161 34912 2 764 47232 n! n! n! n! n! n! n! = 40320 = 362 880 = 362 8800 = 399 168 00 = 47900 160 0 = 1932053504 = 1278945280 6? ? 26 Arithmetic (cont’d)... field radius remains 0.0 6? ?15 Primitive Data Types • • • • int double char boolean • • • • byte short long float Used in Java Methods 6? ? 16 Strings • String is not a primitive data type • Strings work... rounded to the nearest integer 6? ?25 Arithmetic (cont’d) • Caution: the range for ints is from -2 31 to 23 1-1 (about -2 ·109 to 2·109) • Overflow is not detected by the Java compiler or interpreter: