CS1101 Group1 Discussion 7 Lek Hsiang Hui comp.nus.edu.sg
Scope of discussion Mastermind codes CityFlood codes (discussion 5 exercise) Go through Sudoku In class exercise : MyString (lab8) –Javadoc
Sudoku Organization of your program –Don’t just only write codes for solving a problem –Instead, you should format your program in a more modular way. i.e. this method do this that method do that when I call, I should get this result, I don’t care how it’s implemented.
Sudoku It shouldn’t be the case where you call a method and do some extra codes outside to process the result which should be done by the method. E.g. … while(…){ simpleSolver(puzzle); } … //Method to solve the puzzle. static void simpleSolver(int puzzle[][]) { … } Shouldn’t simpleSolver be solving the puzzle?!
General ways to tackle a programming problem (impt!) Read the question, plan what methods you need. Write out the method skeletons without the implementation (comment the method if you need) If you don’t know how to implement a certain method, add in stubs to make sure your program compiles. Think about the implementation later e.g. //this method return a given word //the original word is not modified public String reverse(String word){ return null; //stub }
General ways to tackle a programming problem (impt!) If a group of codes is always being called at different places, don’t just copy and paste. (Maybe it’s better to create a method for it) Never hardcode the cases unless you have no choice. (Most probably you will miss out some case)
Javadoc ccomments/ ccomments/ –Appreciate why you XXX If you write your program conforming to the javadoc style, you can generate the nice API pages
this keyword It is a self referencing pointer to this instance. When is it used? E.g. 1 class Car{ private String color; … public void setColor(String color){ this.color = color; }
this keyword It is a self referencing pointer to this instance. When is it used? E.g. 1 class Car{ private String color; … public void setColor(String color){ this.color = color; }
this keyword E.g. 2 class Car{ private String color; … public void setColor(String color){ this.color = color; } public void paintBlue(){ this.setColor(“blue”); }
this keyword Constructor case refer to discussion 6
this keyword It is a self referencing pointer to this *instance*. When is it not used? E.g. class Car{ private static final String FAV_COLOR; … public static void getFavColor(){ return this.FAV_COLOR; }
this keyword It is a self referencing pointer to this *instance*. When is it not used? E.g. class Car{ private static final String FAV_COLOR; … public static void getFavColor(){ return this.FAV_COLOR; }
Object is the mother of all classes As mentioned previously, all user defined classes implicitly extends the java.lang.Object i.e. class A{} A a = new A(); boolean isObject = (a instanceof Object); //true
MyString In class exercise for this week and the next few weeks Appreciate OO programming See yourself as a API developer i.e. write libraries for others to use
MyString \0 A String is really made up of an array of characters However the String class by java is not mutable, so you cannot do something like String s = “….”; s.setString(“…”);
MyString For MyString, we are going to implement a mutable “String” class What is the special thing about this? It’s size is variable (so the size can increase) You are supposed to manually increase it yourself. (do not use ArrayList) Maybe write a method that create a new char[] that is bigger and transfer all the items there?
MyString This week you will try to implement the method (in class), will go around the class to see whether you need help : public class MyString{ private char[] charArray; … //this method extend the size of existing charArray //with a larger one, retaining all its previous //value private void ensureCapacity(int minCapacity){ … }
MyString public class MyString{ … public String toString(){ //? } … }
MyString MyString(java.lang.String str) Constructs a MyString object initialized to the contents of the specified string. Do you see any way this constructor would need to use one of the MyString method?
MyString public class MyString{ //add in the constructors //and any additional constructors //you think you need }
MyString public class MyString{ //reverse? //charAt? }