Java Basics: Data Types, Variables, and Loops If debugging is the process of removing software bugs, then programming must be the process of putting them in. - Edsger Dijkstra Plan for the Day Variables - symbols or names that represent values Data Types - the kind of value does a variable represent int - integers, such as 1024, -77, 2, 0 double - real numbers, or actually (good) approximations of real numbers. For example, 3.14159, -0.023343 char - single characters, which are enclosed in single quotes in Java: $, a, *, R boolean - logical values: true or false Arithmetic operators (and another use of +) + represents addition in Java, but also the concatenation or appending of two strings Based on slides at buildingjavaprograms.com 1
Data types type: A category or set of data values. Constrains the operations that can be performed on data Many languages ask the programmer to specify types // Variable mynumber stores integer values, and currently // has the value 3 int mynumber = 3; Internally, computers store everything as 1s and 0s 104 01101000 "hi" 01101000110101 2
Java's primitive types primitive types: Java s built-in data types for numbers, text characters and logic values. 8 primitive types in Java Non-primitive types are object types We'll use these four primitive types in this class: Name Description Examples int integers (whole numbers) 42, -3, 0, 926394 double real numbers 3.14, -0.25, 9.0 char single text characters 'a', 'X', '?', '\n' boolean logical values true, false 3
Expressions expression: A value or operation that computes a value. Example: 3 + 9 * 2 The simplest expression is a literal value. 84-2.11 A complex expression can use operators and parentheses. (-4.5 + 2.11) * 8 // * represents multiplication 4
Arithmetic operators Operators we will use often in cs 305j: + - * / % addition subtraction (or negation) multiplication division modulus (a.k.a. remainder) As a program runs, its expressions are evaluated. 1 + 1 evaluates to 2 System.out.println(3 * 4); //prints 12 How would we print the text 3 * 4 on the screen? 5
Integer division with / When we divide integers, the quotient is also an integer. 14 / 4 is 3, not 3.5 3 4 4 ) 14 10 ) 45 12 40 2 5 More examples: 32 / 5 is 6 84 / 10 is 8 156 / 100 is 1 Dividing by 0 causes an error when your program runs. 6
Integer remainder with % The % operator computes the remainder from integer division. 14 % 4 is 2, since 14 divided by 4 is 3, with remainder 2 33 % 5 is 3, since 218 divided by 5 is 6, with remainder 3 What is the result of the following operations? 45 % 6 2 % 2 8 % 20 11 % 4 7
Applications of % Operator How do we Obtain last (ones) digit of a number. Ex: From 432115, get 5 Obtain last 4 digits of a SSN. Ex: For SSN 552689321, get 9321 Determine whether a number is odd. Exercise: Suppose some unknown integer (greater than 100) is stored in variable n. How do you obtain the tens digit? 8
Operator Precedence precedence: Order in which operators are evaluated. Operators of same precedence level evaluate leftto-right. 1-2 - 3 is (1-2) - 3 which is -4 */% have a higher precedence than +- 1 + 3 * 4 is 13 6 + 8 / 2 * 3 6 + 4 * 3 6 + 12 is 18 Parentheses can force a certain order of evaluation: (1 + 3) * 4 is 16 9
Precedence examples 1 * 2 + 3 * 5 % 4 \_/ 2 + 3 * 5 % 4 \_/ 2 + 15 % 4 \ / 2 + 3 \ / 5 1 + 8 % 3 * 2-9 \_/ 1 + 2 * 2-9 \ / 1 + 4-9 \ / 5-9 \ / -4 10
Precedence questions What values result from the following expressions? 9 / 5 695 % 20 7 + 6 * 5 7 * 6 + 5 248 % 100 / 5 6 * 3-9 / 4 (5-7) * 4 6 + (18 % (17-12)) 11
Real numbers (type double) Java can manipulate real numbers (numbers with a decimal point): 6.022, -42.0, 2.143e17 The operators +-*/%() all still work with double. / produces a more precise answer: 15.0 / 2.0 is 7.5 % is not typically used on real numbers Precedence is the same: () before */% before +- 12
Real number example 2.0 * 2.4 + 2.25 * 4.0 / 2.0 \ / 4.8 + 2.25 * 4.0 / 2.0 \ / 4.8 + 9.0 / 2.0 \ / 4.8 + 4.5 \ / 9.3 13
Precision Issues with Reals Computations with real numbers are not always as precise as we expect (though the answer we get is close): System.out.println ( 11.0-10.91); We expect: 0.09 What s printed: 0.08999999999999999 Computers represent some real numbers in an imprecise way internally, so some calculations with them are off by a very slight amount. We can usually tolerate the precision errors, but later we will learn some ways to produce a better output for examples like above. 14
Mixing types When int and double are mixed, the result is a double. 4.2 * 3 is 12.6 The conversion is per-operator, affecting only its operands. 7 / 3 * 1.2 + 3 / 2 \_/ 2 * 1.2 + 3 / 2 \ / 2.4 + 3 / 2 \_/ 2.4 + 1 \ / 3.4 3 / 2 is 1 above, not 1.5. 2.0 + 10 / 3 * 2.5-6 / 4 \ / 2.0 + 3 * 2.5-6 / 4 \ / 2.0 + 7.5-6 / 4 \_/ 2.0 + 7.5-1 \ / 9.5-1 \ / 8.5 15
String concatenation string concatenation: Using + between a string and another value to make a longer string. "hello" + 42 is "hello42" 1 + "abc" + 2 is "1abc2" "abc" + 1 + 2 is "abc12" 1 + 2 + "abc" is "3abc" "abc" + 9 * 3 is "abc27" "1" + 1 is "11" 4-1 + "abc" is "3abc" Use + to print a string and an expression's value together. System.out.println("Grade: " + (95.1 + 71.9) / 2); Output: Grade: 83.5 16
Receipt example What's bad about the following code? public class Receipt { public static void main(string[] args) { // Calculate total owed, assuming 8% tax / 15% tip System.out.println("Subtotal:"); System.out.println(38 + 40 + 30); } } System.out.println("Tax:"); System.out.println((38 + 40 + 30) *.08); System.out.println("Tip:"); System.out.println((38 + 40 + 30) *.15); System.out.println("Total:"); System.out.println(38 + 40 + 30 + (38 + 40 + 30) *.08 + (38 + 40 + 30) *.15); The subtotal expression (38 + 40 + 30) is repeated So many println statements 17
Variables variable: A piece of the computer's memory that is given a name and type, and can store a value. Like preset stations on a car stereo, or cell phone speed dial: We use variables to store the result of a calculation, so we can use it later 18
Variable Declaration variable declaration: Sets aside memory for storing a value of some specified type. Variables must be declared before they can be used. A declaration specifies the variable s name and type. The name is an identifier. Declaration Syntax: <type> <name>; -- Example: int x; -- Example: double mygpa; x mygpa Multiple variable declarations on same line: double sidea, sideb, sidec; 19
Assignment Declaring a variable: sets aside a chunk of memory for storing values assignment: Stores a value in a variable. The value can be an expression; the variable stores its result. Syntax: <name> = <expression>; int x; x = 3; x 3 double mygpa; mygpa = 1.0 + 2.25; mygpa 3.25 20
Using variables Once given a value, a variable can be used in expressions: int x; x = 3; System.out.println("x is " + x); // x is 3 System.out.println(5 * x - 1); // 5 * 3-1 You can assign a value more than once: int x; x = 3; System.out.println(x + " here"); x 11 3 // 3 here x = 4 + 7; System.out.println("now x is " + x); // now x is 11 21
Declaration/initialization A variable can be declared/initialized in one statement. Syntax: <type> <name> = <value>; double mygpa = 3.95; x 14 int x = (11 % 3) + 12; mygpa 3.95 22
Assignment and algebra Assignment uses =, but it is not an algebraic equation. X = ; means store the value of the expression on the right in the memory set aside for x x = 3; means store 3 in the memory allocated for x What happens here? int x = 3; x = x + 2; //??? x 35 23
Assignment and types A variable can only store a value of its own type. int x = 2.5; // ERROR: incompatible types An int value can be stored in a double variable. The value is converted into the equivalent real number. double mygpa = 4; mygpa 4.0 double avg = 11 / 2; Why does avg store 5.0 and not 5.5? avg 5.0 24
Compiler errors A variable can't be used until it is assigned a value. int x; System.out.println(x); // ERROR: x has no value You may not declare the same variable twice. int x; int x; // ERROR: x already exists int x = 3; int x = 5; How can this code be fixed? // ERROR: x already exists 25
Printing a variable's value Use + to print a string and a variable's value on one line. double grade = (95.1 + 71.9 + 82.6) / 3.0; System.out.println("Your grade was " + grade); int students = 11 + 17 + 4 + 19 + 14; System.out.println("There are " + students + " students in the course."); Output: Your grade was 83.2 There are 65 students in the course. 26
Receipt question Improve the receipt program using variables. public class Receipt { public static void main(string[] args) { // Calculate total owed, assuming 8% tax / 15% tip System.out.println("Subtotal:"); System.out.println(38 + 40 + 30); } } System.out.println("Tax:"); System.out.println((38 + 40 + 30) *.08); System.out.println("Tip:"); System.out.println((38 + 40 + 30) *.15); System.out.println("Total:"); System.out.println(38 + 40 + 30 + (38 + 40 + 30) *.15 + (38 + 40 + 30) *.08); 27
Receipt answer public class Receipt { public static void main(string[] args) { // Calculate total owed, assuming 8% tax / 15% tip int subtotal = 38 + 40 + 30; double tax = subtotal *.08; double tip = subtotal *.15; double total = subtotal + tax + tip; } } System.out.println("Subtotal: " + subtotal); System.out.println("Tax: " + tax); System.out.println("Tip: " + tip); System.out.println("Total: " + total); 28
Exercises What is the result? 1. int x = 4; x = x + 3; 2. 5 = 1 + 4; 3. Double y = 6; y = 2 * y; 29
What is the Output? 1. int average = (9 + 8)/2; System.out.println(average); average = (average * 2 + 10 + 4)/4; System.out.println(average); 2. System.out.println(3 + 2 + friends are coming over ); 3. System.out.println( Call + 9 + 1 + 1); 30
Real or Integer? Categorize each of the following quantities by whether an int or double variable would best to store it: Integer (int) Real Number (double) 1. Temperature in degrees 5. Number of rainy days this month 2. Population of lemmings 6. Number of miles traveled today 3. Your grade point average 7. A person s weight in pounds 4. The average of a collection of exam scores credit: Kate Deibel, http://www.cs.washington.edu/homes/deibel/cats/ 31
Exercise Write a program that assigns the length and width of a rectangle to two variables, and then prints the area of the rectangle. Sample Output: Length = 4 Width = 3 The triangle s area is 12. 32
Exercise using Variables For student Jane Doe: Exam 1 score: 95 Exam 2 score: 89 Exam 3 score: 93 Write a program that displays Jane Doe s exam average. Output: On exam 2, Jane Doe made 89. Her exam average is 92.333333. 33
Increment and Decrement Operators The increment operator ++ adds 1 to a number result ++; // The value stored in result is increased by 1 The decrement operator -- subtracts 1 from a number result --; // value stored in result is decreased by 1 These operators can come before or after the variable/value: ++count; --count; 34
Output? Example - Increment/Decrement int count = 1; int n = 2 + count++; System.out.println( count = + count); System.out.println( n = + n); What about now: int count = 1; int n = 2 + ++count; 35
Assignment Operators Combine assignment with an operation Use whenever you want to apply some operation to the value of a variable, and store the result in that variable Example: count += 5; is equivalent to count = count + 5; Example: int result = 2; result *= 4; // result =? 36
Assignment Operators Example: int count1 = 3; int count2 = 6; int product *= count1 + count2; // what is product? equivalent to int product = product * (count1 + count2); Example: String s = hello ; S += world ; // what is s? equivalent to S = s + world ; 37