Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Great Ideas of CS with Java Part 1 WWW & Computer programming in the language Java Ch 1: The World Wide Web Ch 2: Watch out: Here comes Java Ch 3: Numerical computation & Function Ch 4: Subroutines & Databases Ch 5: Graphics Ch 6: Simulation Ch 7: Software engineering Part 2 Understanding what a computer is and how it works Ch 8: Machine architecture Ch 9: Language translation Ch 10: Virtual Environment for Computing Ch 11: Security, Privavcy, and Wishful thinking Ch 12: Computer Communication Part 3 Advanced topics Ch 13: Program Execution Time Ch 14: Parallel Computation Ch 15: Noncomputability Ch 16: Artificial intelligence 1 SNU IDB Lab. Ch2. Watch Out: Here Comes Java Copyright © SNU IDB Lab. SNU IDB Lab. Table of Contents Put some Action into Web Pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types String and String Manipulation More on Syntax 3 SNU IDB Lab. Simple Web Page with some Action <html> <head> <title>The Nobel Prizes</title> </head> <body> <h1>Alfred Nobel’s Legacy</h1> <p>Alfred Nobel, a nineteenth-century industrialist, died in 1896 and left … </p> <p> If you would like to read more ….</p> <APPLET code = “StoryAdvice.class”> </APPLET> </body> </html> HTML code can call a computer program (applet) that can be designed to execute almost any process we can imagine 4 SNU IDB Lab. Two Ways of Using Java Stand Alone (like most traditional programs) Code: sampleprogram.java Compile: javac sampleprogram.java Java compiler generates sampleprogram.class Execute: java sampleprogram Inside Web as an Applet Code: sampleprogram.java Compile: javac sampleprogram.java Java compiler generates sampleprogram.class Embed into HTML code <APPLET code = “sampleprogram.class”> </APPLET> 5 SNU IDB Lab. Table of Contents Put some Action into Web Pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types String and String Manipulation More on Syntax 6 SNU IDB Lab. High-Level Programming Paradigms Control-oriented Programming (before mid 80’s) Real world problem a set of functions Data and functions are separately treated Pascal, C Object-oriented Programming (after mid 80’s) Real world problem a set of classes Data and functions are encapsulated inside classes C++, Java 7 SNU IDB Lab. Java vs. C #include <stdio.h> int power = 0; // 전원상태 0(off), 1(on) int channel = 1; // 채널 int caption = 0; // 캡션상태 0(off), 1(on) main() { power(); channel = 10; channelUp(); printf("%d\n", channel); displayCaption("Hello, World"); // 현재 캡션 기능이 꺼져 있어 글짜 안보임 } caption = 1; // 캡션 기능을 켠다. displayCaption("Hello, World"); // 보임 power() { if( power ) { power = 0; } else { power = 1; } } // 전원 off on // 전원 on off channelUp() { ++channel; } channelDown() { --channel; } displayCaption(char *text) { // 캡션 상태가 on 일 때만 text를 보여준다. if( caption ) { printf( "%s \n", text); } } 8 SNU IDB Lab. JAVA vs. C CaptionTVTest class TV class class Tv { boolean power = false; // 전원상태(on/off) int channel; // 채널 class CaptionTvTest { public static void main(String args[]) { void power() {power = !power; } void channelUp() {++channel; } void channelDown() {--channel;} } CaptionTv ctv = new CaptionTv(); ctv.power(); ctv.channel = 10; ctv.channelUp(); CaptionTV class System.out.println(ctv.channel); class CaptionTv extends Tv { boolean caption; // 캡션상태(on/off) ctv.displayCaption("Hello, World"); // 캡션 기능이 꺼져 있어 보여지지 않는다. void displayCaption(String text) { if (caption) { // 캡션 상태가 on(true)일 때만 text를 보임 } } } ctv.caption = true; // 캡션기능을 켠다. ctv.displayCaption("Hello,World"); // 캡션을 화면에 보여 준다. } System.out.println(text); } 9 SNU IDB Lab. Control Oriented Programming Paradigm In traditional control-oriented programming, program describes what the machine will do sequentially, grouping commonly used parts into “functions”. Fortran, Pascal, C, and many more old programming languages Start statement function myFunction(arg…) ** statements… ** invoke other functions… invoke functions… statements… 10 SNU IDB Lab. Sample C program #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int i, j, k, l; for(i=0; i < argc; i++) { func-abc(); func-def(); fprintf(); } } func-abc ( ) { func-def ( ) ……. } { ….. funct-xyx() } func-xyz ( ) { ………} 11 SNU IDB Lab. 참고자료 C 언어 기초 SNU IDB Lab. 참고slide C 프로그래밍 언어 Dennis Richie UNIX 운영 체제를 설계하면서 개발 프로그래머에게 편리한 도구로 설계 시스템 프로그래밍 언어로 사용 장점 실행 속도가 빠르다 이식성이 좋다 프로그램을 논리적인 작업 단위로 작성하고 이를 계층적으로 배치 고급언어의 특성과 저급 수준 언어의 특성을 동시에 가지고 있다 13 SNU IDB Lab. 참고slide 프로그래밍 기초(C 언어) C 언어에서의 함수 (function in C) 단위 작업을 수행하기 위한 명령문의 집합 예 사용자로부터 입력을 받는다. 입력에서 오류가 없는지 확인한다. 계산한다. 결과를 출력한다. 위의 명령문들을 따로 묶어 분리하고 거기에 이름을 붙인 것 기능 : 입력을 받아 계산을 하고 그 결과를 넘겨준다. 14 SNU IDB Lab. 참고slide 프로그래밍 기초(C 언어) C 프로그램 여러 함수의 모임 int sum(int a, int b) {…..} double avg(int a, int b) {…..} void main() { …..} 15 SNU IDB Lab. 참고slide 프로그래밍 기초 (C 언어) main() C 프로그램 내에서 반드시 정의되어야 하는 특별한 함수 프로그램이 실행될 때 가장 먼저 실행되는 함수 main() 함수 내에서 다른 함수를 호출하는 식으로 프로그램이 실행된다. #include <stdio.h> main() { printf(“Hello World”); } printf() 함수는 직접 작성할 필요없음 호출하여 사용하기만 하면 됨 (Library) 16 SNU IDB Lab. 참고slide 사칙 연산을 수행하는 C 프로그램 #include <stdio.h> main() { int add, sub, mul, div; add = 4 + 2; sub = 4 - 2; mul = 4 * 2; div = 4 / 2; printf (“%d %d %d %d”, add, sub, mul, div); } <%d의 의미> - %d는 형식 코드로서 이 위치에 변수 값을 출력한다. - 출력하는 변수의 값은 정수임을 의미이다. - 참고 ) 실수를 출력하기 위한 형식 코드는 %f 17 SNU IDB Lab. 참고slide 변수 (Variable) 변수 값을 저장하기 위한 장소 (예 add-var = 4 + 2;) 변수 선언 (variable declaration) 변수를 사용하기 전에는 반드시 선언해야 한다. 선언할 때 변수가 저장하는 자료형(data type)을 밝혀야 한다. int add-var; 이 경우 add-var 라는 변수는 정수만을 저장할 수 있다. 자료형 (data type) int, float, char,…... 18 SNU IDB Lab. 참고slide 변수 예제 #include <stdio.h> main() { int j; float f; char c; j = 1; f = 0.3; c = ‘a’; printf (“%d %f %c \n”, j, f, c); } 줄바꿈 기호 19 SNU IDB Lab. 참고slide 배열 (Array) 정수를 저장하는 변수를 100개 선언하려면?? int iarray[100]; 필요한 변수 100개를 모두 선언한다. 배열 (Array)를 선언한다. 정수형 변수를 100개 선언한 것과 동일한 효과 float farray[100]; 실수형 변수를 100개 선언한 것과 동일한 효과 20 SNU IDB Lab. 참고slide 연산자 (operators) 주요 연산자 +, -, *, / : 4칙 연산자 % : 나머지를 구하는 연산자 ++ : 변수의 값을 1 증가하는 연산자 -- : 변수의 값을 1 감소하는 연산자 21 SNU IDB Lab. 참고slide 연산자 예제 #include <stdio.h> main() { int a, b; a = 5; b = a % 3; a++; printf (“%d %d \n”, a, b); } 22 출력되는 값은? SNU IDB Lab. 참고slide 흐름 제어 (Control Flow) 프로그램의 실행 순서를 제어하는 명령문 조건문 여러 선택 가능한 실행 순서 중에서 조건에 부합하는 문장을 선택하여 실행한다. if문, if-else 문, switch문,…. 반복문 조건이 참(true)인 동안 일단의 문장을 반복 실행한다. for문, while문, …. 23 SNU IDB Lab. 참고slide 조건문 (Conditional Statement) #include <stdio.h> - 조건식이 기술된다. main() - 조건식은 관계 연산자나 논 { 리 연산자로 구성된다. int a; a = 1; if (a = = 1) printf(“a = 1”); else if (a = = 2) printf(“a = 2”); a ++; if (a = = 1) printf(“a = 1”); else if (a = = 2) printf(“a = 2”); } 24 SNU IDB Lab. 참고slide 조건문 관계 연산자 <, >, <=, >=, ==, != if (a != b) printf(“not equal”); a와 b의 값이 같지 않다면 not equal을 출력한다. 논리 연산자 ! (not), &&(and), ||(or) if ( (a >=b) && (a >=c) ) printf(“a is Max”); a가 b보다 크고 그리고 a 가 c보다 크면 a is Max가 출력된다. 25 SNU IDB Lab. 참고slide 반복문 (Repeating Statement) 3. 실제 반복 되는 문장 for (j = 1; j <= 100; j++) sum = sum + j; 1. 초기값 4. 단계 2. 반복할 조건 - 조건이 만족되는 한 계속 반복된다. 26 SNU IDB Lab. 참고slide 반복문 예제 1에서 100까지 더하는 문제 #include <stdio.h> main() { int j, sum; sum = 0; for (j = 1; j <=100; j++) sum = sum + j; printf (“sum = %d”, sum); } 27 SNU IDB Lab. 참고slide 반복문 예제 1에서 100까지 더하는 문제 #include <stdio.h> main() { int j, sum; sum = 0; j = 1; while (j <= 100) { sum = sum + j; j++; } printf (“sum = %d”, sum); } 28 SNU IDB Lab. 참고slide C 프로그램 예제 함수 void swap(int pts[], int i, int j ) { 인자 int tmp; tmp = pts[i]; pts[i] = pts[j]; pts[j] = tmp; #include <stdio.h> 인자 void main() 함수 함수 } { int i; void sorting(int pts[], int n) int points[5] = { 84, 82, 90, 89, 93}; { for ( int i = 0; i < n; ++i ) { for ( i = 0; i < 5; ++i ) for ( int j = i; j < n; ++j ) { printf(“%d “, points[i]); if( pts[i] > pts[j] ) swap(pts, i, j); printf(“\n”); } sorting(points, 5); } for ( i = 0; i < 5; ++i ) } printf(“%d “, points[i]); } 29 SNU IDB Lab. Control-Oriented Programming: Function-based structure Main() Function-A() Function-X() Function-E() Function-B() Function-C() Function-F() Function-T() 30 SNU IDB Lab. Problems of Control-Oriented Programming Difficult to understand Hundreds and thousands of functions and calls Difficult to debug Difficult to build a large program Difficult to maintain the existing program Solution (mid 80’s) Object-Oriented Programming 31 SNU IDB Lab. Object-Oriented Programming Paradigm(1) Everything is an Object Every object has its Class (Type) Object has data part and function part Class has instance variables and methods Class has data members and function members Computation is communication among Objects There are many similar objects 홍길동 is an instance of “SNU-STUDENT” class Inheritance is useful Ex: Car, 2Door-Car, SUV, MiniVan, Truck….. OO Programming is Defining Classes Defining Inheritance among Classes 32 SNU IDB Lab. Object-Oriented Programming Paradigm(2) In object-oriented programming, program describes what properties a class have, defines what the class will do. C++, Java, and many more contemporary PLs Class myClass ** properties… ** definition of methods… ** use other classes… 33 SNU IDB Lab. OO Programming paradigm (3) Conceptual Understanding of Object-oriented Programming An Instance of Bike Class Bike Class 34 SNU IDB Lab. OOP Example (1) Programming “Organ” Building a class “Organ” Public class Organ {Data Keys, Stops, Other; Public void PlayNote(P x) { … Java Code for PlayNote…}; Public void SetStop(P x) { … Java Code for SetStop…}; etc…. } 35 SNU IDB Lab. OOP Example (2) Public class Lawn-Mower {Data Location, Running, FuelLevel, OilLevel, ThrottleSetting; Public void StartEngine() { … Java Code…}; Public void StopEngine() { … Java Code…}; Public void SetSpeed() { … Java Code…}; Public void GoForward() { … Java Code…}; Public void GoBackward() { … Java Code…}; Public void TurnLeft() { … Java Code…}; Public void TurnRight() { … Java Code…}; etc…. } 36 SNU IDB Lab. 참고자료 Basic Concepts of OOP SNU IDB Lab. 참고slide Object An encapsulated software structure which usually models an application domain entity Object = Data + Operations 2000 deposit code withdraw code Bank Account object SNU OOPSLA Lab. 38 SNU IDB Lab. 참고slide Related Terms Instance variables The variables(data) contained in an object are called instance variables. Method An operations of an object is called method. Message A request to invoke an operation is called message. SNU OOPSLA Lab. 39 SNU IDB Lab. 참고slide Example: File Object open close read write file-1 Object-oriented view file-1 open() : Hey file-1, please open yourself. file-1 read(ch) : Hey file-1, please give me the next char. file-1 close() SNU OOPSLA Lab. : Hey file-1, close yourself. 40 SNU IDB Lab. 참고slide Class An abstract data type which define the representation and behavior of objects. class instantiations instances object SNU OOPSLA Lab. object 41 SNU IDB Lab. 참고slide Example: Rectangle Define a Rectangle Class. x (0,0) Class Rectangle data int x, y, h, w; method create(int x1, y1, h1, w1) { x=x1; y=y1; h=h1; w=w1; } moveTo(int x1, y1) { x=x1; y=y1; self.display(); } display() { drawRectangle(x, y, h, w); } End Class (x,y) y h SNU OOPSLA Lab. w 42 SNU IDB Lab. 참고slide Interface of Rectangle class Rectangle { operations create(int x1, y1, h1, w1); moveTo(int x1, y1); display(); } SNU OOPSLA Lab. 43 SNU IDB Lab. 참고slide Example: Using Rectangle 5 x 5 (5,5) 10 5 r1 r1 (10,15) y (25,10) 5 5 r2 #Import Rectangle Rectangle r1, r2; r1.create(5, 5, 10, 5); r1.display(); r1.moveTo(25,10); SNU OOPSLA Lab. r2.create(10, 15, 5, 5); r2.display(); 44 SNU IDB Lab. 참고slide Inheritance A mechanism which allows a new class to be incrementally defined from an existing class. Problem What is a Zebra ? “A Zebra is like a horse but has stripes” Horse inherit + stripes Zebra Inheritance avoid repetition and confusion! SNU OOPSLA Lab. 45 SNU IDB Lab. 참고slide Example: Inheritance Problem Define a new class called Window, which is a rectangle, but also resizable. Rectangle add “resize” method Window Class Window inherit Rectangle add operation resize(int h1, w1) { h=h1; w=w1; display(); } SNU OOPSLA Lab. 46 SNU IDB Lab. 참고slide Class Hierarchy Rectangle Window ScrolledWindow MenuWindow Inheritance builds class hierarchies which are reusable and opens the possibility of application frameworks for domain reuse. SNU OOPSLA Lab. 47 SNU IDB Lab. Table of Contents Put some Action into Web Pages Object Oriented Programming Java Language Fundamental Java Basic "Hello World" Another Applet: Use of Buttons Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types String and String Manipulation More on Syntax 48 SNU IDB Lab. Java Language Simple and compact Smaller than C/C++ Secured Programming in networked environments However, for Practical Program Use many predefined Classes For effective use: experience Will have to memorize very little of detail Understand and Know how to use The most prevalent, popular and dominant programming language in the world! 49 SNU IDB Lab. Java Basic: Assignment Statement variable = expression; Note only one equal sign (=) Note semicolon (;) Ex) X = 3; X = funcSample(3); X = Y – Z; 50 SNU IDB Lab. Java Basic: Logical Expression Expression with comparison operators <, >, <=, >= ==, != Outcome true or false Ex: if ( x > 3) then if ( x == 2) then y=1 z=2 51 SNU IDB Lab. Java Basic: If-else Statements If Statements if (logical expression) { } "true" actions If - Else Statements if (logical expression) { } else { } "true" actions "false" actions 52 SNU IDB Lab. Java Basic: Using Braces {} (1/3) Statements in {} is considered as one syntactical element. For example: in “if – else” Statements, if (logical expression) { "true" actions } else { "false" actions } 53 SNU IDB Lab. Java Basic: Using Braces {} (2/3) {} delimits visibility of a variable { int a; { int b; b = a; // OK } a = b; // compile error. cannot see “b” here. } 54 SNU IDB Lab. Java Basic: Using Braces {} (3/3) 55 SNU IDB Lab. Java Basic: defining class Public class Organ /* class declaration */ {Data Keys, Stops, Other; /* data declaration */ /* method declaration */ Public void PlayNote(P x); { … Java Code…} Public void SetStop(P x); { … Java Code …} etc…. } -----------------------------suppose we have the above----------------Organ KimOrgan; KimOrgan.playnote(“애국가”); 56 SNU IDB Lab. Java Construct: Method Invocation Method is often called function or procedure Invoking a method is also called "calling a function” Naming a method causes a corresponding function to be carried out. Parentheses are required for arguments 57 SNU IDB Lab. Java Program, Compile, and Run ** Compile: javac helloworldapp.java ( generate helloworldapp.class) ** Program Run: java helloworldapp 58 SNU IDB Lab. "Hello World" Applet Demo (1) We want to see “Hello, World!” in the web browser: HelloWorld.java // Program to write messages to an applet import java.awt.*; public class HelloWorld extends java.applet.Applet { TextField m1,m2; public void init () { m1 = new TextField(60); m2 = new TextField(60); m1.setText(" H e l l o W o r l d !"); m2.setText("This is a simple Java test."); } add(m1); add(m2); } 59 SNU IDB Lab. Java Facts in HelloWorld import java.awt.* 자바에서 제공해주고 있는 GUI 기초를 다루고 있는 패키지이다. GUI 컴포넌트들(Button,Text Box, Text Field, 체크 박스 등)의 library import java.applet.Applet 웹페이지에서 애플릿을 이용하려면 선언해야하는 문장. init(): applet으로 사용되는 Java class에서의 시작 함수 new: 어떤 class에 속한 instance를 처음 생성할때 사용 add(): 화면에 적절히 배치하는 기능 60 SNU IDB Lab. Class TextField in java.awt.* java (root: Object) java.awt java.awt.Component java.awt.TextComponent java.awt.TextField (저자가 임의로 만든 class) A TextField object is a text component for the editing of a single line of text. Methods in TextField class public String getText() Returns the text that is presented by this text object public void setText(String t) Sets the text in the text object with the string value in t 61 SNU IDB Lab. Subclasses and the Java Class Hierarchy Every class in Java has a superclass except the highest class of all, object The Class hierarchy is a very large tree extending down from object. Checkbox Choice TextArea TextComponent TextField List Component Button Canvas Object Container Label Scrollbar ABC PQR XYZ 62 SNU IDB Lab. "Hello World" Applet Demo (2) HelloWorld.htm <HTML> <HEAD> <TITLE> The textfield demo program. </TITLE> </HEAD> <BODY> This tests the textfield capability. <APPLET code="HelloWorld.class" WIDTH=750 HEIGHT=325> </APPLET> </BODY> </HTML> 63 SNU IDB Lab. Another Java Applet: Use of Buttons (1/4) Interactive program Dynamic user interaction User clicks buttons and types numbers and charaters Clicking on buttons can cause things to happen Button Use Demo TrafficLight.java TrafficLight.html Show Green, Red, Yello button on the screen If the user clicks any button, trigger the action method by showing the corresponding message (“stop”, “go”, “ready to stop”) 64 SNU IDB Lab. Another Java Applet: Use of Buttons (2/4) import java.awt.*; import java.awt.event.*; public void actionPerformed(ActionEvent event) { Object cause = event.getSource(); public class TrafficLight extends java.applet.Applet implements ActionListener { TextField m1, m2; Button b1, b2, b3; public void init () { m1 = new TextField(80); m1.setText("What are you going to do when the light is:"); b1 = new Button("GREEN"); b2 = new Button("YELLOW"); b3 = new Button("RED"); m2 = new TextField(80); add(m1) ; add(b1) ; add(b2) ; add(b3) ; add(m2) ; b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); } } } if (cause == b1) { m2.setText("Keep on rolling."); } if (cause == b2) { m2.setText("Step on it! You can make it!"); } if (cause == b3) { m2.setText("I suppose you'll have to stop."); } TrafficLight.java 65 SNU IDB Lab. public class TrafficLight extends java.applet.Applet implements ActionListener { TextField m1, m2; Button b1, b2, b3; public void init () { m1 = new TextField(80); m1.setText("What are you going to do when the light is:"); b1 = new Button("GREEN"); b2 = new Button("YELLOW"); b3 = new Button("RED"); m2 = new TextField(80); add(m1) ; add(b1) ; add(b2) ; add(b3) ; add(m2) ; 66 SNU IDB Lab. Another Java Applet: Use of Buttons (3/4) Java Facts import java.awt.* 와 import java.awt.event.* 의 차이 Java.awt.* 는 awt의 하위 클래스들만 다루게 된다. 즉 하위 클래스의 아래에 있는 클래스를 사용할 수는 없다. Java.awt.*를 선언하면 event를 사용할 수는 있지만 event 하위 클래스를 사용할 수는 없다. 따라서 java.awt.event.*를 선언해야만 event 하위 클래스들을 사용할 수 있게 된다. b1.addActionListener(this) 이 의미는 b1이라는 button 컴포넌트에 어떤 동작을 추가시키는 의미이다. b1버튼에 어떤 동작을 취하겠다라는 것을 선언해 준 것이다. 실제 동작은 다음 함수가 수행한다. Public void actionPerformed(ActionEvent event) { …… } When an action is performed, actionPerformed method is invoked internally. ActionEvent event contains the cause and description of the action We can get the cause of the action from event.getSource() 67 SNU IDB Lab. Another Java Applet: Use of Buttons (4/4) TrafficLight.htm <HTML> <HEAD> <TITLE> A button demo program. </TITLE> </HEAD> <BODY> This tests button action capability. <APPLET code="TrafficLight.class" WIDTH=700 HEIGHT=325> </APPLET> </BODY> </HTML> 68 SNU IDB Lab. Another Interactive Java Program (1/3) “Duplicate Three Times” After receiving a string from a user, show the same message three times in the screen. 69 SNU IDB Lab. Another Interactive Java Program (2/3) “Duplicate Three Times” DupThree.java // Program to illustrate use of setText import java.awt.*; import java.awt.event.*; public class DupThree extends java.applet.Applet implements ActionListener { TextField m1, m2, m3, m4, m5; Button b1; String message; } public void init () { m1 = new TextField(80); m2 = new TextField(80); m3 = new TextField(80); m4 = new TextField(80); m5 = new TextField(80); b1 = new Button("button"); m1.setText("Please enter some text below, then press button"); 70 } add(m1); add(m2); add(b1); add(m3); add(m4); add(m5); b1.addActionListener(this); public void actionPerformed(ActionEvent event) { message = m2.getText(); m3.setText(message); m4.setText(message); m5.setText(message); } SNU IDB Lab. Another Interactive Java Program (3/3) “Duplicate Three Times” DupThree.html <HTML> <HEAD> <TITLE> Applet Response Demo Program.</TITLE> </HEAD> <BODY> This demonstrates the TextField capabilities <APPLET code="DupThree.class" WIDTH=700 HEIGHT=300> </APPLET> </BODY> </HTML> 71 SNU IDB Lab. Table of Contents Put some action into web pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types Strings and String Manipulation More about Syntax 72 SNU IDB Lab. Using Decisions to Solve Problems (1/2) Want to make programs seem “intelligent” A Number Guessing Game: one person selects a number between 1 and 100, and the other person tries to guess AboveBelow.java AboveBelow.html 73 SNU IDB Lab. //import awb.*; import java.awt.*; import java.awt.event.*; public class AboveBelow extends java.applet.Applet implements ActionListener { TextField m1, m2; IntField i1; Button b1, b2; int secret, guess; public void init () { m1 = new TextField(80); m1.setText("Enter number between 0 and 100 + "below, then push SECRET"); i1 = new TextField(40); m2 = new TextField(80); b1 = new Button("SECRET"); b2 = new Button("GUESS"); add(m1); add(b1); add(i1); add(b2); add(m2); b1.addActionListener(this); b2.addActionListener(this); } public void actionPerformed(ActionEvent event) { Object cause = event.getSource(); if (cause == b1) { secret = Integer.parseInt(i1.getText()); i1.setText(""); m1.setText("Now, enter your guess below,”+ " then press GUESS"); } if (cause == b2) { guess = Integer.parseInt(i1.getText()); if (guess == secret) { m2.setText("You've got it!"); } if (guess < secret) { i1.setText(""); m2.setText("The number is greater than "+ guess); } if (guess > secret) { i1.setText(""); m2.setText("The number is less than "+guess); } } } // The end of actionPerformed() } // The end of Class AboveBelow AboveBelow.java 74 SNU IDB Lab. Java Fact AboveBelow program 처음에 사용자가 IntField에서 수를 입력하고 b1을 click하면 IntField의 수를 secret이라는 변수에 저장을 하고 IntField를 지운다. 그리고 사용자가 수를 입력해가면 secret 수와 맞는지 비교하고 맞출 때까지 진행하는 프로그램 Import awb.* 저자 패키지를 사용하기 위해 선언 IntField class (소스는 503 페이지의 appendix에 있음) IntField i1; // i1선언 i1 = new IntField(40) // Secret = i1.getInt() 사용자가 입력한 수를 secret에 저장 i1.setInt(); i1의 내용을 지움 75 SNU IDB Lab. AboveBelow.html <HTML> <HEAD> <TITLE> High/Low Response Demo Program.</TITLE> </HEAD> <BODY> Demonstrate if and logic capability. <APPLET code="AboveBelow.class" WIDTH=650 HEIGHT=300> </APPLET> </BODY> </HTML> 76 SNU IDB Lab. Using Decisions to Solve Problems (2/2) How Many Guesses Should it Take? For For For For For range range range range range 1-100? 1-1000? 1-10,000? 1-100,000? 1-1,000,000? Binary Search Telephone book or dictionary 77 SNU IDB Lab. Table of Contents Put some Action into Web Pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types Strings and String Manipulation More about Syntax 78 SNU IDB Lab. Coding Decision Trees (1/3) Draw a decision tree Vocabulary tree, binary tree node, edge, path, root, leaf Generally useful for many applications Search by Identification Keys Classifying plants, animals, etc. Medical Diagnosis 79 SNU IDB Lab. To Figure 2.3 Figure 2.2: User Interaction in Nobel Prize Home Page 80 SNU IDB Lab. Figure 2.3: Deeper Level User Interaction in Nobel Prize Home Page 81 SNU IDB Lab. Figure 2.4: Medical Advice Decision Tree 82 SNU IDB Lab. Figure 2.5: NIM game 83 SNU IDB Lab. Figure 2.6: Decision tree for 2nd player in the game of NIM 84 SNU IDB Lab. Coding Decision Trees (2/3) Car Diagnosis Problem: Decision Tree Can't get car's engine to run; what is the problem? •yes •is gas gauge on empty? •no •does engine crank? •was car just running and quit now? •yes •get gas •no •call tow truck •yes •check gas •no •check battery CarD.java CarD.html 85 SNU IDB Lab. import java.awt.*; import java.awt.event.*; if (location == 0) { location = 1; mQuery.setText("Is the gas gauge on empty?"); } else if (location == 1) { location = 3; mAnswer.setText("Better find some gas."); } else if (location == 2) { location = 5; mAnswer.setText("Maybe you should check the gas."); } public class CarD extends java.applet.Applet implements ActionListener { TextField mQuery, mAnswer; Button bYes, bNo; int location; public void init() { mQuery = new TextField(70); mQuery.setText("Was your car just now running before“ + " it quit?"); bYes = new Button("Yes"); bNo = new Button("No"); location = 0; mAnswer = new TextField(70); bYes.addActionListener(this); bNo.addActionListener(this); add(mQuery) ; add(bYes) ; add(bNo) ; add(mAnswer) ; } public void actionPerformed(ActionEvent event) { Object cause = event.getSource(); if (cause == bYes) { CarD.java } 86 } } if (cause == bNo) { if (location == 0) { location = 2; mQuery.setText("Does the engine crank?"); } else if (location == 1) { location = 4; mAnswer.setText("Messy. Call a tow truck."); } else if (location == 2) { location = 6; mAnswer.setText("Looks like a dead battery."); } } SNU IDB Lab. Car Diagnosis Problem CarD.html <HTML> <HEAD> <TITLE> Car Diagnosis Problem.</TITLE> </HEAD> <BODY> This demonstrates decision trees. <APPLET code="CarD.class" WIDTH=600 HEIGHT=300> </APPLET> </BODY> </HTML> 87 SNU IDB Lab. Coding Decision Trees (3/3) Picking a Textbook Problem: Decision Tree •yes •(1) a programming focus instead of theory? •(0) do you wish a mathematical approach? •no •(2) narrow focus instead of overview of CS? •yes •(3) Oh! Pascal by D. Cooper •no •(4) Algorithmics by D. Harel •yes •no •(5) Karel the Robot by R. Pattis •(6) Great Ideas in CS by A. Biermann BookPick.java BookPick.html 88 SNU IDB Lab. import java.awt.*; import java.awt.event.*; public class BookPick extends java.applet.Applet implements ActionListener { TextField mQuery, mAnswer; Button bYes, bNo; int myLocation; public void init() { mQuery = new TextField(70); mQuery.setText("Do you wish a mathematical approach?"); bYes = new Button("Yes"); bNo = new Button("No"); myLocation = 0; mAnswer = new TextField(70); bYes.addActionListener(this); bNo.addActionListener(this); add(mQuery); add(bYes); add(bNo); add(mAnswer); } public void actionPerformed(ActionEvent event) { Object cause = event.getSource(); if (myLocation == 0) { if (cause == bYes) { myLocation = 1; mQuery.setText("A programming focus "+ instead of theory?"); } } } if (cause == bNo) { myLocation = 2; mQuery.setText("Narrow focus instead of overview of CS?"); } } else if (myLocation == 1) { if (cause == bYes) { myLocation = 3; mAnswer.setText("I recommend 'Oh! Pascal' by D. Cooper."); } if (cause == bNo) { myLocation = 4; mAnswer.setText("'Algorithmics' by D. Harel is a fine book."); } } else if (myLocation == 2) { if (cause == bYes) { myLocation = 5; mAnswer.setText("Try 'Karel the Robot' by R. Pattis."); } if (cause == bNo) { myLocation = 6; mAnswer.setText("Enjoy A. Biermann's 'Great Ideas in CS'"); } } BookPick.java 89 SNU IDB Lab. “Picking a Book” Problem BookPick.html <HTML> <HEAD> <TITLE> Picking a Textbook Problem.</TITLE> </HEAD> <BODY> This demonstrates decision trees. <APPLET code="BookPick.class" WIDTH=600 HEIGHT=300> </APPLET> </BODY> </HTML> 90 SNU IDB Lab. Table of Contents Put some action into web pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types Strings and String Manipulation More about Syntax 91 SNU IDB Lab. Using Primitive Data Types: Integers (1) Primitive data types does not require a NEW statement to create Primitive data types are not classes Primitive data types must be declared and initialized (Java sets to 0) int noTotal = 0; Other primitive types include: boolean, char, float 92 SNU IDB Lab. Using Primitive Data Types: Integers (2) Example for counting integers Count.java Count.html Example for calculating multiple tallies Tallies.java Tallies.html 93 SNU IDB Lab. // Program to demonstrate integer counting triggered by pushing a button import java.awt.*; import java.awt.event.*; Count.java public class Count extends java.applet.Applet implements ActionListener { TextField mQuery,mAnsStu, mAnsFac, mAnsSta, mTotal; Button bCount; int noTotal = 0; public void init () { mQuery = new TextField(80); mQuery.setText("Keep track of attendance by pushing the button."); bCount = new Button("Register"); mTotal = new TextField(40); } } bCount.addActionListener(this); add(mQuery) ; add(bCount) ; add(mTotal) ; mTotal.setText("The total attendance is " + noTotal); public void actionPerformed(ActionEvent event) { Object cause = event.getSource(); if (cause == bCount) { noTotal = noTotal + 1; mTotal.setText("The total attendance is " + noTotal + " "); } } 94 SNU IDB Lab. Count Problem Count.html <HTML> <HEAD> <TITLE> Applet Response Demo Program.</TITLE> </HEAD> <BODY> <APPLET code="Count.class" WIDTH=700 HEIGHT=200> </APPLET> </BODY> </HTML> 95 SNU IDB Lab. import java.awt.*; import java.awt.event.*; public class Tallies extends java.applet.Applet implements ActionListener { TextField mQuery,mAnsStu, mAnsFac, mAnsSta, mTotal; Button bStudents,bFaculty,bStaff; int noStu=0, noFac=0, noSta=0, noTotal=0; public void init () { mQuery = new TextField(80); mQuery.setText("Keep track of attendance by pushing the buttons."); bStudents = new Button("Students"); bFaculty = new Button("Faculty"); bStaff = new Button("Staff"); mAnsStu = new TextField(12); mAnsFac = new TextField(12); mAnsSta = new TextField(12); mTotal = new TextField(80); bStudents.addActionListener(this); bFaculty.addActionListener(this); bStaff.addActionListener(this); add(mQuery) ; add(bStudents) ; add(bFaculty) ; add(bStaff) ; add(mTotal) ; add(mAnsStu) ; add(mAnsFac) ; add(mAnsSta) ; mTotal.setText("The total attendance is " + noTotal + " Subtotals are shown below."); mAnsStu.setText(noStu + " students"); mAnsFac.setText(noFac + " faculty"); mAnsSta.setText(noSta + " staff"); } 96 public void actionPerformed(ActionEvent event) { Object cause = event.getSource(); if (cause == bStudents) { noStu = noStu + 1; noTotal = noTotal + 1; mTotal.setText("The total attendance is " + noTotal + " Subtotals are shown below."); mAnsStu.setText(noStu + " students"); } if (cause == bFaculty) { noFac = noFac + 1; noTotal = noTotal + 1; mTotal.setText("The total attendance is " + noTotal + " Subtotals are shown below."); mAnsFac.setText(noFac + " faculty"); } if (cause == bStaff) { noSta = noSta + 1; noTotal = noTotal + 1; mTotal.setText("The total attendance is " + noTotal + " Subtotals are shown below."); mAnsSta.setText(noSta + " staff"); } } } Tallies.java SNU IDB Lab. Tally Problem Tallies.html <HTML> <HEAD> <TITLE> Applet Response Demo Program.</TITLE> </HEAD> <BODY> <APPLET code="Tallies.class" WIDTH=700 HEIGHT=200> </APPLET> </BODY> </HTML> 97 SNU IDB Lab. Table of Contents Put some action into web pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types Strings and String Manipulation More about Syntax 98 SNU IDB Lab. String class String Declaration: String Constant String message; String xyz; "Good Morning World!" String Assignment message = "It's Friday"; 99 SNU IDB Lab. Methods in String class (1/2) Most important ones are: length(), indexOf(), substring() Note that character positions start at zero! int word.length() int word.indexOf(String st) Returns the length of the string word as an integer Returns position of start of first match of st in word Returns -1 if there is no match string word.substring(int start, int end) Returns a String that is part of word start is position in word of first char of the substring end is position in word of first char after the substring 100 SNU IDB Lab. Methods in string class (2/2) If word contains "Good Afternoon!" word.length() word.indexOf("tern") word.indexOf("Tern") word.substring(5, 8) yields 15 yields 7 yields -1 yields "Aft" 101 SNU IDB Lab. Example using String Class Getting String Data from the User The TextField class has getText() method Can use: message = mg.getText(); where mg is a TextField and message is a String Example for Some String Manipulation User types in his first name, middle name, and last name. And then push the button show the full name, initial, length of the name StringPlay.java StringPlay.html 102 SNU IDB Lab. import java.awt.*; import java.awt.event.*; public class StringPlay extends java.applet.Applet implements ActionListener { TextField mInstruct, mFirst,mMid, mLast, mFull, mInit, gmFirst, gmMid, gmLast; Button bEnter; String sFirst, sMid, sLast, sInit, sFull; int length; public void init () { mInstruct = new TextField(72); mInstruct.setText("Please enter your full name in the fields below." + " Then click Enter."); mFirst = new TextField(9); mMid = new TextField(9); mLast = new TextField(9); mFirst.setText("First:"); mMid.setText("Middle:"); mLast.setText("Last:"); gmFirst = new TextField(60); gmMid = new TextField(60); gmLast = new TextField(60); mFull = new TextField(72); mInit = new TextField(72); bEnter = new Button("Enter"); bEnter.addActionListener(this); add(mInstruct) ; add(mFirst) ; add(gmFirst) ; add(mMid) ; add(gmMid) ; add(mLast) ; add(gmLast) ; 103 } add(bEnter) ; add(mFull) ; add(mInit) ; public void actionPerformed(ActionEvent event) { Object cause = event.getSource(); if (cause == bEnter) { sFirst = gmFirst.getText(); sMid = gmMid.getText(); sLast = gmLast.getText(); sFull = sFirst + " " + sMid + " " + sLast; mFull.setText("Your full name is: " + sFull); sInit = sFirst.substring(0,1) + sMid.substring(0,1) + sLast.substring(0,1); length = sFirst.length() + sMid.length() + sLast.length(); mInit.setText("Your initials are: " + sInit + ". The number of characters in your name is " + length); } } } StringPlay.java SNU IDB Lab. String-Play Problem StringPlay.html <HTML> <HEAD> <TITLE> String Manipulation Program.</TITLE> </HEAD> <BODY> <APPLET code="StringPlay.class" WIDTH=650 HEIGHT=300> </APPLET> </BODY> </HTML> 104 SNU IDB Lab. String Exchange An Algorithm: The String Exchange Problem at start: x contains "milk" and y contains "juice" how do we interchange contents? Textfield sampletext; need temp string x, y, temp; ... x = sampletext.getText(); y = sampletext.getText(); sampletext.setText(“Now” + x + " and " + y); ... temp = x; x = y; y = temp; ... sampletext.setText(“Now” + x + " and " + y ); ... 105 SNU IDB Lab. Table of Contents Put some action into web pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types Strings and String Manipulation More about Syntax 106 SNU IDB Lab. More about Syntax (1) Compiler 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. need to check the correctness of program syntax need to understand the program Grammar is a set of production rules <name> any string of alphanumeric symbols that begins with a letter <statement> <name> = <expression>; <statement> <name> = new <class>(<arguments>); <statement> <name>.<method>(<arguments>); | <method>(<arguments>); <arguments> possibly empty list of <expression>s separated by commas <expression> <string-expression> | <int-expression> | <oth-expression> <string-expression> <string-expression> + <string-expression> <string-expression> <string> <string> " any sequence of characters " <string> <name> 107 SNU IDB Lab. More about Syntax (2) Apply production rules with substitution multiple times as necessary Statement Example Want to check: person-name = firstname + " " + lastname; EXAMPLE: <statement> <statement> <statement> <statement> <statement> <statement> <statement> <statement> <statement> <statement> <statement> <statement> <name> = <expression>; person-name = <expression>; person-name = <str expression>; person-name = <str expression> + <str expression>; person-name = <string> + <str expression>; person-name = <name> + <str expression>; person-name = firstname + <str expression>; person-name = firstname + <string> + <str expression>; person-name = firstname + " " + <str expression>; person-name = firstname + " " + <string>; person-name = firstname + " " + <name>; person-name = firstname + " " + lastname; 108 SNU IDB Lab. More about Syntax (3) More Syntax <method> setText | getText | getInt | setInt | add | actionPerformed | init <compound-statement> { list of <statement>s } <statement> if (<bool-expression>) <compound-statement> <statement> if (<bool-expression>) <compound-statement> else <compound-statement> See 78 page of the text book! 109 SNU IDB Lab. Table of Contents Put some action into web pages Object Oriented Programming Java Language Fundamental Using Decisions to Solve Problems Coding Decision Trees Using Primitive Data Types Strings and String Manipulation More about Syntax 110 SNU IDB Lab. Summary 참고자료: Control Oriented Programming, Basics of C , OOP Basic Concepts of Object-oriented Paradigm Program skeleton based on decision trees Simple examples of Java code to describe the algorithm class definition and type declaration button-declaring and button-actuating code applet display features if-else branching forms 111 SNU IDB Lab. If you want to learn more about Java and you are energetic… (But I don’t think so) http://java.sun.com/docs/books/tutorial/index.html http://www.javacoffeebreak.com/tutorials/ Of course, Many many 자바 books in 시중서점 112 SNU IDB Lab. Ch2: Here comes Java Textbook Review Time 113 SNU IDB Lab.