270 likes | 442 Views
Intro to Java Midterm Review. Dan Deutsch. About Java. Compiled vs. Interpreted Java is compiled to Java Bytecode , not interpreted Bytecode is then interpreted when the program runs Python is interpreted, so it translates as the program runs on the computer The Java API
E N D
Intro to Java Midterm Review Dan Deutsch Daniel Deutsch
About Java • Compiled vs. Interpreted • Java is compiled to Java Bytecode, not interpreted • Bytecode is then interpreted when the program runs • Python is interpreted, so it translates as the program runs on the computer • The Java API • The Java Application Programming Interface is a library of code that you can use in Java programs • It has things like the String class and the Scanner class Daniel Deutsch
Primitives and Reserved Words • Primitives • Types already built into Java. Variables can be these types • They turn purple in jGrasp • Integer types: • byte, short, int, long • Floating point types: • float, double • Other: • boolean, char • Reserved words • You can’t use any of the words that Java has reserved to be “keywords” as a variable name • All of the primitives, public, private, protected, static, void, class, switch, case, default, for, while, do, continue, if, else, return, new, this, throw, throws, Daniel Deutsch
Variable Names • Variables must start with a letter, underscore or $ • After the first letter, it can be a letter, an underscore, $ or a number • Good examples: • Num1, DAYS_IN_YEAR, $, money$$, _scanner • Bad examples: • 7even, hello world, private, num1* Daniel Deutsch
Characters • Stored in memory as 8 bits • Indicated by single quotes • Each character maps to a number between 0 and 255 • ‘a’ = 97 • ‘A’ = 65 • ‘0’ = 48 • This means that ‘a’ > ‘A’ • char c1 = ‘a’;System.out.println(c1 + 2); • int c2 = c1 + 2;System.out.println(c2); • char c3 = (char) (c1 + 2);System.out.println(c3); 99 99 c Daniel Deutsch
Arithmetic • Operators have an order of operations • () • - negation • *, /, % • +, - • = • Be careful of integer division!! Casting helps to get around this • int a = 5, b = 2;System.out.println(a / b); • System.out.println((double) a / b); • double c = 5.0;System.out.println(c / b); • System.out.println(5.0 / b); • double d = 8.825;int e = (int) d; • System.out.println(e); • System.out.println((double) (5 / 2)); 2 2.5 2.5 2.5 8 2.0 Daniel Deutsch
Arithmetic --, *=, /=, +=, -=, %= • The mod operator • % gives you the remainder when dividing two numbers • int mod = 33 % 4; • Find the ones digit of the number 2358? • int ones = 2358 % 10; • The tens digit? • int tens = 2358 / 10; • tens = tens % 10; • Misc. operators • num++, num += 1, num = num + 1 • What’s the difference between num++ and ++num? • num++ executes then line, then increments by 1 • ++numincrements by 1, then executes line • intnum = 0;System.out.println(num++); • // num is now 1 • System.out.println(++num); 235 5 0 2 Daniel Deutsch
Objects • Objects are instantiations of Classes • They have data associated with them and you can call methods on them • Scanner scanner = new Scanner(“Dan 37.4 java”); • // here we call the next() method on a scannerString d = scanner.next(); • Java saves the location in memory where the Object’s data is. Primitives actually save the value of the variable • int a = 5; • String s = “Dan”; • The Math class and the Character class provide static methods that you can call with the class name • double d = Math.floor(3.25); • You cannot instantiate them! • Math math = new Math(); Dan 3.0 5 a Dan s Daniel Deutsch
Strings • Strings are Objects, not primitive types • Indicated with double quotes charAt char c = s.charAt(index); c Length String s = “abcdefghijk”; int length = s.length(); substring String s1 = s.substring(3); String s2 = s.substring(index, 6); defghijk 11 cdef indexOf int index = s.indexOf(‘c’);char bad = s.charAt(length); toLowerCase String lower = “UPPER”.toLowerCase(); 2 upper Crashes! toUpperCase Daniel Deutsch
Strings • Escape characters • There are special characters which use two symbols to represent them • \t is a tab • \n is a newline character • \\ is the \ character String s = “1\t2\n\t3\t\\”; System.out.println(s); 1 2 3 \ Daniel Deutsch
Strings • Covert a String to an int or double • String s = “72”; • int a = Integer.parseInt(s); • double d = Double.parseDouble(“38.08”); • int b = Integer.parseInt(“seven”); • Convert a number into a String • int a = 7; • String s = a + “”; • If you need to compare two Strings, never use ==. The == operator compares the values at the memory address. Objects store a location in memory where the data is stored, not the actual value of the variable. Use equals instead Crashes! • String s1 = “Java”, s2 = “Java”; • if (s1.equals(s2))System.out.println(“same!”); equalsIgnoreCase() Daniel Deutsch
Scanner hasNexthasNextLinenext if (scanner.hasNext()) String d = s.next(); true • Scanner is a class that allows you to iterate over a stream of text, like System.in or a String • It’s located in java.util.Scanner, which you have to import “Dan” nextIntint a = s.nextInt(); 38 nextDouble double d = s.nextDouble(); 12.7 nextChardoes not exist. Do this instead: // user types “yes” char c = kb.next().charAt(0); initialization Scanner kb = new Scanner(System.in);Scanner s = new Scanner(“Dan 38 12.7”); ‘y’ Crashes! s.next();s.hasNext(); false Daniel Deutsch
Scanner Example “First 3 24.8 12 Last” Scanner s = new Scanner(“First 3 24.8 12 Last”); 12 “First” s.next(); s.nextInt(); “3” s.next(); Last s.next(); s.nextInt(); crashes! s.hasNext(); false s.nextDouble(); 24.8 Daniel Deutsch
Math Class • You can use the Math class to do useful math operations • You call the methods with the Math class pow double d1 = Math.pow(2, 3); floor double d5 = Math.floor(5.6); 8.0 5.0 round double d2 = Math.round(7.8); 8.0 sqrt double d6 = Math.sqrt(34); 5.83… ceildouble d3 = Math.ceil(2.1); double d4 = Math.ceil(3.0); 3.0 3.0 Daniel Deutsch
Printf • The printf command allows you to format a print statement in very specific ways • You create a String that encodes the output format of the string • %d for integers • %f for floats • %s for Objects (e.g. Strings) • %% displays %, like the \ character works with normal Strings • You can specify how many spaces wide you want the result to be and how many points after the decimal you want to see • %.2f will have 2 digits after the decimal, padded with 0s. Dosen’t work with integers – why? • %8d will make sure the width of the number is at least 8 characters • %08d will pad the number with 0s if necessary • The newline character \n is not included, like System.out.print(); Daniel Deutsch
Printf Examples int a = 7; System.out.printf(“%3d\n”, a); “ 7” double d2 = 1234567.8; System.out.printf(“%f\n”, d2); 1234567.800000 “007” System.out.printf(“%03d\n”, a); System.out.printf(“%2f\n”, d2); 1234567.800000 double d = 3.2; System.out.printf(“%04d\n”, d); crashes! “3.200” System.out.printf(“%.3f\n”, d); “03.200%” System.out.printf(“%06.3f%%\n”, d); System.out.printf(“My name is %s\n”, “Dan”); “My name is Dan” Daniel Deutsch
If Statements if (a == 3) System.out.println(“equal”); System.out.println(“always runs”); a = 3; “equals” “always runs” a = 2; “always runs”; • If statements are useful when you want to change the logic of your program based on values of variables or properties of Objects • They must use expressions that evaluates to Booleans • If true, it will only execute the next statement unless curly braces are used to create code blocks, regardless of indentation • If statements can combine with else statements for more control. Ifthe if statement evaluates to false, the else statement runs. Otherwise only the if statement runs a = 3 a = 2 if (a == 3) System.out.println(“equal”); else System.out.println(“not equal”); Daniel Deutsch
If Statements • If you have mutually exclusive options, you can use an if-else-if structure. If you include an else, exactly one of the options will be chosen b a c char choice = kb.next().charAt(0); if (choice = ‘a’) System.out.println(“a chosen”); else if (choice == ‘b’) System.out.println(“b chosen”); else System.out.println(“neither”); a b c char choice = kb.next().charAt(0); if (choice = ‘a’) System.out.println(“a chosen”); else if (choice == ‘b’) System.out.println(“b chosen”); Daniel Deutsch
If Statement Examples a = 2, b = 3 a = 8, b = 5 if (a == 8 && b == 5) { System.out.println(“a is 8”); System.out.println(“b is 5”); } int a = 2, b = 3; if (a == 2 && b == 3)System.out.println(1); else if (!(a != 2 || b != 3)) System.out.println(2); This will never be called, no matter what a and b are. Why? a = 2, b = 3 a = 8, b = 5 if (a == 8 && b == 5) x++; y++; 1 (a == 2 && b == 3) is the same as !(a != 2 || b != 3) a = 8, b = 5 a = 8, b = 5 a = 2, b = 3 a = 8, b = 5 a = 2, b = 3 if (a == 8 && b == 5) System.out.println(“a is 8”); System.out.println(“b is 5”); Misleading indentation!Only executes next statement! Daniel Deutsch
If Statement Examples if (a <= 5) { if (b <= 2)System.out.println(“tiny”); } else System.out.println(“huge”);System.out.println(“end”); if (a <= 5) if (b <= 2)Sysytem.out.println(“tiny”);else {System.out.println(“huge”);System.out.println(“end”);} Misleading indentation! Rewrite it Misleading indentation! Rewrite it a = 2, b = 1 a = 2, b = 5 a = 6, b = 1 a = 6, b = 1 a = 2, b = 1 a = 2, b = 3 if (a <= 5) { if (b <= 2)System.out.println(“tiny”); }else System.out.println(“huge”);System.out.println(“end”); This is the same thing!Just clearer (and better) { if (a <= 5) if (b <= 2)System.out.println(“tiny”); else { System.out.println(“huge”);System.out.println(“end”); } else goes withthe most recent if } Daniel Deutsch
Switch Statements • Switch statements are interesting control structures. They are like if statements, but multiple clauses can be executed • Unless there is a break, the program will keep executing • The default case is for when no other case is selected c b a A char choice = kb.next().charAt(0);switch (choice) { case ‘a’: case ‘A’: x++; break; case ‘b’: y++; default: z++;} A a c b A a c A b a A a c b b c c b c A a b Daniel Deutsch
For Loops • For loops are useful when code needs to be repeated and you know how many times it needs to execute. You may not know it will execute 5 times every time the code runs, but it will execute s.length() times • There are 3 parts that create the for loop • They are executed in the following order: 1. Initialization 2. condition 2.1 If true, the body 2.2 Otherwise, end 3. Afterthought 4. Go to step 2 for (inti = 0; i < s.length(); i++) initialization afterthought condition Daniel Deutsch
For Loop Examples for (inti = 0; i< 10; i++) System.out.print(i + “ “); < > for (inti = 10; i 0; i--) System.out.print(i + “ “); … 9 2 0 1 i = 2 1 0 9 10 10 9 8 … 1 Nothing! 012345678910 String s = “I love Java”; for (inti = 0; i< s.length(); i += 2) System.out.print(s.charAt(i)); { for (inti = 0; i < 10; i++) System.out.println((i * 2) + “ “); System.out.println(“finished body”); a l v I a } 0 Finished body 2 Finished body 4 … 18 Finished body 0 2 4 … 18 Finished body for (int n = 1; n < 1000; n *= 2) System.out.print(n + “ “); 1 2 4 … 512 n = 1024 512 * 2 1 * 2 2*2 1 4 2 512 Daniel Deutsch
While and Do-While Loops • While loops are useful when you don’t know how many times the loop will run. Could be based on user input • Do-while loops are useful when you don’t know how many times it will run, but it will run at least once do { char choice = kb.next().charAt(0); // display menu } while (choice != ‘q’); intnum = 0; while (num < 5) { if (kb.next().equals(“y”)) num++; } Daniel Deutsch
File Structure • The class declaration goes first • Method declarations of the class go in the body • Any imports/package declarations go outside of the class imports import java.util.Scanner; Memorize this! class declaration public class MyClass { main method public static void main(String[] args) { // code goes here } public static int add(a, int b) { return a + b; other methods } } Daniel Deutsch
Testing • White box testing: every line of code get executed. • The white box means you can see the code and make the test cases based on the code • Test boundary cases • Test invalid and valid cases • Regression testing: rewriting code or adding code and making sure that everything that worked before works now • Black box testing: try many values that are valid/invalid. You don’t know what the program is doing, so you try many cases Test -1, 0, 1, 9, 10, and 11. Probably values in between if (0 <= a && a <= 10) Daniel Deutsch