! " #$%# #$ %&"'(&)#$) * +, -#$)&.&.&)$ /0(0,&.&0 #$-.1&2&-2.&/"&.&/"0,.&, " ' /03"&),0/ '.&0,1, !! "# $$$ !"#$% &'(&) '*+

Σχετικά έγγραφα
Αντικειµενοστρεφής Προγραµµατισµός

Αντικειμενοστρεφής Προγραμματισμός

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΗ JAVA ΤΕΛΕΣΤΕΣ - ΜΕΤΑΒΛΗΤΕΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

2.1. Εντολές Σχόλια Τύποι Δεδομένων

API: Applications Programming Interface

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Δομές ελέγχου ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Οντοκεντρικός Προγραμματισμός

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διδάσκων: Παναγιώτης Ανδρέου

4. Εισαγωγή στη Java

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Βασικά Στοιχεία της Java

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 29/11/07

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

2. Προσδιοριστές, δεσμευμένες λέξεις και τύποι

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 1/11/07

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Εισαγωγή στον Προγ/μό Η/Υ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Βασικά Στοιχεία της Java

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #6

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Βασικά της γλώσσας JAVA

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 4/3/2008

Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions

ΕΠΛ 012. JavaScripts

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Ευφυείς Τεχνολογίες ----Πράκτορες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

Εισαγωγή στον Προγραµµατισµό - Εβδοµάδα 7

3. Εκφράσεις και έλεγχος ροής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος.

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Εισαγωγή στον Προγραμματισμό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Προγραμματισμός ΙΙ (Java) 1. Εισαγωγή

Εισαγωγή στην πληροφορική

Προγραμματισμός σε Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Αντικειμενοστρεφής Προγραμματισμός

Εξαιρέσεις (στη Java)

Υπολογισμός - Εντολές Ελέγχου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Αντικειμενοστρεφής Προγραμματισμός

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ηλεκτρονικοί Υπολογιστές

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 2: Βασικές εντολές

32-bit signed υποδιαστολής) Double διπλής ακρίβειας 64-bit signed Char unicode character 16-bit Boolean Boolean true or false

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #7

Εξαιρέσεις στη Java. Περιεχόμενα. Κάποιες προκαθορισμένες ρ εξαιρέσεις. Κωστής Σαγώνας

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Σχεδιασµός, Εµφάνιση και Υφος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

02 Αντικειμενοστρεφής Προγραμματισμός

JAVA TUTORIAL ΠΕΡΙΕΧΟΜΕΝΑ. ΚΕΦΑΛΑΙΟ 1. Τί κάνει τη Java να ξεχωρίζει; Εγκαθιστώντας τη Java

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Πανεπιστήµιο Πειραιά Τµήµα Εκπαιδευτικής Τεχνολογίας και Ψηφιακών Συστηµάτων. Εισαγωγή στη γλώσσα προγραµµατισµού. Java. Βασίλειος Βεσκούκης

ιαδικτυακές Εφαρµογές

Εισαγωγή στη γλώσσα Java

Mεταβλητές (variables) και Σταθερές (constants)

Transcript:

!"! " #$%# #$ %&"'(&)#$) * +, -#$)&.&.&)$ /0(0,&.&0 #$-.1&2&-2.&/"&.&/"0,.&, " ' /03"&),0/ '.&0,1,!! "#!"#$% &'(&) '*+ $$$

&'()*+*, -./01234+5 '&4,,-),15 '*61,&4,,.&)$+,,75 **61,&4),,8 +,9:#5,/;,<&4+/;1.&"#0775 =&4/((>,),/((5?@@ABCD&EFG&H&I,I7 7 7 )J*61,)02&KL&"#, %&'()*)+,-./)012 )34564)78#7 %&&()*)+,-./)9:;<) )=$'')5)6$>&)7)$ /66/01/2375 0889:1;<8=>:?@,-./0122%!3,-..0122%!33,-450122%!333,-460122%!33!,-4607$8#,-490:#;,<4=,-4/0:#;2%>8,-4.0:#;33 01)>?@44)2)55)A)>5%45@$6)8#7 2)6)7)B)CDCEFG)6$%>H))CIJKDL;9)MFNC ('H)02O)%4)P,-4-0:#;2?@A#B%! <55,0C?D!@:#; E>B! <55<0$:#;

" MFANGFAB&#$ %&"'(&)#$) * D@OPGFAB&#$)$+&MFANGFAB&.&,*1,, 7$.&,"/ AB?CDB?: QBRPAFS&TA@UBDDVRW&XRVP&4QTX5!Q7R7S?)7?)?)T)UT V)?BY@AZ!! [\] :!"?@G ECF ECF 3HI 3HI )WX)YS)S)Z! S))$$$[ 1:E>?B9F?;G:@@HEIJEH> 1FJ.&,".&)$7$.&,"+.&,/" " '&4,,.&)$+,,75 (.&,*)0,#$,2 ".&)$ O2\ 02!T) B 7$ -KLD])^DKL;NC?)-KLD])/D]DFEK?)-KLD])_LFEKJ.`a?.ab)cDEK?)_NK_<IF9D?)-da)^EeDF^/?)$$$ YVUA@^A@UBDD@A

1FJ K) <;9EfIgIh-- L:<;?M L:<;?M '(".&)$.&,*&QTX '(*).& ( % (0>, CI;K)CDCEFG!"#$%&"''())&(&%!* id9ekmifg)ilefijd +,+-./012, 3"!$$4)567/89 6/:/89 6&(&%!*);4'56111

/E8=>NO=>8=>P:QHG:@ (* YS)S)YS))S)Z Z!Z8)! SZ!)! 7 )0 #)"* X)! S)Z)T)Z R*S*T '&*!(U _VP&`&,0')",))&4_VRFAZ&NVWVP5 _ZPB&`&L&_VPD G@AN&`&.&,,&_ZPBD&7$ #$ %/")" QTX&H&abb?cde&fghicd jk?&h&fhl?m cfannvdn&h&lbime&ofbba^y TAVRPBA&H&lbbN^Ve&Kb^^Y p@qrn&h&rrgkscd&kl`_vp&dpbab@?@nby&h&hls_^d V "K$R W:9HBXH9H>M j ai;kkficd j a;k;h9ec<nldf j ^DFiEKI])/EC<NLDF j,dleefl)/ec<nldf j ^DFiEKI])b;J;LI]).ii;iLIKL! "!#$! %&'( )!$! *+, -!)$!. /0+", --1!2$!

Y2.-1Z-15 QTX&H&abb?cd?BY@AZ J KLM1:/9:NO,66:PQR J PLF%A@#L:1O,55:NH8R<5SN J L$8=!AA!T@$U!0,99:N J ELVMI:0W5X [\] >4?444) J YS1;#@T01SC,/:N J :?Z$A?@0,W[4WPQ#A455\/555<4"" J K?>ZT;#@T0CE31>T$?E?T!;-. J 71N;#@T0]X,5H,55 J :?T!"0Y-5W/^BH8 [;\>DB?: ".&)$02&-6$)$+&MFANGFAB&.&,*1,,7$.&,"/ '(&D@OPGFAB&/+,&DBU@RNFAZ DP@AFWB&4MFANNVDne&Qt`j]?e&tut`j]?5 ((,.&&4 #&S@FN5&D@OPGFAB&7$ +, YFVR&YBY@AZ&#$+, [;\>DB?: AB?CDB?:][;\>DB?: pzdpby&d@opgfab m<dfil;kj)igildc)wn;kmeei)c^?)o;kn5?)ai9)m_?)$$$[ _GiLDC)LEE]i)WIKL;g;FNi?)p;<qNKp;<?)rI9lN<qFDiLEFD?)$$$[ bdgd]e<cdkl)lee]i)w9ec<;]df?)mdrnjjdf?)$$$[ $$$ k^^svufpv@r&d@opgfab mkk;9d)wdci;]?)eefm)<fe9diief?)i<fdimi:ddl?)$$$[,dleefl)i<<];9il;eki)wrfeeidf?)9:il?)$$$[ +KLDFLI;KCDKL)WCEg;Di?)CNi;9i?)JICDi?)$$$[ $$$ k^^svufpv@r&p@opgfab pzdpby&p@opgfab cfangfab vbpg@an

^:X_?;D@:? ^:X_;B?C [;\>DB?: "`@;\>DB?: w,&d@opgfab&/"" *7,I &4U@Y^qPBA&^A@WAFY5 Z!1#!T) Us BXt!7S!7S027 T)2 ;?"2>A!@2@?_@#"8 public double sqrt(double a) { double x = 1.0; for (int i = 0; i < 20; i++) { x = 0.5 * (x + a / x); return x; 2@?_@#""!@8 "#;`$Z!;?T!8 00111010 10101001 01001010 10101010 01001001.&," &4!5! ((*1,,J7/*!.&I *1,,J77$(( ")(= ( /*I

S* S*!uB 1# 2 j 01YT) j 01Y 7v)YS "S j!ub X (( T) ) 01 7v) 01 "S!T)Q7 = = "S X S* import import jlab.jlabio; jlab.jlabio; public public class class Stat Stat { public public static static void void main(final main(final String[] String[] args) args) { int int n = JLabIO.readInt("Enter the the number number of of data data : "); "); if if (n (n > 0) 0) { double double sum sum = 0.0; 0.0; for for (int (int i = 0; 0; i < n; n; i++) i++) { sum sum += += JLabIO.readDouble("data #" #" + i + " = "); "); System.out.println("-------------------"); System.out.println("mean = " + sum sum / n); n); System.out.println("-------------------"); Enter Enter the the number number of of data data : 5 data data #0 #0 = 2 data data #1 #1 = 3 data data #2 #2 = 4.6 4.6 0011011100 data data #3 #3 = 8 0011011100 0111100111 data data #4 #4 = 4 0111100111 0011110001 ------------------- 0011110001 1111000111 mean mean = 4.32 1111000111 4.32 0011111111 ------------------- 0011111111 BNVP&H&*7,I "8 U@Y^VSB&H&I 7$*7,+>, ) #$ BxBUqPB&H&)$, ) #$7$/" NB_qW&H&7$%""*I +&[RPBWAFPBN&^A@WAFYYVRW BRyVA@RYBRP&D@OPGFAB&>, #$#+, w,-;z ((('") ').& ( {BNVP`U@Y^VSB`BxBUqPB`NB_qW

a6bx

!"" #$" %" &'" ($'& )*" )*+!"" )*!"## // // 2110101 : Computer Programming // // First First Java Java Program public class class Hello1 { // // main main method begins Java Java application execution public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); // // end end of of class class Hello1! "#$"" %&'()*+,","+-.(,# $,#"+*+/ )# // // 2110101 : Computer Programming // // First First Java Java Program public class class Hello1 { // // main main method begins Java Java application execution public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); // // end end of of class class Hello1 + 01233*#01233$)#451167 / 01233451167./89:/" public class Hello1

$!"##%&'()* +&'()*,-./0 // // 2110101 : Computer Programming // // First First Java Java Program public class class Hello1 { // // main main method begins Java Java application execution public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); // // end end of of class class Hello1 ;5<=6>"+, / ;5<=6>./89:/"";5<=6> // // 2110101 : Computer Programming // // First First Java Java Program public class class Hello1 { // // main main method begins Java Java application execution public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); // // end end of of class class Hello1 /,"-"#?,@A35;B0616CD System.out.print-./8,E.% println,)print*+," 11./0 0 %"23%&'()* // // 2110101 : Computer Programming // // First First Java Java Program // // 2110101 : Computer Programming // // First First Java Java Program public class class Hello1 { public class class Hello1 { // // main main method begins Java Java application execution public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); // // end end of of class class Hello1 JLab>javac Hello1.java JLab>java Hello1 Hello 2110101 JLab> // // main main method begins Java Java application execution public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); // // end end of of class class Hello1 F2G212HC0=5IE $;2BC;5<=6>01233 ""+,E &#,#;2BC;5<=6>01233"+

$)%%&3' // // 2110101 : Computer Programming // // First First Java Java Program public class class Hello1 { // // main main method begins Java Java application execution public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); // // end end of of class class Hello1 J6;;5C<&#KKA"&L)#D!06;;5C<)#- "06;;5C<,&+8",)& 456067 public public class class Hello1{public Hello1{public static static void void main(final main(final String[] String[] args){system.out.print("hello "); "); System.out.println ("2110101"); ("2110101"); -+,)" "M public public class class Hello1 Hello1 { public public static static void void main(final main(final String[] String[] args) args) { System.out.print("Hello "); "); System.out.println("2110101"); $"&',,*,"'* -!" +&, ($&' ",,"*,",-!".89:; 5,.4</5606=>4 ********************************************************* * p u b l i c c l a s s H e l l o 1 { * * * * PUBLIC PUBLIC STATIC STATIC VOID VOID main(final main(final String[] String[] args) args) { * * * * System.out.print("Hello "); "); * * * * System.out.println("2110101"); * * * * * * * * * *********************************************************!"## $%&' #(&) * +!&, -$. $+ #(&) * +!&, -$/, 0 // // 2110101 : Computer Programming public class class Hello1 { public static void void main(final String[] args) args) { System.out.print("Hello "); "); System.out.print("2110101"); System.out.print('A');

5,.4</.0:1./0 0910160 // // 2110101 : Computer Programming public Class Class Hello1 { public static void void main(fina1 String[] args) args) { System.out.print("Hello); System.out.print("2110101"); Systen.out.print('A'); ClassNclass AN0"/8D fina1nfinal AN"//8$/7D "Hello); N"Hello"); A"O?,D SystenNSystemAN;D --N--P %)#"/.("+-E-/ +$. )*"/")*+* + )*#$", public public class class PrintStars PrintStars { public public static static void void main(final main(final String[] String[] args) args) { System.out.println("*******"); System.out.println("* *"); *"); System.out.println("* *"); *"); System.out.println("* *"); *"); System.out.println("*******"); JLab>javac PrintStars.java JLab>java PrintStars ******* * * * * * * ******* JLab>.0 60./0? import javax.swing.joptionpane;! public class class HelloDialog { public static void void main(final String[] args) args) { JOptionPane.showMessageDialog(null, Hello"); System.exit(0); g.setcolor(color.red); g.filloval(x, g.filloval(x, y, y, w, w, h); h);! " # $/"01233QEjavax.swing.JOptionPane g.setcolor(color.red); g.drawoval(x, g.drawoval(x, y, y, w, w, h); h); #,"import +$JOptionPane " &System.exit(0) %)#R,

9@ 60? public public void void paint(graphics paint(graphics g) g) { g.setcolor(color.red); g.filloval(20, g.filloval(20, 20, 20, 100, 100, 100); 100); g.setcolor(color.blue); g.filloval(40, g.filloval(40, 40, 40, 60, 60, 60); 60); public public void void paint(graphics paint(graphics g) g) { g.setcolor(color.blue); g.filloval(40, g.filloval(40, 40, 40, 60, 60, 60); 60); g.setcolor(color.red); g.filloval(20, g.filloval(20, 20, 20, 100, 100, 100); 100); import import java.awt.*; java.awt.*; import import java.awt.event.*; import import java.applet.*; java.applet.*; public public class class Monster Monster extends extends Applet Applet { // // main main method method public public static static void void main(string[] main(string[] args) args) { Frame Frame frame frame = new new Frame("JLab"); Frame("JLab"); frame.addwindowlistener(new WindowAdapter() WindowAdapter() { public public void void windowclosing(windowevent e) e) { System.exit(0); System.exit(0); ); ); frame.add(new frame.add(new Monster(), Monster(), BorderLayout.CENTER); frame.setsize(210, 210); 210); frame.setvisible(true); 60?A6B :1C=0 public public void void paint(graphics paint(graphics g) g) { g.setcolor(color.red); g.filloval(0, g.filloval(0, 0, 0, 200, 200, 100); 100); g.setcolor(color.yellow); g.filloval(20, g.filloval(20, 20, 20, 160, 160, 160); 160); g.setcolor(color.green); g.filloval(40, g.filloval(40, 40, 40, 120, 120, 120); 120); g.setcolor(color.blue); g.filloval(60, g.filloval(60, 60, 60, 80, 80, 80); 80); g.setcolor(color.white); g.filloval(80, g.filloval(80, 80, 80, 40, 40, 40); 40); // // end end of of Monster Monster class class public class class Add1to10 { public static void void main(string [] [] args) args) { System.out.println(55); public class class Add1to10 { public static void void main(string [] [] args) args) { System.out.println(1+2+3+4+5+6+7+8+9+10); public class class Add1to10 { public static void void main(string [] [] args) args) { double x = 1+2+3+4+5+6+7+8+9+10; System.out.println(x);

6D14/0.4/9 import jlab.jlabio; public class class Mean Mean { public static void void main(string [] [] args) args) { double x = 0.0; 0.0; x += += JLabIO.readDouble("data #1 #1 : "); "); x += += JLabIO.readDouble("data #2 #2 : "); "); x += += JLabIO.readDouble("data #3 #3 : "); "); x += += JLabIO.readDouble("data #4 #4 : "); "); System.out.println("mean = " + x / 4.0 4.0 ); ); JLab>javac Mean.java JLab>java Mean data #1 : 10 data #2 : 12 data #3 : 14 data #4 : 14 mean = 12.5 JLab> 0123*4*%" +'5 67892:0*4* %$%"&'/" # ($ 0;06<30*4*#$" # ($%$.+' &'*=>30?@A301*9@7?@A882>? 0>B2@7>80>3*C7D3EA@0*/" ($(&" F"GHI J+# J#)* K0123L67892:0L0;06<30L10M<?N #)* "%! &'*OPAM*/"GHI &",F" EF"G EF"G.0HI

EF"G.0HI EF"G4 EF"G1 EF"G 4/:;

EF"G./05 0 EF"G = EF"G.0HJ EF"G.0HJ

EF"G4 E!"G1 EF"G./0 0.- *OABA* +'*6:ACC )*"*OABA*A99:26A327>* $%$*8A2> %" &',",Q +)*#$,Q*'R+'+'*C08267:7>*S )*")*%)*#$)*+", )* /" 0123L67892:0L0;06<30L10M<?

%!"#$#!"#$% & % '( &% %)* #+##,##-##.##/!! &'(( )*+( 0 (1!"# $%&'! "#!!!() *+, - $!./ 0! % '( %!&0!#%! 1( - 102&-$%3"#!0 0 2*2! 0 "# & 34!434! 0 04#5(!6#788/9 public class Hello1 { "%& Public static void main(string [] [] a) a) { system.out.println('hello 2110101') "#$ & ' ' ( )!

,-,-. :;<=>?@A#B#CC!#DE##5!#@>F =GHI;F#HJF#;IA;F#A=HKLGF#MMM9 >N;?OK>?A#B#P%)* &' CC!#D8#P 5!#+F#,F#-F#.F#/F#+QF#MMM9 IHR?O?<#B#"#(!4ST $ S S04%U!V!#5!#AW?KF#L>AF A>?KF#LI>X;F##Y;KZH[;\>X;F#Y;K]>LOI;F Y;K^>?@_XAKOXL;F#MMM9 *+, -, % 'VC!`! 4&0. % / byte, short, int, long. 0 / float1 double."&0 / char. 00& / boolean $((- 5! % '#LIOAA $(( 6(1-$((.2 String1 Text1 Rectangle1 333 $((- 5! /0,.##1234567689 '**S!VC! "# ' byte)7( +,8short)9( +,8int):( +,8 long)4( +,8float):( +,8double )4( +,8 char)9( +, '**% '3 % 'P 42 50 %66 int 72&66 long8 L>[NHI;?# *6($% & 04 3(!*4% '( S( "#!!a#50 4!9 7;9<8=>94?8;87;8@>=<?9 (!4#(bC!* ("#!!S byte )A794"B79=, short )A<9>=4"B<9=>=, int )A97:=:4<>:4"B97:=:4<>:=, long )A9 "B9 A7,!V!!(S$% & 04 $40%S#int

.##.286:;4<=>689 "#!!4!04 2 -+93+1 :3-;-<=1 +3+1 >-+3?1 @+3:::: a*"#!! &**#JI>OKHXY#N>HXK -+++++++ &%6 +3-A-+ 1 +3+++++-9 &%6 +3-9A-+ (!4#(bC!*'4("#!!a* float(*>a? $ %C50 ), double (*7DA7= $ %C50 ), $40%S#double )?.##1.##.#@.A #float#a*(s! #int#c #int#a*(04c#%u!0%04s! #float#a*04*!c!#5 'a*"#!! (4!04"#49 int(397:=:4<>:=5! float(397:=:4<>:=5! "!55!(E9F7:=:4<>DG7; &0!#%- 6%H%5!- 55$%I+5$+(0J5 2BC:8:B5689,*2String9 (&**#char#v( '!b ( '#5LGO?OLK;?9#V ')&' K, LML8LNL8LOL8LPL8LQL8LRL8LL8LL %;A?)&' K, L7L8L9L8LSL8LTL 1/%'*+-')&' K, LUL8LVL8LWL8LXL 13(3CC*+ '\n' B (05 '\t' YMN #String V"#4*(#char#"#!!!(bC!0% "engineering" "webboy@universe.org" " " "Hello How are you?" "" "1004"#0 V!*#788D ""##& #''#0

2>DD;6:49 #boolean 04& V#true#&'#false!C! 7#0 04&!#true###8#0 04&!#false 2E:83:>;69 &% %U!a*( ($% & &% V&'% '("#* % '&%!'!"#S public class class Zombie { public static void void main(final String[] args args ) { int int counter = 0; 0; double radius = 5.225; boolean success = false; String name name = "somchai";...... & &% %U!a*(!"#(a*S!&% S#0 "#S( a*s!&% T!"#(S a*s &% #%U! &!( 4#5 '**0 a*"#!(409 de int numcircles = 27, k; int numcircles System.out.println( numcircles ); System.out.println( numcircles ); k = 35; fg numcircles = k; int numcircles ee int k fg int k int int counter = 0; 0; double radius = 5.225; boolean success = false; char char korkai = ''; ''; String name name = "somchai"; 50BCD 2EF"50 0FD C(F&%6#"50 50&G600C" H" 0E7#0F&%7 int int i = 100, 100, j = 200; 200; double x0, x0, y0, y0, z0; z0; double x1, x1, y1 y1 = 4.5, 4.5, z1 z1 = 7.8; 7.8;

*@&?-FG 77 5K CH600C" H ) int int counter #0FC(F 50BC int int counter = 0.75; 0.75; double radius = "15.25"; boolean success = 1; 1; H50BCDC(F70D"& integer counter; double radius = "15.25"; string title title = WWW"; "I2EF"50 &J int int boolean; double public = 12.7; 12.7; String 12X 12X = WWW"; H"I!- V% '*41 #(##h# V#i#a04 V(bC!!4( Vc#040 %U!0 1 ST 0 V!a 0 2"C#*"#!(1 0 2"C#*VV!c#($% & #42 2EF LMM 8 "HND& int17 int17 buttercup Public int2string day_of_week "H 7zean 7zean I.love.you public ohoh! ohoh! ed-edd-n-eddy,#j#(. K#?*#*J#"I!- abstract assert boolean break byte case catch char class const continue default do double else extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while!31 E $ &% #B#(bC!!41 a LIOAA#B#(bC!!41 ST S#i#&'#h V 6V% '*4"#"##(!&**#j`j numstudents dayofweek imagebuffer tvchannel customerid initialvelocity

!"#$#.##1!"#$#.##. *#*## #&'1V 5#+##,##-##.##/#9 int i int j int k int i=1, j=2, k; - 9 O *#*## #&'1V 5#+##,##-##.##/#9 double x=1.0, y=2.0; double x double y -3+ 93+! k = i + j; i = k * j; j = i / 2; k = i % 2; - 9 : * 9 : * : : * : + "#$ %!&'()"! x = y + 5.0; y = x / 2.0; x = y % 3.0; y = (x * 3.0) + 2.0; P3+ 93+ P3+ :3< +3< P3+ +3< :3< "#$ %!&'()" i = (j + k) * 3; = : + x = -0.5 - y; > ;3+ :3< J%@2LMM374=6459 #.#2NOP86MM3D49 S V#Q &% #Q#!!#k!" #$ %"&'() x = (-b (-b + Math.sqrt(b*b - 4*a*c)) / (2.0*a); double x -, + *+, double a double b double c #&% #lm!#5 V#[;KG>@9# V!( #&% #lm!#!! 4%)* #&' Va*%n4%n4# 6"#! 04 ((9.0 ((9.0 * c) c) / 5.0) 5.0) + 32.0 32.0 + (((9.0) * (c)) (c)) / (5.0)) + (32.0) 9.0*c/5.0+32.0 + (-b (-b + Math.sqrt(b*b - 4.0*a*c)) / (2.0*a).$)/(012!')!34$'567'!!(01)834$' %)1 )1

*@ *@ i = j; j; i = i + j; j; %!&'()"j/59!5()"i %!&'()"ij1) 7):) #$/7/59!5()"i + x = -x; -x; f = ((9.0 ((9.0 * c) c) / 5.0) 5.0) + 32.0; 32.0; int i=1, j=2; int i int j - 9 c = 5 * (f (f - 32.0) 32.0) / 9.0; 9.0; i = i + j; : 9 + d = Math.sqrt(dx*dx + dy*dy); j = j + j + j; : * + H.+G #+ 1 %#GG #+ "#S!a*"#! S! %)* #"#"#4*4!C!Z[Y\]^ _`Mab@ cde @ f "#20%(#5*0 ]g[amy]a5 h09 x = ((9.0 ((9.0 * c) c) / 5.0) 5.0) + 32.0 32.0 * / +

%#GG #+ *@FGQ x = (-b (-b + Math.sqrt(b*b - 4.0*a*c)) / (2.0*a) - + * * - Math.sqrt() * * int int i, i, k = 9; 9; double x = 1.0; 1.0; k = i; i; // // i is is uninitialized i = x; x; // // assign double to to int int i = 3k; 3k; // // no no operator 3.0 3.0 * x + 5.78; 5.78; // // not not a complete statement i = 3--k; 3--k; // // should be be i = 3 - (-k) (-k) i = (k (k + 5; 5; // // incomplete parentheses / %#@*G?*#R#& F# G, o;wph?;[;xk J$(C E5$%!$%E qxoi<aha (CGEH0$i--+ G530( π $15C E0 5!0&- r;ahyx H _[NI;[;XKOKH>X J$ 0F&0C 0"6 4LQLR8 &%6#"50 A <P39=* S A 6&0C import import jlab.jlabio; jlab.jlabio; public public class class Radian2Degree Radian2Degree { public public static static void void main(string[] main(string[] args) args) { double double x, x, d; d; x = JLabIO.readDouble("input radian radian : "); "); d = 57.296 57.296 * x; x; System.out.println(d); JLab>java Radian2Degree input radian : 3 171.888 JLab>

%#@*G?*#R#& π j 3!! j Math.PI = :3-;-<=9*<:<?=P=:9:?;* import import jlab.jlabio; jlab.jlabio; public public class class Radian2Degree Radian2Degree { public public static static void void main(string[] main(string[] args) args) { double double x, x, d; d; x = JLabIO.readDouble("input radian radian : "); "); d = 180.0 180.0 * x / Math.PI; Math.PI; System.out.println( x + " radians radians = " + d + " degrees"); degrees"); JLab>java Radian2Degree input radian : 3 3.0 radians = 171.88733853924697 degrees JLab> %S.@ST ## o;wph?;[;xk J$ 3! 3!0< $(( qxoi<aha (33!0)k]\Zl,< $i--+ $1533 00&- + + r;ahyx H _[NI;[;XKOKH>X J$ F# G, %,, 0F&0C 0"6 + + 6&0C import import jlab.jlabio; jlab.jlabio; public public class class ParallelResistance { public public static static void void main(string[] main(string[] args) args) { double double r1, r1, r2, r2, r3, r3, r; r; r1 r1 = JLabIO.readDouble("r1 (Kohms) (Kohms) = "); "); r2 r2 = JLabIO.readDouble("r2 (Kohms) (Kohms) = "); "); r3 r3 = JLabIO.readDouble("r3 (Kohms) (Kohms) = "); "); r = 1.0 1.0 / (1.0/r1 (1.0/r1 + 1.0/r2 1.0/r2 + 1.0/r3); 1.0/r3); System.out.println("R (parallel) (parallel) = " + r + " Kohms"); Kohms"); JLab>java ParallelResistance r1 (Kohms) = 22 r2 (Kohms) = 33 r3 (Kohms) = 100 R (parallel) = 11.660777385159012 Kohms JLab> o;wph?;[;xk J$ 1 qxoi<aha (MN$%mH0$i--+ 3*11# ± = $150 10 5!0&- r;ahyx H _[NI;[;XKOKH>X J$ + + =

F# G, 0F&0C import import jlab.jlabio; jlab.jlabio; 0"6 L T + = public public class class QRoot QRoot { public public static static void void main(string[] main(string[] args) args) { double double a, a, b, b, c, c, x1, x1, x2; x2; a = JLabIO.readDouble("a = "); "); b = JLabIO.readDouble("b = "); "); c = JLabIO.readDouble("c = "); "); ± = = A-1 A9 6&0C double double t = Math.sqrt(b Math.sqrt(b * b - 4.0 4.0 * a * c); c); x1 x1 = (-b (-b + t) t) / (2.0 (2.0 * a); a); x2 x2 = (-b (-b - t) t) / 2.0 2.0 / a; a; JLab>java QRoot System.out.println("x1 = " + x1); x1); a = 1 System.out.println("x2 = " + x2); x2); b = 4 c = 3 x1 = -1.0 x2 = -3.0 JLab>

'$%!"# $%&!"#$%&'()* %()$%+)),!"+)) ( ) "%&' ($!) '*+! import import jlab.jlabio; jlab.jlabio; x = x - 5.0; 5.0; x = 3.0 3.0 * x; x; x = x % (y (y + z * a); a); x = x / (2.0 (2.0 * x); x); x -= -= 5.0; 5.0; x *= *= 3.0; 3.0; x %= %= (y (y + z * a); a); x /= /= (2.0 (2.0 * x); x); public public class class Mean Mean { public public static static void void main(string main(string [] [] args) args) { double double x = 0.0; 0.0; x += += JLabIO.readDouble("data #1 #1 : "); "); x += += JLabIO.readDouble("data #2 #2 : "); "); x += += JLabIO.readDouble("data #3 #3 : "); "); x += += JLabIO.readDouble("data #4 #4 : "); "); x += += JLabIO.readDouble("data #5 #5 : "); "); System.out.println("mean = " + (x (x / 5.0) 5.0) ); ); JLab>java Mean data #1 : 12 data #2 : 35.5 data #3 : 16.8 data #4 : 19.0 data #5 : 2.2 mean = 17.1 JLab>

,-",./*0 $(")* (-! a++ a a ++a a int i=1, j=2, k; int i int j int k,-",./*0 #$(")* (-! a-- a a --a a int i=10, j=4, k; int i! int j int k i++; ++j; j = i++; k = ++j + i++; i--; --j; j = --i; k = --j - --i; " " # #! k = j++ + ++i; k = j-- - --i;!*... $!*. 1,- double x=10.0, y=20.0, z; z; z = x++ x++ + ++y; ++y; z = x-- x-- - --y; --y; $%&'()*+,-. z = x++-++y; &.$(/0112 3045&6#&#&3 789!, 7:;$< =)->&%() #&?9&)$?< =)!#>& #&? =)->& #&?@ 1 z = x--+--y; z = x+++++y; z = x-----y; $%&'()*+ int int base10 = 2545; 2545; int int base8 base8 = 04761; int int base16 = 0x9F1; long long base10 = 2545L; long long base8 base8 = 04761L; long long base16 = 0x9F1L; (x++)++; /0,-.,

$!*. 1,,. A302B&6#&#&A 7C D0EF3G6#&#&D 7H 7.$(,.#& %():) '!$( ( '#&I?+.#&$)!"#######$#% 123E7 567/8! 9 12.3E8 567/:8! 9 0.0123E11 567/:8! 9 ; ::: &#$###'()% -567E-6 567/<#8! 9-5.67E-4 567/<:#8! 9-0.567E-3 567/<!:#8! 9 ; ::: 2*344, 3=>03?@04-!"# $.$%& J & ( )%&' ")*. ( ")* $) *+, -./-.00/1, 234567 0/88, 0.8 9/0/1,.8, 0 0*-:0.-- 0;< => ;, *0?=>-- 0@, $$$ int int dx, dx, dy, dy, halfdist; halfdist;...... halfdist halfdist = 0.5 0.5 * Math.sqrt(dx*dx Math.sqrt(dx*dx + dy*dy); dy*dy); = + 234567589:;< :&$K# "!!.$K$) public public class class TypeChecking TypeChecking { public public static static void void main(string[] main(string[] args) args) { double double x = 1.0; 1.0; short short k = 100000; 100000; float float f = 1.2; 1.2; JLab>javac TypeChecking!"#$%&'()(*+*,-../01,-..22134536 6764 879#$:7; <=:>!<?@A$*.2!"#$%&'()(*2*,-../01,-..22134536 6764 879B<@C?7D?<(:>!<?@A$*.2 JLab> $%&'()AB(%C*++%+!"# $.$%& /2LB0MGN2B0N>:-$7 ":$:),.&)&))( & :&( ) public public class class TypeCasting TypeCasting { public public static static void void main(string[] main(string[] args) args) { int int j = 3; 3; System.out.println("int : " + (1 (1 / j)); j)); System.out.println("float : " + (1.0F (1.0F / (float) (float) j)); j)); System.out.println("double : " + (1.0 (1.0 / (double) (double) j )); )); JLab>java TypeCasting int : 0 int j float : 0.33333334 1.0 / (double) j 3 double : 0.3333333333333333 JLab> 1.0 3.0 D 0.3333333333333333

$%&,=&>'!?!"# $%& ( )+)) O)+)),P"Q'#J ( ).O) "( $%&'.#&!$ %&'-';!!R ///F///G public public class class LossFromTypeCasting { public public static static void void main(string[] main(string[] args) args) { int int i = (int) (int) 12.999; 12.999; int int k = 196620; 196620; // // 0x3000B ///G 0x3000B ///G short short tiny tiny = (short) (short) k; k; System.out.println("i = " + i); i); System.out.println("tiny = " + tiny); tiny); JLab>java LossFromTypeCasting i = 12 tiny = 11 $(==<E#$%=#A#:#)!<$)=;#<$ JLab> @ABBCD:;<EB:F:G:H56C;H5BI:C; byte?char short?byteechar char?byteeshort int?bytefshortfechar long?bytefshortfcharfeint float?bytefshortfcharfintfelong double?bytefshortfcharfintflongfefloat "..).!"# $.$%&!*. /2LB0MGN2B0N"Q'+$)STUVW!$9<!"E42NXST public public class class PrecedenceOfCasting { public public static static void void main(string[] main(string[] args) args) { double double x = 1.9, 1.9, y = 10.9; 10.9; System.out.println("(int) x * y = " + ((int) ((int) x * y)); y)); System.out.println("(int) y * x = " + ((int) ((int) y * x)); x)); System.out.println("(int) (x (x * y) y) = " + ((int) ((int) (x (x * y))); y))); System.out.println("(int) (y (y * x) x) = " + ((int) ((int) (y (y * x))); x))); JLab>java PrecedenceOfCasting (int) x * y = 10.9 (int) y * x = 19.0 (int) (y * x) = 20 (int) (x * y) = 20 JLab> 7 :&$! ( $%&'.#&&$ STUV 7W:))) %&'$ ") G H-=-I3E7?double@1 3?double G,-..>H-=-I3E7?float@1 3?float G,-..>H-=-I3E7?long@1 3?long G,-..> 3=-I3/>JI.?int public public class class AutoConversion AutoConversion { public public static static void void main(string[] main(string[] args) args) { int int i = 7, 7, j = 8; 8; double double x = 0.5F 0.5F * i + j; j; System.out.println("x = " + x); x); JLab>java AutoConversion x = 11.5 JLab> E#B$#$%=#A#:#)!<$)=;#<$

J:K5;:;<EB:F:G:H56C;H5BI:C; L byte?shortfintflongffloatfedouble short?intflongffloatfedouble char?intflongffloatfedouble int?longffloatfedouble long?floatedouble float?double HI7I 7J345I87- K K intillongfloat K K longdouble public public class class Widening Widening { public public static static void void main(string[] main(string[] args) args) { int int big big = 1234567890; 1234567890; float float approx approx = big; big; System.out.println("big = " + big); big); System.out.println("approx = " + approx); approx); JLab>java Widening big = 1234567890 approx = 1.23456794E9 JLab> double x = (1/2 (1/2 + 1/2); 1/2); float float y = 1.0/2.0; double z = 4d 4d + 5; 5; double u = 0.0 0.0 + 1/2; 1/2; double v = (0.0 (0.0 + 1)/2; 1)/2; double f = 212.0; double c = (5/9) (5/9) * (f (f - 32); 32); M6HN 6HN O6HN @6HN )6HN!6HN.%.&%.%.&% K)%AB(CL'%(CB-=@0 public public class class Imprecision1 Imprecision1 { public public static static void void main(string[] main(string[] args) args) { double double x = 20.1; 20.1; double double y = x + 16.8; 16.8; JLab>java Imprecision1 System.out.println(y); 36.900000000000006 JLab> 30J0M>N0JO public public class class Imprecision2 Imprecision2 { public public static static void void main(string[] main(string[] args) args) { double double x = 1.0E-200; 1.0E-200; JLab>java Imprecision2 System.out.println(x * x / x); x); 0.0 System.out.println(x * (x (x / x)); x)); 1.0E-200 JLab> public public class class DivByZero DivByZero { public public static static void void main(string[] main(string[] args) args) { int int i = 0; 0; int int j = 5 / i; i; System.out.println(j); JLab>java DivByZero java.lang.arithmeticexception: / by zero at DivByZero.main(DivByZero.java:6) Exception in thread "main" JLab> @04-2@,-.-J.(CK(C(BP >EQIR@1/02EJ-ST3 =M1/05.*8$*'B(%C9

.%.&% public public class class DivByZero DivByZero { public public static static void void main(string[] main(string[] args) args) { double double i = 0.0; 0.0; double double j = 5.0 5.0 / i; i; System.out.println(j); System.out.println(0.0/i); JLab>java DivByZero Infinity NaN JLab> K)%AB(CL'%(CB2@-J.(CK(C(BP 31UAU5U%BAUV&W*+9 >EQIR@1,-.*8$*'B(%C

&'()!"#$%$ char String String!"#$"%& '#()* +,)*()* System.out.print System.out.println!" #$% ()*+ '(,char- -.. char / 01 2 3456764*&78 / &'() *+,-(&./ 0 1., 22 2"2 232 242 252 22 262 &6 789 *+,-(&./ 0 1., 2:2 2;2 2<2 2=2 >(?@ABC( *+,-(&./ 0 1., 2D2 2E2 2F2 2G2 )HIJ'IK)?@ 1., '\n' &6L M,))N+HJ. '\t' & " $'(.)/&'0 9. :; < = >?0 3@2 @: A#B4"C&8 0< DE. 012 > :0 22 *)H 77O: 0 2"2 *)H 77O; 0 232 *)H 77P: 0 242 *)H 77P; 0 252 *)H 7Q39 0 2G2 *)H 7RST 0 22 *)H 7R7: 0 262 *)H 7R7; 0.> <F 3B#*&7#6*B"#6%BG6*B"# @0:: BDH# 8

(1/$23'44char :-.. char @0=0 /2 I F. = &$46(& $&J)&#4& 3 2< K 8 :0 '\n' &6L M,))N+HJ. '\t & " '\\' >(?@ U *"VWX0 '\'' >(?@ ' *YZ[X \]0 '\"' >(?@ " *]"X \]0 52&"$'466 L 009 M +1^)K)J_1B?B&C&)@ * ` $ a bbb0 IMI short char 00 02 00 32 +1^c '))H.'IK)?@ Nd'-A H)c'K)J _1B'6)'c,/ )K)J_1B?B&C&)@'6) dej.en^_ '. BN * 2;2 2Q2 ej.en^ 2S2 0 f^d,ekk)j_1b?b&c&)@g&^'k,kh, d,,&gj.', 6^'& i Jd,,&gJ ; &.ej.j VV 2;2 ()*+ 0/'(,String- '74'8'4String String @0 2< S =N: -.. String 9. O<; :-.. String @0=0 /2 P @0:-.. String. <O:O< @L 00 : @ "" : #)%% $*7B#Q public class StringSample { public static void main(string [] [] args) { String s1 s1 = "This is is a string literal"; String s2 s2 = "This is is an an illegal string literal"; String @R. <@/ S S / :> >><0 /2-.. String S.=< 0T0 U@20V0 String :0-1 S public class class StringConcatenation { public static void void main(string [] [] args) args) { String s1 s1 = "Approx. value value of of PI"; PI"; String s2 s2 = "is"; "is"; System.out.println(s1 + s2); s2); System.out.println(s1 + " " + s2); s2); System.out.println(s1 + " " + s2 s2 + " " + Math.PI); JLab>java StringConcatenation Approx. value of PIis Approx. value of PI is Approx. value of PI is 3.141592653589793 JLab>

()'3.'48 ()'3.'48 "1 "1 + 2 = " + 1 + 2.0; tostring S "1 + 2 = 1" "1" S tostring "2.0" "1 + 2 = 12.0" "1 "1 + 2 = " + (1 (1 + 2.0); 1.0 S S 3.0 tostring "3.0" "1 + 2 = 3.0" String529:2+ ()*"#$%$9$; 43<=>?@A(3String String V0 4%6$$?0=0 @ W&*5"C = @= X@ @= W&*5"C String 1c '&K) Kh, jyz[ &JN^)c 'HJdIN &JN^1c ' &JN^ * 0 -+,g&^'+.'e) 6L M, +1^ String s1 s1 = "Java JA"; String s2 s2 = s1.touppercase(); // // "JAVA JA" JA" char c = s2.charat(2); // // 'V' 'V' %&#Q*538 /0 int Y12-0> 0@T *"A((&7!6$&38 /0 String Y12@:/0> 0@T -:F ZF@20V0=N: *7BW38 / String Y12@:/0> 0@T -:< $(64&$ @2:Y- public class StringAPI { public static void main(string [] [] args) { String s1 s1 = " Moo Moo Mak Mak "; "; System.out.println(s1.length()); System.out.println("\"" + s1.touppercase()+"\""); System.out.println("\"" + s1.trim() + "\""); 10 " MOO MAK " "MOO MAK"

43<=>?@A(3String,2- $)[$*7B#Q3 int b\ int e 8 ) int 'd,, *JJ&B+H^1c 'Kh, " 0 c, String Kh,'6).')B J& M&.& " Kh, d,, " & & H,.k^IN6''6)c'&H,. 7 public class Substring { public static void main(string [] [] args) { String s1 s1 = "Scorpian"; System.out.println(s1.substring(1,5)); JLab>java Substring 0 1 2 3 4 5 6 7 corp S c o r p i a n JLab> B=>?@A23C(3String String @ W&*5"C$ == @<:0 5&%( ]B%& ^6_6 `a' =0 ^b6[ <c dd -=..L : e*7b#q charat compareto concat contentequals copyvalueof endswith equals getbytes getchars hashcode indexof intern lastindexof length matches regionmatches replace replaceall replacefirst split startswith subsequence substring tochararray tolowercase tostring touppercase trim valueof DEFEGHI=JKLJ= 0.3:"M."$ <=-:0 5&%( ]B%& =V0 @. == L O:O<< 0- :0=V0 /2 = =fg=0r. h&j)b7&w&#* N1c 'Nc',dHJ6Nc', en^) `#6%i$B$ )HJ66'Nc',_.,Kl,ABJA@ N1c 'Nc',d'-A 6^'& i Nc', 1c 'INc' "SEPTEMBER" j&$bq# )^'6) 9m:; n :7T & ))di6c 'Nc', )&.',ek Nc', 9 &'() 1 1 1 1 1 1 1 1 1 1 2 2 2 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 J A N U A R Y F E B R U A R Y M A R C H...

N'33$0.3:"M."$!"#$% &"&$"# '() *+,-. ( *+ :"M."$ import jlab.jlabio; public class Month { public static void main(string [] [] args) { String month = ""; ""; month += += "JANUARY FEBRUARY MARCH APRIL "; "; month += += "MAY JUNE JULY AUGUST "; "; month += += "SEPTEMBEROCTOBER NOVEMBER DECEMBER "; "; int int m = JLabIO.readInt("Enter month number : "); "); System.out.println(month.substring(9*(m-1),9*m)); JLab>java Month Enter month number : 2 FEBRUARY JLab> 1 1 1 1 1 1 1 1 1 1 2 2 2 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 J A N U A R Y F E B R U A R Y M A R C H... 0'M3O?A?J=!"#$%$9$; 0'M3O?A?J=KP 1M19&)Q9$DRES ->< = ei$*&wk")*k(7b#*3 8\ ei$*&wk")*k(7b#*%#3 8.-l0 = ei$*&wkb# -:X@=:90 // read a string from standard input BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); String s = ""; try { s = reader.readline(); catch (IOException e) { e.printstacktrace(); :0O: /2 O:V0O ^b6[',k7&6c'#*38 m.l 009 ^b6[',k7&6cj")[%&38 m.l 00 ^b6[',k7&6ce*7b#q38 m.> =09.=>: /O:=>: String 9O< U=>: -><:0.. < import jlab.jlabio; O@2. <- ; n -

0'M3O?A?J=KP 1M19&)Q9$DRES import jlab.jlabio; public class Month { public static void TestJLabIO(String [] [] args) { String name = JLabIO.readString("Name : "); "); int int age age = JLabIO.readInt("Age : "); "); double tax tax = JLabIO.readDouble("Income Tax Tax : "); "); System.out.println(name + ", ", age age = " + age age + ", ", tax tax = " + tax); JLab>java TestJLabIO Name : Somchai Age : 41 /01234 Income Tax : I won't tell you invalid real number, try again 15000.50 Somchai, age = 41, tax = 15000.5 JLab> TEO?@=%$UGVWX V0?0 [67 4"C&.< Do ></F 345&4p CBQB*8 Y12U 2/2= >.U DM Y L 0<= ><V0L <.@2 q = + ))56+6768656(,67)96:6;6<6=69,,>(: )+9*)(:?+9,,?+9>= &O>=OY@(3UGVWX N'33$ h&j)b7&w&#* N VVW Y[Y 6'&6 :; H+,) R3o8:Q `#6%i$B$ )&6 :; HKl,ABJA@ +1^p&))H VVW Y[Y 6' R3o8:Q N VVW Y[Y d'-a j&$bq# 6,_, 'W(%&W&#*6*B"# 6,qK))J!@ A>7B)@ 6@ 6@ 6@ 6@ 6@, A6>)@ 6@ 6@ 6@ 6@ 6@, )+9*)A?+9,,?+9

&O>=OY@(3UGVWX import import jlab.jlabio; jlab.jlabio; public public class class EAN13CheckDigit EAN13CheckDigit { public public static static void void main(string[] main(string[] args) args) { int int s = 0; 0; String String d = JLabIO.readString("Enter 12 12 digits digits : "); "); s += += Character.digit(d.charAt(1), 10); 10); s += += Character.digit(d.charAt(3), 10); 10); s += += Character.digit(d.charAt(5), 10); 10); s += += Character.digit(d.charAt(7), 10); 10); s += += Character.digit(d.charAt(9), 10); 10); s += += Character.digit(d.charAt(11), 10); 10); s *= *= 3; 3; s += += Character.digit(d.charAt(0), 10); 10); s += += Character.digit(d.charAt(2), 10); 10); s += += Character.digit(d.charAt(4), 10); 10); s += += Character.digit(d.charAt(6), 10); 10); s += += Character.digit(d.charAt(8), 10); 10); s += += Character.digit(d.charAt(10), 10); 10); System.out.println("Check Digit Digit is is " + (10-(s%10))%10);

&'()!" "#$!%"!"#$" %&&#"'(")*+"$$&(,"$-". /-'-"0"(-12#&34 $5-36!3'$" 7 8989:: ;< & *+,-.'--/01 2,3 =">?+"0"(-!"#$ %!&!' ( @('#A$$ "')"*!#!+,-*.-/ Math.sqrt"0"#$ %!!"#$ %!#$ %01 #!2- B"$C( 3&$4'!! D0*#"0"(-'-&( 3&$45+"".!" import import jlab.jlabio; jlab.jlabio; public public class class Sqrt Sqrt { public public static static void void main(string main(string [] [] args) args) { double double x = JLabIO.readDouble("x = "); "); System.out.println("sqrt(x) = " + Math.sqrt(x) Math.sqrt(x) ); ); JLab>java JLab>java Sqrt Sqrt x = 1.44 1.44 sqrt(x) sqrt(x) = 1.2 1.2 JLab> JLab>

2,3 <E <FGHI:JKLMKNK7O:::F9 import import jlab.jlabio; jlab.jlabio; public public class class Sqrt Sqrt { public public static static void void main(string main(string [] [] args) args) { double double x = JLabIO.readDouble("x = "); "); System.out.println("sqrt(x) = " + Math.sqrt(x) Math.sqrt(x) ); ); JLab>java JLab>java Sqrt Sqrt x = -8-8 sqrt(x) sqrt(x) = NaN NaN JLab> JLab> #$%&!"'(#())(*+,-!./.0123 "()4'567)+89::9#$; $<= >6?-?,$,@?(*+::(?A*?#$ (*+ & *+,-453'3'36-7 =">?+"0"(-!"#$ %!&!' (6 3+71.8* ) @('#A$$ "')"*!#!+,-*.-/ 68* )0!9:; <= : >? ;@A9 63+7)0"BC0!"#$ %!#$ %01 #!2- B"$C( 3&$4'!! D0*#"0"(-'-&( 3&$45+""..'--/ "%8 %&D 03 Boolean expr. BC3 03 do this BC3 E&D BC3 03!" if if ( Boolean expr ) { do do this ;

01 2,3.'--/ import import jlab.jlabio; jlab.jlabio; public public class class Sqrt Sqrt { public public static static void void main(string main(string [] [] args) args) { double double x = JLabIO.readDouble("x = "); "); if if (x (x < 0) 0) { System.out.println("Re-run with with non-negative non-negative number"); number"); if if (x (x >= >= 0) 0) { System.out.println("sqrt(x) = " + Math.sqrt(x) Math.sqrt(x) ); ); JLab>java JLab>java Sqrt Sqrt x = -8-8 Re-run Re-run with with non-negative non-negative number number JLab> JLab> JLab>java JLab>java Sqrt Sqrt x = 1.21 1.21 sqrt(x) sqrt(x) = 1.1 1.1 JLab> JLab> @?$ F$ G))4?$ 8 G);G) *H I!7',) 8 =?$4 (6" BC3!" %&D 03!""%8 01 2,3 BC3 03 Boolean expr. do this if false do this if true if if ( Boolean expr ) { do do this if if true ; else { do do this if if false ; import import jlab.jlabio; jlab.jlabio; public public class class Sqrt Sqrt { public public static static void void main(string main(string [] [] args) args) { double double x = JLabIO.readDouble("x = "); "); if if (x (x < 0) 0) { System.out.println("Re-run with with non-negative non-negative number"); number"); else else { System.out.println("sqrt(x) = " + Math.sqrt(x) Math.sqrt(x) ); ); JLab>java JLab>java Sqrt Sqrt x = -8-8 Re-run Re-run with with non-negative non-negative number number JLab> JLab> JLab>java JLab>java Sqrt Sqrt x = 1.21 1.21 sqrt(x) sqrt(x) = 1.1 1.1 JLab> JLab>

/9/3:0*/4;%<=>?""7 EFKLP7Q:7 <boolean K NK D8'3+"$4)3#$4)&.))-B (E 3.43#' @=#$ %FBF+"G32#boolean A D8'3B %.F.'.-'H/*-/)$ 3 boolean 78:7Q:String EFKR:I: public public class class TrueFalse TrueFalse { public public static static void void main(string main(string [] [] args) args) { System.out.println( true true + " " + false false ); ); JLab>java JLab>java TrueFalse TrueFalse true true false false JLab> JLab> @%%A>?%?" 7 8989GKM7 <SI:T:EFK;R IJ4K LJ.K IMJ40"B3#')K LMJ.0"B3#')K MMJ3#')K NMJ1.3#')K GKM8:7 8989K7Q:7 <F8: SNK ;<P8 78:7 <GKMR: F89:: EFKLP7Q:7 <boolean ( (n (n % 2) 2) == == 1 ),;?(8 true 5?n 8() false 5? 5? n 8(6 n = 1,*#$ n == == 1 ;%A>?%?" NK S&&;:'(. NK S ;:&+ NK S!;:(&- '(.&+7Q:7U9 SS::9M8: ::EFK7Q:::9M8:NR 0AGB3+7*-/)$ A && B3+7true3.B %#' (!AGB3+7true#' (!F A B3+7true3.B %A0"BB3+7true'0O %!8' (&-7Q:7U9 S78:LG::9M8:8 :FNK 7Q:V SV7Q:,2-BC+2C/ 9GFS:W8REFKI;RXJHXYZ ;FSFS:G8EFK 9 NK0;:GFS:8EFK 9 RI;R[ 8\W0!XZJH\0!XV SSFS: JKLMKNK7O:FS:8YV9 RGKR:8I 1 1 1 1 1 1 1 1 1 1 2 2 2 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 J A N U A R Y F E B R U A R Y M A R C H...

,2-BC+2C/ <E <FGHI:JKLMKNK7O:GFS:8X]] import jlab.jlabio; JLab>java JLab>java Month Month Enter month number : 100 public Enter class month Month number {: 100 java.lang.stringindexoutofboundsexception: public String static void main(string [] [] args) String index { index out out of of range: range: 900 900 String at at month java.lang.string.substring(string.java:1473) = ""; ""; month at += at Month.main(Month.java:10) += "JANUARY FEBRUARY MARCH APRIL "; "; Exception month Exception += in += in "MAY thread thread "main" "main" JUNE JULY AUGUST "; JLab> "; month JLab> += += "SEPTEMBEROCTOBER NOVEMBER DECEMBER "; "; int int m = JLabIO.readInt("Enter month number : "); "); System.out.println(month.substring(9*(m-1),9*m)); 3* StringIndexOutOfBoundsException 9,3-C+/D(? 1/. -#$;#$4 *; 7@;#$ 1 +$+@$ 1/.4 ) J!1KL"5H J1KL? 1/. -#$;#$4 *; 7@;#$ 1 LM1MLND BC3 03 +$+@$ 1/.4 ) J!1KL"5H J1KL,2-BC+2C/ -C+/D(&/E+-(*F/D2)&0F33 import jlab.jlabio; public class class Month Month { public static void void main(string [] [] args) args) { String month month = ""; ""; month month += += "JANUARY FEBRUARY MARCH MARCH APRIL APRIL "; "; month month += += "MAY "MAY JUNE JUNE JULY JULY AUGUST "; "; month month += += "SEPTEMBEROCTOBER NOVEMBER DECEMBER "; "; int int m = JLabIO.readInt("Enter month month number : "); "); if if ((1 ((1 <= <= m) m) && && (m (m <= <= 12)) 12)) { System.out.println(month.substring(9*(m-1),9*m)); P JQIM@KRRJ@IMQSK P JCI@KRRJ@IQTK P JQSLM@KRRJQIM@K P J@MMQKUUJ@MMSKUUJ@MMTKUUJ@MMVKUUJ@MMWKUU J@MMXKUUJ@MMYKUUJ@MMZKUUJ@MM[KUUJ@MQCKUU J@MMQQKUUJ@MMQSK P NJNJQIM@KUUNJ@IMQSKK P NJJ@IQKUUJ@LQSKK LM1MLN (1 (1 <= <= m) m) && && (m (m <= <= 12) 12)

-9- P JQIM@KRRJ@IMQSKFBNJJ@IQKUUJ@LQSK\ (1<=m) (m<=12) (1<=m)&&(m<=12) true true true true false false false true false false false false (m<1) (m>12) (m<1) (m>12)!((m<1) (m>12) false false false true false true true false true false true false true true true false G9H02'3I3' N:V9?('+A^_^^!!` -A*"3'$-(C int int k; k; abc...... 2('+A^_...... dedfef ff`f 11 gg fafbfcf^f_f boolean b =! k==0; k==0; // // wrong wrong if if ( 3<=k+1 && && k<=5 k<=5 k>=9 k>=9 ) { // // k=2,3,4,5, 9,10,11,...,2-9//'/(-2C/JJ 2,3K,6 / =">?+"0"(- 03 B]-]&!+^#$ %0..$SZ0"BS[' @('#A$$ "')3&+^J3+7F]_]K#!+,-*.-/ "# )+^#*`"#*3-B %!$3 B]-] B"$C( 3&$4'!! D0*#"0"(-'-&( 3&$45+"". FS::PG7hAWiiZ8Y\:S 3&+^JF]_]K8!0" 4V!8'88!0" 4QCC1.!8'43"a$#$ %0" 4VCC!8' O PN&&N=)NQ!*;?+R,7 " O PN&&R=)NJ!*;?+R7 7'*;?+L&&,7 " O PNL&&=)NQ!*;?+L&&7 " O PN&&&=)NJ!*;?+R&&7 " 0bFB3&+^JF]_]K O!STR"UU&;$*;?+R7 D O!STL&&"VU&;$*;?+L&&,7 D O!STR&&"UU&;$*;?+R&&7 D if if ( (y%4 == == 4 && && y%100!=!= 0) 0) (y%400 == == 0) 0) )

.'--/,2-9//'/(-2C/JJ BC3 NQ 7@P S!STR&&UU&"*#$!!STRUU&"7'!STL&&VU&"" 03 NJ import jlab.jlabio; public class class Feb Feb { public static void void main(string [] [] args) args) { int int y = JLabIO.readInt("year = "); "); if if ((y%4==0 && && y%100!=0) (y%400==0)) { System.out.println("Feb. has has " + 29 29 + " days."); else else { System.out.println("Feb. has has " + 28 28 + " days."); int int y = JLabIO.readInt("year = "); "); int int numdays; if if ((y%4==0 && && y%100!=0) (y%400==0)) { numdays = 29; 29; else else { numdays = 28; 28; System.out.println("Feb. has has " + numdays + " days."); L"MN L"MN true true true if if ( A ) { if if ( B ) { if if ( C ) { D ; true true true if if ( A ) { if if ( B ) { E ; if if ( C ) { D ;

L"MN.'--/,2-BC+2C/ true true true true if if ( A ) { if if ( B ) { E ; if if ( C ) { D ; else { G ; if if ( H ) { J ; else { F ;? 1/. -#$;#$4 *; 7@;#$ 1 LM1D BC3 03 1MLND BC3 03 LM1MLND +$+@$ 1/.4 ) J!1KL"5H J1KL,2-BC+2C/ $?!?OP import jlab.jlabio; public class class Month Month { public static void void main(string [] [] args) args) { String month month = ""; ""; month month += += "JANUARY FEBRUARY MARCH MARCH APRIL APRIL "; "; month month += += "MAY "MAY JUNE JUNE JULY JULY AUGUST "; "; month month += += "SEPTEMBEROCTOBER NOVEMBER DECEMBER "; "; int int m = JLabIO.readInt("Enter month month number : "); "); if if (1 (1 <= <= m) m) { if if (m (m <= <= 12) 12) { System.out.println(month.substring(9*(m-1),9*m)); VU&D BC3 03 SWXYD BC3 03 if if (x (x!=!= 0 && && y/x y/x > 5) 5) { z = 1; 1; 5?UU&',)(GSW ZUL if if (x (x!=!= 0) 0) { if if (y/x (y/x > 5) 5) { z = 1; 1; if if (y/x (y/x > 5 && && x!=!= 0) 0) { z = 1; 1; (GSW$;$VU& [/ K\] \0]].^!,(;*;=++* 7;" OG)&&'7'3_ @5;,5?=3_ )8BC3 OG) '7'3_ @5;,5?=3_ )8 03

%801;Q (*F/D2)&0F33 %#&34SRG9 F 9FKjk if if (Boolean Expression) if if (Boolean Expression) a statement ; a statement ; else a statement ; if if (Boolean Expression){ if if (Boolean Expression){ statements ; statements ; else { statements ; if (x < 0) { x = -x; if (x < 0) { done = true; else { done = false; if (x < 0) x = -x; if (x < 0) done = true; else done = false; if (x < 0) x = -x; done = (x < 0); cd@ c:dd@,2-bc+2c/,2-bc+2c/ import import jlab.jlabio; jlab.jlabio; import import jlab.jlabio; jlab.jlabio; public public class class Month Month { public public static static void void main(string main(string [] [] args) args) { String String month month = "Illegal "Illegal month month number"; number"; int int m = JLabIO.readInt("Enter month month number number : "); "); if if (m (m == == 1) 1) month month = "JANUARY"; "JANUARY"; if if (m (m == == 2) 2) month month = "FEBRUARY"; "FEBRUARY"; if if (m (m == == 3) 3) month month = "MARCH"; "MARCH"; if if (m (m == == 4) 4) month month = "APRIL"; "APRIL"; if if (m (m == == 5) 5) month month = "MAY"; "MAY"; if if (m (m == == 6) 6) month month = "JUNE"; "JUNE"; if if (m (m == == 7) 7) month month = "JULY"; "JULY"; if if (m (m == == 8) 8) month month = "AUGUST"; "AUGUST"; if if (m (m == == 9) 9) month month = "SEPTEMBER"; "SEPTEMBER"; if if (m (m == == 10) 10) month month = "OCTOBER"; "OCTOBER"; if if (m (m == == 11) 11) month month = "NOVEMBER"; "NOVEMBER"; if if (m (m == == 12) 12) month month = "DECEMBER"; "DECEMBER"; System.out.println(month); public public class class Month Month { public public static static void void main(string main(string [] [] args) args) { String String month month = "Illegal "Illegal month month number"; number"; int int m = JLabIO.readInt("Enter month month number number : "); "); if if (m (m == == 1) 1) month month = "JANUARY"; "JANUARY"; else else if if (m (m == == 2) 2) month month = "FEBRUARY"; "FEBRUARY"; else else if if (m (m == == 3) 3) month month = "MARCH"; "MARCH"; else else if if (m (m == == 4) 4) month month = "APRIL"; "APRIL"; else else if if (m (m == == 5) 5) month month = "MAY"; "MAY"; else else if if (m (m == == 6) 6) month month = "JUNE"; "JUNE"; else else if if (m (m == == 7) 7) month month = "JULY"; "JULY"; else else if if (m (m == == 8) 8) month month = "AUGUST"; "AUGUST"; else else if if (m (m == == 9) 9) month month = "SEPTEMBER"; "SEPTEMBER"; else else if if (m (m == == 10) 10) month month = "OCTOBER"; "OCTOBER"; else else if if (m (m == == 11) 11) month month = "NOVEMBER"; "NOVEMBER"; else else if if (m (m == == 12) 12) month month = "DECEMBER"; "DECEMBER"; System.out.println(month);

"#$!%" import import jlab.jlabio; jlab.jlabio; public public class class Month Month { public public static static void void main(string main(string [] [] args) args) { int int m = JLabIO.readInt("Enter month month number number : "); "); switch switch (m) (m) { case case 1 : System.out.println("JANUARY"); break; break; case case 2 : System.out.println("FEBRUARY"); break; break; case case 3 : System.out.println("MARCH"); break; break; case case 4 : System.out.println("APRIL"); break; break; case case 5 : System.out.println("MAY"); break; break; case case 6 : System.out.println("JUNE"); break; break; case case 7 : System.out.println("JULY"); break; break; case case 8 : System.out.println("AUGUST"); break; break; case case 9 : System.out.println("SEPTEMBER"); break; break; case case 10 10 : System.out.println("OCTOBER"); break; break; case case 11 11 : System.out.println("NOVEMBER"); break; break; case case 12 12 : System.out.println("DECEMBER"); break; break; default default : System.out.println("Illegal month month number"); number"); "#$!%" P!3e)0'!switch8!3+7f#$ %1 3+738e. P 8.0'!case8!3+7FF!8'))38e. P #4` &!case6.$breakg"g5 Ag P 6#4` &!case1..$break"#!g108!1+ #!case6'!1+ P 61.8"!case 34"#!G1+#$ %default switch switch (m) (m) { case case 1 : case case 2 : System.out.println("m = 1 or or 2"); 2"); break; break; case case 4 : System.out.println("m = 4"); 4"); break; break; default default : System.out.println("m!=!= 1, 1, 2, 2, and and 4"); 4"); "#$!%",+- *+3R.2'/3RF 3_ 3]/. L N R `3B0C if if (0 (0 <= <= x <= <= 10) 10) if if x == == 0 if if (x (x >= >= 0 && && <= <= 10) 10) if if (x (x == == 0 == == 1) 1) if if (x (x = 0) 0) if if (x (x => => 0) 0) if if (x (x == == 0) 0) if if (y (y == == 0) 0) z = 0; 0; else else if if (a (a == == 1) 1) z = 1; 1; if if (0 (0 <= <= x && && x <= <= 10) 10) if if (x (x == == 0) 0) if if (x (x >= >= 0 && && x <= <= 10) 10) if if (x (x == == 0 x == == 1) 1) if if (x (x == == 0) 0) if if (x (x >= >= 0) 0) if if (x (x == == 0) 0) { if if (y (y == == 0) 0) z = 0; 0; else else if if (a (a == == 1) 1) z = 1; 1; 3&$41+1"F if if (x (x!=!= 0 x!=!= 5) 5) if if (x (x < 3 && && x > 9) 9) if if (done (done && &&!done) if if (done (done!done)

FRSB)TTC+*F3 *F3%P> V9:: FKfloat;<double8GK F S;R: :HNKLP8FS: ER ::: F9RR: SER public class Imprecision { public static void main(string [] [] args) { double a = 49.0; System.out.println( 1.0 1.0 == == (1.0/a * a) a) ); ); System.out.println( 1.0 1.0 - (1.0/a * a) a) ); ); JLab>java Imprecision false 1.1102230246251565E-16 JLab> *F3 *F39//9-=TTUV IRlEK8X] JKLR: F9GKG:8IV;FR) ;<A8RNK8: ( ) public class Epsilon { public static void main(string [] [] args) { double EPSILON = 1.0E-14; double a = 49.0; double x = 1.0, y = (1.0/a * a); a); boolean eq eq = (Math.abs(x-y) / Math.max(Math.abs(x), Math.abs(y))) <= <= EPSILON; System.out.println( eq eq ); ); JLab>java Epsilon true JLab> ε SB)TTWXC+*F3 *F3char NKffdeS7 8989charEFK F9[ W#")3&C+'*63&+."+(CZ 7 8989G <S 7 8989 m(3&."8nk;:g <:I: 0 1 2 3 4 5 6 7 8 9 A B C D E F 002! " # $ % & ' ( ) * +, -. / 003 0 1 2 3 4 5 6 7 8 9 : ; < = >? 004 @ A B C D E F G H I J K L M N O 005 P Q R S T U V W X Y Z [ \ ] ^ _ 006 ` a b c d e f g h i j k l m n o 007 p q r s t u v w x y z { ~ FRSB)TTWXC+*F3 *F3String StringERNR7 <SI:T: KNK0"-6&.$equals;<compareTo N: 7 8989 s1.equals(s2) = s1.compareto(s2) true 5? s1 *#$ s2 false 5? s1,*#$ s2 < 0 5? s1 $ s2 7;$a = 0 5? s1 *#$ s2 > 0 5? s1 *7 s2 7;$a

*F3 *F3String public class class StringCompare { public static void void main(string [] [] args) args) { System.out.println("Computer".equals("Computer")); System.out.println("Computer".compareTo("Computer")); System.out.println("Computer".compareTo("Engineer")); System.out.println("Computer".compareTo("Comp")); System.out.println("Computer".compareTo("Computing")); JLab>java StringCompare true 0-2 4-4 JLab>

หะวข อ 2110101 : การท าโปรแกรมคอมพ วเตอร Iteration : while, do-while, for ค าสะ ง do-while ค าสะ ง while ค าสะ ง for การอ านแฟ มข อความแบบล าดะบ ค าสะ ง break แล continue ภาคว ชาว ศวกรรมคอมพ วเตอร จ ฬาลงกรณ มหาว ทยาละย 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 2 โปรแกรมหาค าเฉล ย ผะงงานแบบวงวน do-while import import jlab.jlabio; jlab.jlabio; public public class class Mean Mean { public public static static void void main(string main(string [] [] args) args) { double double s = 0.0; 0.0; s += += JLabIO.readDouble("data #1 #1 : "); "); s += += JLabIO.readDouble("data #2 #2 : "); "); s += += JLabIO.readDouble("data #3 #3 : "); "); s += += JLabIO.readDouble("data #4 #4 : "); "); s += += JLabIO.readDouble("data #5 #5 : "); "); System.out.println("mean = " + (s (s/ 5.0) 5.0) ); ); JLab>java Mean data #1 : 12 data #2 : 35.5 ถ าต องการหาค าเฉล ย data #3 : 16.8 data #4 : 19.0 ของข อม ล 50 จ านวน data #5 : 2.2 จ เข ยนอย างไรสะ นๆ mean = 17.1 JLab> 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 3 เร มการท างาน s = 0, n = 0 double s = 0.0; int int n = 0; 0; do do { ระบจ านวนจร งเพ มใส ใน s s += += JLabIO.readDouble(); true n++ n < 50? false n++; while( n < 50 50 ); ); s / 50 System.out.println( s/50 ); ); จบการท างาน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 4

ผะงงานแบบวงวน while วงวนแบบ do-while แล while เร มการท างาน double s = 0.0; s = 0, n = 0 int int n = 0; 0; false n < 50? while ( n < 50 50 ) { true s += += JLabIO.readDouble(); ระบจ านวนจร งเพ มใส ใน s n++; n++ System.out.println( s/50 ); s / 50 ); จบการท างาน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 5 false Boolean expr. do this true true do this Boolean expr. false do do { while ( Boolean expr ) { do do this do do this while ( Boolean expr ); ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 6 โปรแกรมหารากท สอง Requirement อ านจ านวนจากผ ใช แล วแสดงรากท สองของจ านวนนะ น Analysis ระบจ านวนจร งผ านทางแป นพ มพ ใช ส ตรในการหารากท สอง x k + 1 = แสดงรากท สองท หาได ทางจอภาพ Design เข ยนผะงงาน Implementation เข ยนโปรแกรม 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 7 1 2 x k + a x k การปร มาณค ารากท สอง ต องการหารากท สองของ a ถ า x k เป นค าปร มาณของ a ค าของ x k+1 = (x k + a/x k )/2 จ เป นค าปร มาณท ใกล a มากกว า x k (ไม พ ส จน ) a = 4.0 x 0 = 1.0 x 1 = 2.5 x 2 = 2.05 x 3 = 2.000609756097561 x 4 = 2.0000000929222947 x 5 = 2.000000000000002 x 6 = 2.0 a = 100.0 x 0 = 1.0 x 1 = 50.5 x 2 = 26.24009900990099 x 3 = 15.025530119986813 x 4 = 10.840434673026925 x 5 = 10.032578510960604 x 6 = 10.000052895642693 x 7 = 10.000000000139897 x 8 = 10.0 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 8

แล วจ ปร มาณค าไปสะกก รอบ? ผะงงานการหารากท สอง หาค า x k+1 = (x k + a/x k )/2 k = 1,2,3,... เร มด วย x 0 = 1 หาไปจน x k+1 กะบ x k ม ค าใกล เค ยงกะนมาก x แล y (แบบ double) ม ค าใกล เค ยงกะนมากเม อ max x y ( x, y ) ε (ให ε ม ค าเท ากะบ 10-14 ) true เร มการท างาน y = 1.0 ระบจ านวนจร งใส ใน a x = y y = (x + a/x)/2 max x y ( x, y ) > ε false y 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 9 จบการท างาน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 10 โปรแกรมหารากท สอง import jlab.jlabio; public class Sqrt { public static void main(string[] args) { double x, x, y = 1.0; double a = JLabIO.readDouble("a = "); "); do do { x = y; y; y = (x (x + a / x) x) / 2.0; while ((Math.abs(x - y) y) / Math.max(Math.abs(x), Math.abs(y))) >= >= 1E-14); System.out.println("sqrt(" + a + ") ") = " + y); y); JLab>java JLab>java Sqrt Sqrt หม นในวงวน 339 รอบ x = 9E200 9E200 sqrt(9.0e200) sqrt(9.0e200) = 3.0E100 3.0E100 JLab> JLab> 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 11 การอ านแฟ มข อความขะ นพ นฐาน แฟ ม (file) ค อท เก บข อม ลในหน วยความจ าส ารอง (โดยทะ วไปค อ harddisk) แต ล แฟ มม ช อก ากะบ Text file ค อแฟ มข อความท เก บสตร ง เป นบรรทะดๆ แต ล บรรทะดคะ นด วยรหะสข นบรรทะดใหม C:\DATA\SCORE.TXT 4531001321 4531001321 3 4531003621 4531003621 3 4531004221 4531004221 4 4531005921 4531005921 3 4531006521 4531006521 3 4531101421 4531101421 4 4531102021 4531102021 4 4531102221 4531102221 0 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 12

การใช JLabIO อ านแฟ มข อความ import java.io.*; import jlab.jlabio; // // open open file file BufferedReader in in = JLabIO.openFile("c:\dat.txt");...... // // read read the the next next line line from from file file String txt txt = in.readline(); if if (txt (txt == == null) null) // // end end of of file file...... // // close close the the file file in.close(); โปรแกรมแสดง text file ออกจอภาพ import jlab.jlabio; import java.io.*; public class class DumpFile1 { public static void void main(string[] args) args) throws IOException { String fn fn = JLabIO.readString("file name name : "); "); BufferedReader in in = JLabIO.openFile(fn); String txt; txt; do do { txt txt = in.readline(); if if (txt (txt!=!= null) null) System.out.println(txt); while while ( txt txt!=!= null null ); ); in.close(); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 13 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 14 โปรแกรมแสดง text file ออกจอภาพ import jlab.jlabio; import java.io.*; public class class DumpFile2 { public static void void main(string[] args) args) throws IOException { String fn fn = JLabIO.readString("file name name : "); "); BufferedReader in in = JLabIO.openFile(fn); String txt; txt; while while ( (txt (txt = in.readline())!=!= null null ) { System.out.println(txt); in.close(); ท าไมต องม throws IOException ท main? ม โอกาสเก ดข อผ ดพลาดร หว างการท างาน ซ ง เก ยวข องกะบแฟ มข อม ลได หลายปร การ (IOException) เป ดแฟ มท ไม ม อย จร ง (เช นส กดช อผ ด) ตอนอ านข อม ลจากแฟ ม อาจเก ดข อผ ดพลาดข นได (เช น อ านจาก diskette แต ผ ใช ดะนด งแผ นออก) เพ อความง าย ขอไม สนใจข อผ ดพลาดเหล าน เลยโยนข อผ ดพลาดแบบ IOException ให ร บบ (ตะวโปรแกรมท เราเข ยนไม ขอระบผ ดชอบ) IOException เป นช อ class มาตรฐานในร บบจาวา 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 15 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 16

โปรแกรมหาค าเฉล ย Requirement หาค าเฉล ยจากข อม ลทะ งหมดในแฟ ม Analysis ผ ใช ร บ ช อแฟ มทางแป นพ มพ แฟ มข อม ลเก บจ านวนจร งบรรทะดล หน งจ านวน ใช Double.parseDouble(s) แปลงสตร ง s เป น double แสดงจ านวนข อม ล แล ค าเฉล ยท หาได ทางจอภาพ Design เข ยนผะงงาน Implementation เข ยนโปรแกรม 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 17 ผะงงานการหาค าเฉล ย เร มการท างาน fn = ช อแฟ ม เป ดแฟ ม fn, n = 0, sum = 0 ม ข อม ลในแฟ มให false อ านเก บใส txt true แปลง txt เป นจ านวนแล วเพ มใส sum เพ มค าของ n อ ก 1 n, sum / n จบการท างาน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 18 โปรแกรมหาค าเฉล ย import jlab.jlabio; import java.io.*; public class class Average1 { public static void void main(string[] args) args) throws IOException { String fn fn = JLabIO.readString("file name name : "); "); BufferedReader in in = JLabIO.openFile(fn); int int n = 0; 0; double sum sum = 0.0; 0.0; while while ((txt ((txt = in.readline())!=!= null) null) { sum sum += += Double.parseDouble(txt); n++; n++; in.close(); System.out.println("n = " + n + " avg avg = " + sum sum / n); n); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 19 โปรแกรมหาค ามากส ด Requirement หาค ามากส ดจากข อม ลทะ งหมดในแฟ ม Analysis ผ ใช ร บ ช อแฟ มทางแป นพ มพ แฟ มข อม ลเก บจ านวนจร งบรรทะดล หน งจ านวน แสดงค ามากส ดท หาได ทางจอภาพ Design เข ยนผะงงาน Implementation เข ยนโปรแกรม 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 20

การหาค ามากส ด ผะงงานการหาค ามากส ด เร มการท างาน ล าดะบของข อม ลท อ านจากแฟ ม x 12 34 8 9 0 44 9 max - 12 34 34 34 34 44 44 การเปล ยนแปลงค า max fn = ช อแฟ ม เป ดแฟ ม fn, max = -Infinity ม ข อม ลในแฟ มให อ านเก บใส txt true แปลง txt เป นจ านวนจร ง x false max x > max true false max = x จบการท างาน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 21 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 22 โปรแกรมหาค ามากส ด import jlab.jlabio; import java.io.*; public class class MaxValue { public static void void main(string[] args) args) throws IOException { String fn fn = JLabIO.readString("file name name : "); "); BufferedReader in in = JLabIO.openFile(fn); double x, x, max max = Double.NEGATIVE_INFINITY; while while ((txt ((txt = in.readline())!=!= null) null) { x = Double.parseDouble(txt); if if (x (x > max) max) max max = x; x; in.close(); System.out.println("max = " + max); max); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 23 การใช while กะบโปรแกรม EAN-13 import import jlab.jlabio; jlab.jlabio; public public class class EAN13CheckDigit EAN13CheckDigit { public public static static void void main(string[] main(string[] args) args) { int ints = 0; 0; String String d = JLabIO.readString("Enter 12 12 digits digits : "); "); s += += Character.digit(d.charAt(1), 10); 10); s += += Character.digit(d.charAt(3), 10); 10); s += += Character.digit(d.charAt(5), 10); 10); s += += Character.digit(d.charAt(7), 10); 10); s += += Character.digit(d.charAt(9), 10); 10); s += += Character.digit(d.charAt(11), 10); 10); s *= *= 3; 3; s += += Character.digit(d.charAt(0), 10); 10); s += += Character.digit(d.charAt(2), 10); 10); s += += Character.digit(d.charAt(4), 10); 10); s += += Character.digit(d.charAt(6), 10); 10); s += += Character.digit(d.charAt(8), 10); 10); s += += Character.digit(d.charAt(10), 10); 10); System.out.println("Check Digit Digit is is " + (10-(s%10))%10); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 24

การใช while กะบโปรแกรม EAN-13 import import jlab.jlabio; jlab.jlabio; public public class class EAN13CheckDigit EAN13CheckDigit { public public static static void void main(string[] main(string[] args) args) { int ints = 0, 0, k; k; String String d = JLabIO.readString("Enter 12 12 digits digits : "); "); k = 1; 1; while while (k<12) (k<12) { s += += Character.digit(d.charAt(k), 10); 10); k += += 2; 2; s *= *= 3; 3; k = 0; 0; while while (k<12) (k<12) { s += += Character.digit(d.charAt(k), 10); 10); k += += 2; 2; System.out.println("Check Digit Digit is is " + (10-(s%10))%10); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 25 การใช while กะบโปรแกรม EAN-13 import import jlab.jlabio; jlab.jlabio; public public class class EAN13CheckDigit EAN13CheckDigit { public public static static void void main(string[] main(string[] args) args) { int ints = 0, 0, k; k; String String d = JLabIO.readString("Enter 12 12 digits digits : "); "); k = 0; 0; while while (k<12) (k<12) { if if ( (k (k % 2) 2) == == 0 ) { s += += Character.digit(d.charAt(k), 10); 10); else else { s += += 3 * Character.digit(d.charAt(k), 10); 10); k++; k++; System.out.println("Check Digit Digit is is " + (10-(s%10))%10); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 26 while แล do-while วงวนท เข ยนด วย while เปล ยนเป น do-while ได วงวนท เข ยนด วย do while เปล ยนเป น while ได โปรแกรมเมอร ควรเล อกแบบท ส อความหมาย อ านง าย while : ตราบเท าท เง อนไขเป นจร ง จ งจ ท า อาจไม ได ท าใน block do-while ท าไปเร อยๆ ตราบเท าท เง อนไขยะงเป นจร ง อย างน อยต องท าใน block หน งคระ ง วงวนท ท าเป นจ านวนคระ งตามท ก าหนด ม ตะวแปรคอยนะบตามจ านวนรอบ i = 1; 1; i = 0; 0; while while (i (i <= <= n) n) { while while (i (i < n) n) { // // do do something here here // // do do something here here i++; i++; i++; i++; i = n; n; i = n-1; n-1; while while (i (i > 0) 0) { while while (i (i >= >= 0) 0) { // // do do something here here i--; i--; // // do do something here here i--; i--; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 27 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 28

ข อควรร วะง วนขาดหน งรอบ วนเก นหน งรอบ หร อวนต ด loop i = 1; 1; i = 0; 0; while while (i (i < n) n) { while while (i (i <= <= n) n) { // // do do something here here // // do do something here here i++; i++; i++; i++; i = n; n; i = 0; 0; while while (i (i > 1) 1) { while while (i (i!=!= n) n) { // // The The test test above above can can // // do do something here here // // cause cause infinite // // loop. loop. i--; i--; i++; i++; วงวนแบบ for วงวนท ท าเป นจ านวนคระ งตามท ก าหนด (counting loop) เป นวงวนท มะกพบบ อยมาก ตะวภาษาจ งม ค าสะ ง for เพ อท า counting loop i = 1; 1; while while (i (i <= <= n) n) { // // do do something here here i++; i++; i = n; n; while while (i (i > 0) 0) { // // do do something here here i--; i--; for for (i (i = 1; 1; i <= <= n; n; i++) i++) { // // do do something here here for for (i (i = n; n; i > 0; 0; i--) i--) { // // do do something here here 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 29 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 30 วงวนแบบ for comma initialization i = 0, j = n-1 condition false i < j false true true do this do this update i++, j-- for for ( initialization ; condition ; update ) { do do this for for ( i = 0, 0, j = n-1; i < j; j; i++, j--) { do do this 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 31 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 32

ตะวอย างวงวนแบบ for for for (i (i = 1; 1; i <= <= n; n; i++) i++) { System.out.println(i); for for (i (i = 1; 1; i <= <= n; n; i += += 2) 2) { System.out.println(i); หน ง block หร อ หน ง statement for for ( initialization ; condition ; update ) { statements for for ( initialization ; condition ; update ) statement ; n = JLabIO.readInt("n = "); "); for for (i (i = 2; 2; (i (i < n) n) && && (n (n % i!=!= 0); 0); i++) i++) { if if (i (i < n) n) { System.out.println( n + " = " + i + "x" "x" + (n/i) (n/i) ); ); else else { System.out.println( n + " is is prime."); do do { statements while ( Boolean expr ); ); do do statement ; while ( Boolean expr ); ); while ( Boolean expr ) { statements while ( Boolean expr ) statement ; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 33 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 34 อย าใช for ผ ดวะตถ ปร สงค ค าสะ ง break เพ อออกจากวงวน double x = 0, 0, y = 1; 1; double a = JLabIO.readDouble("a = "); "); while while ((Math.abs(x - y) y) / Math.max(Math.abs(x), Math.abs(y))) >= >= 1E-14) { x = y; y; y = (x (x + a / x) x) / 2.0; 2.0; System.out.println("sqrt(" + a + ") ") = " + y); y); double x = 0, 0, y = 1; 1; double a = JLabIO.readDouble("a = "); "); for for ( ; (Math.abs(x - y) y) / Math.max(Math.abs(x), Math.abs(y))) >= >= 1E-14); x = y, y, y = (x (x + a / x) x) / 2.0 2.0 ) ; System.out.println("sqrt(" + a + ") ") = " + y); y); true... break... false while while ((t ((t = in.readline())!=!= null) null) { if if ("END".equals(t)) break; x = Double.parseDouble(t); if if (x (x > max) max) max max = x; x; สนใจหาค ามากส ดของจ านวนท เก บ ในแฟ มข อม ลก อนบรรทะดท ม ค าว า END 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 35 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 36

ค าสะ ง continue เพ อกละบไปต นวงวน Nested Loops ภายในวงวนหน งจ ม วงวนอ นก ได true... continue false while while ((t ((t = in.readline())!=!= null) null) { x = Double.parseDouble(t); if if (x (x <= <= 0) 0) continue; if if (x (x > max) max) max max = x; x; สนใจหาค ามากส ดของเฉพา จ านวน เต มบวก ท เก บในแฟ มข อม ล... for ใน while while ใน while do-while ใน while do-while ใน do-while break แล continue ภายในวงวนใด ก จ ท างานกะบวงวนนะ น 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 37 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 38 Mandelbrot Set ให ล าดะบของจ านวน เช งซ อน d n ค านวณได จาก d n = (d n-1 ) 2 +c โดยท d 0 = 0+i0 = 0 แล c เป นจ านวนเช งซ อน c เป นสมาช กของ Mandelbrot set ถ าล าดะบ ของ d n ล เข าหาค าคงตะว แกน x แทนเส นจ านวนจร ง แกน y แทนเส นจ านวนจ นตภาพ จ ดด าในร ปค อสมาช กของ Mandelbrot set การบวกแล ค ณจ านวนเช งซ อน (x+iy) = (x 2 + y 2 ) 1/2 (x+iy)+(p+iq) = (x+p) + i(y+q) (x+iy)(p+iq) = (xp-yq) + i(xq+yp) ตะวอย างการเปล ยนแปลงของค า r c = (0.2+i0.2) จ ได 0.344, 0.351, 0.327, 0.305, 0.304, 0.312, 0.316, 0.316, 0.314, 0.313, 0.313, 0.313, 0.314, 0.314, 0.314,...(converge) c = (1.0+i1.0) จ ได 3.162, 9.899, 97.01, 9409, 8.853E7, 7.837E15, 6.142E31, 3.773E63, 1.424E127,... (diverge to infinity) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 39 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 40

โปรแกรมแสดง Mandelbrot set public public void void paint(graphics paint(graphics g) g) { double double xnew, xnew, xnew, xnew, xold, xold, xold, xold, x, x, y; y; double double stepx stepx = 3.0 3.0 / getsize().width; double double stepy stepy = 3.0 3.0 / getsize().height; int int n; n; for for (y (y = -1.5; -1.5; y <= <= 1.5; 1.5; y += += stepy) stepy) { for for (x (x = -2.0; -2.0; x <= <= 1.0; 1.0; x += += stepx) stepx) { for for (xold (xold = x, x, yold yold = y, y, n = 0; 0; (n (n < 256); 256); n++) n++) { xnew xnew = xold xold * xold xold- yold yold * yold yold + x; x; ynew ynew = 2 * xold xold * yold yold + y; y; if if (Math.sqrt(xnew (Math.sqrt(xnew * xnew xnew + ynew ynew * ynew) ynew) > 2) 2) break; break; xold xold = xnew; xnew; yold yold = ynew; ynew; if if (n (n >= >= 256) 256) { g.drawrect((int)((x + 2) 2) / stepx), stepx), (int)((y (int)((y + 1.5) 1.5) / stepy), stepy), 1, 1, 1); 1); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 41 Visualizing Mandelbrot Set 1.5 0.226-1.5 0.215-2.0 1.0-0.734-0.726 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 42

หะวข อ 2110101 : การท าโปรแกรมคอมพ วเตอร Methods บทบาทของ methods Methods ต างๆ ของ class Math องค ปร กอบของ method การเร ยกใช Overloading ภาคว ชาว ศวกรรมคอมพ วเตอร จ ฬาลงกรณ มหาว ทยาละย 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 2 การเข ยนโปรแกรม การเข ยนโปรแกรม ป ญหาของโปรแกรมยาวๆ อ านยาก debug ย ง แก ไขประบปร งล าบาก ข อสะงเกตของโปรแกรมทะ วไป สามารถแบ งการท างานออก เป นส วนๆ ตามหน าท ม การท างานซ าๆ บ อยๆ class class Human Human { void void main(...) main(...) { ทางแก แบ งโปรแกรมเป นส วนย อยๆ แยกส วนของโปรแกรมท ซ าๆ คล ายๆ กะนออกมา เร ยกส วนย อยเหล าน ว า subroutine, subprogram, หร อ method แต ล method ม หน าท ใน ตะวเองอย างเด นชะด class class Human Human { main(...) main(...) { { born(); born(); grown(); grown(); sick(); sick(); dead(); dead(); born(...) born(...) { { grown(...) grown(...) { { sick(...) sick(...) { { dead(...) dead(...) { { 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 3 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 4

เม อต องเข ยนโปรแกรมใหม ค ดถ งโปรแกรมเก าท เคยเข ยนไว ค ดถ งคละงค าสะ งของร บบท ม ให ใช ได (Java API) น าของท ม อย มาแก ไข (แฟ ม.java) น าของท ม อย มาใช ใหม (แฟ ม.class) เข ยนค าสะ งเพ อเช อมต อของท ม อย ให ใช ได ถ าจ าเป น จ งเข ยนใหม เข ยนให อ านง าย (readability) เข ยนให แก ไขง าย (maintainability) เข ยนให สามารถน าไปใช ในงานอ นๆ ได ในอนาคต (reuseability) ตะวอย าง method ท เคยใช System.out.println("Hello World"); ส ง "Hello World" เพ อให System.out.println (แสดงออกทางจอภาพ) int int x = JLabIO.readInt("x = "); "); ส ง "x = " เพ อให JLabIO.readInt (แสดงออกทางจอภาพ แล วรอระบการป อนจ านวนเต มทางแป นพ มพ) แล วได ผลละพธ เป นจ านวน เต มค นมา เก บไว ในตะวแปร x double r = Math.random(); ไม ส งอ ไรให Math.random แต จ ได ผลละพธ เป นจ านวนจร งค นมา (ซ งเป นจ านวนจร งส มในช วง 0.0 ถ ง 1.0) เก บไว ในตะวแปร x 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 5 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 6 Methods ต างๆ ของคลาส Math abs( x ) : absolute value acos( x ) : arc cosine asin( x ) : arc sine atan( x ) : arc tangent cos( x ) : trigonometric cosine sin( x ) : trigonometric sine tan( x ) : trigonometric tangent exp( x ) : e x log( x ) : natural logarithm (base e) pow( x, y ) : x y 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 7 Methods ต างๆ ของคลาส Math (ต อ) ceil( x ) : ceiling floor( x ) : floor max( x, y ) : the greater of x and y min( x, y ) : the smaller of x and y random() : a random number in [0.0, 1.0) round( x ) : the closest integer to x sqrt( x ) : positive square root of x todegrees( x ) : convert angle in radian to degree toradians( x ) : convert angle in degree to radian 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 8

ตะวอย าง Java API Help File public static double sin(double a) Returns the trigonometric sine of an angle. Special cases: If the argument is NaN or an infinity, then the result is NaN. If the argument is zero, then the result is a zero with the same sign as the argument. A result must be within 1 ulp of the correctly rounded result. Results must be semi-monotonic. Parameters: a - an angle, in radians. Returns: the sine of the argument. ulp - unit of the last place 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 9 โปรแกรมหาม มร หว างสองเวกเตอร Requirement หาม ม (เป นองศา) ร หว างสองเวกเตอร Analysis เวกเตอร ม จ ดเร มท (0, 0) ระบเวกเตอร จากแป มพ มพ โดยร บ ต าแหน งของจ ดปลาย (u X, u Y ) แล (v X, v Y ) ส ตรการหาม มค อ 1 u Xv X + uyv Y θ = cos 2 2 2 2 ( u + )( + ) X uy v X v Y แสดงม มท หาได ทางจอภาพ θ (0, 0) (u X, u Y ) (v X, v Y ) คล ายกะนมาก 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 10 แยกส วนซ าๆ คล ายๆ กะนเป นเมท อด cos( θ ) = u v + u v X X Y Y 2 2 2 2 ( u + )( + ) X uy v X vy cosine = (ux (ux * vx vx + uy uy * vy) vy) / (Math.sqrt(ux * ux ux + uy uy * uy) uy) * Math.sqrt(vx * vx vx + vy vy * vy)); vy)); cosine = (ux (ux * vx vx + uy uy * vy) vy) / (length(ux, uy) uy) * length(vx, vy)); vy)); public static double length(double x, x, double y) y) { return Math.sqrt(x * x + y * y); y); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 11 โปรแกรมหาม มร หว างสองเวกเตอร import jlab.jlabio; public class class A { public static void void main(string[] args) args) { double ux ux = JLabIO.readDouble("ux = "); "); double uy uy = JLabIO.readDouble("uy = "); "); double vx vx = JLabIO.readDouble("vx = "); "); double vy vy = JLabIO.readDouble("vy = "); "); double cosine = (ux (ux * vx vx + uy uy * vy) vy) / (length(ux, uy) uy) * length(vx, vy)); vy)); double degree = Math.toDegrees(Math.acos(cosine)); System.out.println(JLabIO.format(degree, 5, 5, 2)); 2)); public static double length(double x, x, double y) y) { return Math.sqrt(x * x + y * y); y); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 12

องค ปร กอบของเมท อด หะวเมท อด บอกละกษณ การใช งานของเมท อด ร บ ช อ ปร เภทของข อม ลท ระบ แล ปร เภทของผลละพธ ท ได ตะวเมท อด ปร กาศตะวแปรใช ภายใน บรรยายการท างานของเมท อด ค นการท างานส ผ เร ยก public static double length(double x, x, double y) y) { double len; len; len len = Math.sqrt(x * x + y * y); y); return len; len; องค ปร กอบของเมท อด ตะวบอกละกษณ ของ method ปร เภทข อม ล ของผลละพธ ท ได ช อ method รายการของ parameters public static double length(double x, x, double y) y) { double len; len; len len = Math.sqrt(x * x + y * y); y); return len; len; return ค นการท างานกละบส ผ เร ยก method น โดยต องค นข อม ลปร เภทเด ยวกะบท ได ปร กาศ ไว ท หะว method 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 13 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 14 หะวเมท อด : ปร เภทข อม ลของผลละพธ ปร เภทข อม ลพ นฐาน (int, double, boolean, ) ปร เภทข อม ลแบบคลาส (String, Point, ) ถ าเป น method ท ไม ค นผลละพธ ให ใส ค าว า void public static int int min(int a, a, int int b) b) int m = min(a, 0); public static String tostring(int i, i, int int radix) String s = tostring(a, 16); public static void void gc() gc() gc(); หะวเมท อด : ช อ การตะ งช อใช กฎเหม อนกะบตะวแปร ปร กอบด วยตะวอะกษร ตะวเลข ตะว $ หร อ _ ก ได ห ามข นต นด วยตะวเลข ไม ม ข อจ ากะดเร องความยาวของช อ ตะวอะกษรตะวใหญ ไม เหม อนตะวเล ก ต องไม ซ ากะบค าสงวนของภาษาจาวา โดยทะ วไปช อเมท อดข นต นด วยตะวเล ก มะกตะ งช อเมท อดให เป นกร ยา fillcircle setenabled turnleft println start start run run 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 15 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 16

หะวเมท อด : รายการของพาราม เตอร รายการของ parameters parameter เป นตะวแปรส าหระบระบข อม ลเข ามาปร มวลผล แต ล parameter เข ยนเหม อนการปร กาศตะวแปร (แต ไม ต องป ดท ายด วย semi-colon) แต ล parameter คะ นด วยจ ลภาค (comma) รายการของ parameters อย ภายในวงเล บ (ถ าไม ระบ parameter ใดๆ ก ไม ต องใส อ ไรในวงเล บ) public static void void turnleft(double angle) public static double pow(double a, a, double b) b) public static String readstring() 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 17 ตะวเมท อด public public static static double double readdouble(string msg) msg) { double doublex = 0; 0; // // local localvar. declaration declaration boolean boolean success success = false; false; // // local local var. var. declaration declaration do do { String String s; s; // // local local var. var. declaration declaration s = readstring(msg); try try { x = Double.parseDouble(s); success success = true; true; catch catch (NumberFormatException e) e) { System.err.println("invalid real real number, number, try try again"); again"); success success = false; false; while while (!success); (!success); return return x; x; // // return return to to caller caller 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 18 ตะวเมท อด : การค นการท างานส ผ เร ยก เม อการท างานพบค าสะ ง return ก จ ค นการท างาน กละบไปส ผ เร ยก method ส าหระบ method ท ไม ม การค นผลละพธ หละงค าว า return ป ดท ายด วย ; เลย ถ าค าสะ งท ายส ดของ method ไม ใช return ก จ เสม อนม return หละงบรรทะดท ายส ด public static void void printerror(string msg) msg) { if if ( msg msg == == null null ) return; System.err.println( msg msg ); ); ตะวเมท อด : การค นการท างานส ผ เร ยก ส าหระบ method ท ม การค นผลละพธ หละงค าว า return ต องตามด วยน พจน ค าของน พจน ท ค นเป นผลละพธ ต องเป นปร เภทเด ยวกะบ ท ปร กาศไว ท หะว method หร อท ร บบสามารถจ ท า promotion ให ได ค นผลได แค ตะวเด ยว public static long long clip(long a) a) { if if ( a > 0 ) return a; a; else else return 0; 0; \\ \\ 0 is is promoted promoted to to 0L 0L 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 19 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 20

ตะวเมท อด : Local Variables Local variables ค อตะวแปรท ใช ภายในเมท อด ปร กาศใน block ใด ใช ได เฉพา ใน block นะ น หร อ block ท ซ อนอย ชะ นในๆ ของ block นะ น ปร กาศท จ ดใด ใช ได หละงจ ดนะ นภายใน block public static void void test(int a) a) { int int z = 7; 7; { int int x = z; z; System.out.println( x ); ); System.out.println( x ); ); // // wrong wrong { System.out.println( x ); ); // // wrong wrong int int x = z; z; System.out.println( x ); ); { int int y = z; z; System.out.println( y ); ); { int int x = z; z; System.out.println( x ); ); // // wrong wrong 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 21 ตะวเมท อด : Local Variables ถ กสร างใหม ท กคระ งท ท างานถ งจ ดท ปร กาศ (ร บบสร างให โดยไม ได เต มค าเร มต น) ถ กท าลายหมดหละงจบ block ท ถ กปร กาศ ตะวแปรต างๆ ในพาราม เตอร ก เป น local variables import import jlab.jlabio; jlab.jlabio; public public class class A { public public static static void void main(string[] main(string[] args) args) { int ints = 0, 0, n = JLabIO.readInt("n = "); "); for for (int (inti = 0; 0; i <= <= n; n; i++) i++) { int inti2 i2 = i * i; i; s += += i2; i2; int inti3 i3 = i2 i2 * i; i; s += += i3; i3; System.out.println("s = " + s ); ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 22 i3 i2 i s, n ส งท มะกผ ดบ อย public public static static printerror(string msg) msg) { System.err.println( msg msg ); ); public public static static int int abs(int abs(int a) a) { if if ( a < 0 ) a = -a; -a; public public static static float float max(float max(float x, x, y) y) { if if ( x > y ) return returnx; x; else elsereturn returny; y; public public static static double double length(double length(double dx, dx, double double dy) dy) { double double dx dx = Math.abs(dx); Math.abs(dx); return return Math.sqrt( Math.sqrt( dx*dx dx*dx + dy*dy dy*dy ); ); public public static static float float getblackcolor() getblackcolor() { return return 0.0; 0.0; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 23 การเร ยกใช เมท อด การส งข อม ลไป (arguments) การระบผลท ได ค นมา (returned value) ไม ม ข อม ลส งไป หร อไม ม ผลค นมา ก ได int int a, a, b; b;...... b = power( a+2 a+2, 3 ); );...... public static int int power(int x, int int y ) { int int p = 1; 1; for for (int (int i=1; i=1; i<=y; i<=y; i++) i++) p *= *= x; x; return p; p; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 24

การเร ยกใช เมท อด : การส งข อม ล จ านวนข อม ลท ส งต องตรงกะบท ปร กาศไว ท หะวเมท อด ส งท ส งไปต องเป นปร เภทท ตะวแปรท หะวเมท อดระบได (ถ าจ าเป น ร บบจ ท า argument promotion ให ) ถ ก ผ ด public static float float max(float x, x, float float y) y) {... x = max( max( (float) (a/3.0), 1f 1f ); ); y = max( max( Float.parseFloat(str), 1 ); ); // // 1 -> -> 1.0f 1.0f x = max( max( (float) (a/2) (a/2) ); ); // // wrong wrong number of of args args y = max( max( "1.0", 1 ); ); // // can't can't promote "1.0" "1.0" to to 1f 1f การเร ยกใช เมท อด : ผลท ค นกละบ ในกรณ ท เมท อดม การค นค า ก ต องม ตะวแปรซ งม ปร เภทท ระบค าของข อม ลท ค นมาได ถ ก ผ ด public static float float max(float x, x, float float y) y) {... double x = max( max( 1.0f, 1.0f, (int) (int) (x/3) (x/3) ); ); int int y = (int) (int) max( max( 1, 1, 2 ); ); float float z = max( max( max(x, y), y), -10.5f ) ); ); long long x = max( max( 4.0f, 4.0f, 2.3f 2.3f ); ); // // float float to to long long float float y = max( max( 4.0, 4.0, 1.0 1.0 ); ); // // double to to float float max( max( 2.0f, 2.0f, 1.0f 1.0f ); ); // // max max returns float float 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 25 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 26 ตะวอย าง : Integration แบ งพ นท ใต กราฟเป นแถบๆ หาพ นท ของแต ล แถบ แล วหาผลรวม ใช midpoint rule ปร มาณพ นท ใต กราฟดะงน f(x) x 0 x 1 x 2 x n-1 x n b n f ( x ) dx a i = 1 hf x i 1 + 2 x b a h = n i Integration using Midpoint Rule public public class class Integration Integration { public public static static void void main(string[] main(string[] args) args) { System.out.println(simpson(0, 10, 10, 1000)); 1000)); public public static static double double midpoint(double midpoint(double a, a, double double b, b, int int n) n) { double double h, h, s1, s1, x; x; h = (b (b- a) a) / n; n; s1 s1 = 0.0; 0.0; x = a + h / 2.0; 2.0; for for (int (inti = 1; 1; i <= <= n; n; i++) i++) { s1 s1 += += h*f(x); h*f(x); b n x += += h; h; x i 1 + x i f ( x ) dx hf return return s1; s1; a i = 1 2 public public static static double double f(double f(double x) x) { return return2 * x * x; x; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 27 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 28

b a ตะวอย าง : Integration แบ งพ นท ใต กราฟเป นแถบๆ หาพ นท ของแต ล แถบ แล วหาผลรวม ใช Simpson's rule ปร มาณพ นท ใต กราฟดะงน f ( x ) dx h f 3 f(x) x 0 x 1 x 2 x n-1 x n ( a ) + 4 n 1 i = 1,3,5,... f ( a + ih ) + 2 b a h = n + ih ) + f ( b ) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 29 n 2 i = 2,4,6,... f ( a Integration using Simpson's Rule public public class class Integration Integration { public public static static void void main(string[] main(string[] args) args) { System.out.println(simpson(0, 10, 10, 1000)); 1000)); public public static static double double simpson(double simpson(double a, a, double double b, b, int int n) n) { double double h, h, s1, s1, s2, s2, x; x; h = (b (b- a) a) / n; n; s1 s1 = s2 s2 = 0.0; 0.0; x = a; a; for for (int (inti = 1; 1; i <= <= n; n; i++) i++) { x += += h; h; if if (i (i % 2 == == 1) 1) // // is is odd odd? s1 s1 += += f(x); f(x); else n 1 n 2 h else f ( a ) + 4 s2 s2 += += f(x); f ( a + ih ) + 2 f ( a + ih ) + f ( b ) f(x); 3 i = 1,3,5,... i = 2,4,6,... return return (h (h/ 3 * (f(a) (f(a) + 4 * s1 s1 + 2 * s2 s2 + f(b))); f(b))); public public static static double double f(double f(double x) x) { return return2 * x * x; x; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 30 ตะวอย าง : ความต างศะกย ของตะวเก บปร จ Voltage Across a Capacitor t=0 : ตะวเก บปร จ ม ปร จ เป นศ นย t=1 : ป ดสว ทซ แหล งจ ายปร แส จ าย ปร จ เพ ม I ( t ) = 4(1 e ความต างศะกย เพ ม Q ( t ) = I ( t ) dt Q ( t ) V ( t ) = C ) e (1 e 0.5 0.5( t 1) t ) V(t) public public class class CapacitorVoltage { public public static static void void main(string[] main(string[] args) args) { double double c = 0.05; 0.05; // // capacitance capacitance double v, v, q; q; // // voltage voltage and and charge charge double doublea = 1.0, 1.0, b = 10.0; 10.0; // // 1 to to10 10seconds for for (double (double t = a; a; t <= <= b; b; t++) t++) { q = simpson(a, simpson(a, t, t, 1000); 1000); v = q / c; c; System.out.println(t + "\t" "\t" + q + "\t" "\t" + v); v); public public static static double double simpson(double simpson(double a, a, double double b, b, int int n) n) {...... public public static static double double f(double f(double x) x) { return return 4 * (1 (1 - Math.exp(-0.5)) Math.exp(-0.5)) * Math.exp(-0.5 Math.exp(-0.5 * (t (t - 1)) 1)) * (1 (1 - Math.exp(-t)); Math.exp(-t)); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 31 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 32

Method Overloading ช อเมท อดซ าได ถ ารายการพาม เตอร ไม เหม อนกะน ร บบจ เร ยกเมท อดท เหมา สมให public public static static int int max(int max(int x, x, int int y) y) { if if ( x > y ) return returnx; x; else elsereturn returny; y; public public static static double double max(double max(double x, x, double double y) y) { if if ( x > y ) return returnx; x; else elsereturn returny; y; public public static static double double max(double max(double x, x, double double y, y, double double z) z) { if if ( x > y && && x > z ) return returnx; x; else elseif if ( y > x && && y > z ) return returny; y; else else return return z; z; Method Overloading ไม สามารถ overload เมท อดท รายการพาม เตอร เหม อน แต ปร เภทข อม ลท ค นไม เหม อน ความเหม อนไม เหม อนของพาราม เตอร อย ท ปร เภท ข อม ล ไม เก ยวกะบช อท ใช public public static static int int max(int max(int x, x, int int y) y) { if if ( x > y ) return returnx; x; else elsereturn returny; y; public public static static double double max(int max(int x, x, int int y) y) { if if ( x > y ) return return (double) (double) x; x; else elsereturn (double) (double) y; y; public public static static int int max(int max(int a, a, int int b) b) { if if ( x > y ) return returna; a; else elsereturn returnb; b; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 33 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 34

หะวข อ 2110101 : การท าโปรแกรมคอมพ วเตอร Arrays อาเรย การปร กาศ การสร าง การใช การส งอาเรย ให เมท อด การค นข อม ล การเร ยงล าดะบข อม ล อาเรย หลายม ต ภาคว ชาว ศวกรรมคอมพ วเตอร จ ฬาลงกรณ มหาว ทยาละย 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 2 โปรแกรมเก บสถ ต ค แนนสอบ ผะงงานการเก บสถ ต ค แนนสอบ ม แฟ มข อม ลเก บรหะสนะกเร ยน + ค แนน ค แนนม ตะ งแต 0 ถ ง 4 (จ านวนเต ม) อยากร ว าม นะกเร ยนได 0 ก คน 1 ก คน... 4 ก คน 4531001321 3 4531003621 3 4531004221 4 4531005921 3 4531006521 3 4531101421 4 4531102021 4 4531102221 0 ค แนน จ านวนนะกเร ยน 0 1 1 0 2 0 3 4 4 3 เร มการท างาน ระบช อแฟ ม เป ดแฟ ม ให sc0, sc1, sc2 sc3, sc4 เป น 0 s = ค แนนใหม 1 1 not EOF true s =? s = ค แนนใหม sc0, sc1, sc2 sc3, sc4 false 0 1 2 3 4 sc0++ sc1++ sc2++ sc3++ sc4++ 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 3 จบการท างาน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 4

โปรแกรมเก บสถ ต ค แนนสอบ import import jlab.jlabio; jlab.jlabio; import import java.io.*; java.io.*; public public class class Frequency1 Frequency1 { public public static static void void main(string[] main(string[] args) args) throws throws IOException IOException { String String txt, txt, t; t; int int sc, sc, score0, score0, score1, score1, score2, score2, score3, score3, score4; score4; BufferedReader BufferedReader in in = JLabIO.openFile(JLabIO.readString(">")); score0 score0 = score1 score1 = score2 score2 = score3 score3 = score4 score4 = 0; 0; while while ((txt ((txt = in.readline()) in.readline())!=!= null) null) { t = txt.substring(10, txt.length()); txt.length()); switch switch ( Integer.parseInt(t.trim()) ) { case case0 : score0++; score0++; break; break; case case1 : score1++; score1++; break; break; case case2 : score2++; score2++; break; break; case case3 : score3++; score3++; break; break; case case4 : score4++; score4++; break; break; default default : System.out.println("data error error -> -> " + txt); txt); in.close(); in.close(); // // Five Five more more lines lines to to display display score score frequencies frequencies...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 5 ใช อาเรย ด กว า 1 score0 score 0 1 2 3 4 1 score[0] 0 score1 0 score[1] 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 6 0 score2 ตะวแปร ตะวแปร 5 ตะว ตะว 5 ช อ ช อ 0 score[2] 4 4 score3 score[3] น าท เก บข อม ลต างๆ มารวมกล มกะน 1 กล ม กล ม 1 ช อ ช อ โดยแต ล ท เก บม หมายเลขก ากะบ 3 3 score4 score[4] โปรแกรมเก บสถ ต ค แนนสอบ (ใช อาเรย ) import import jlab.jlabio; jlab.jlabio; import import java.io.*; java.io.*; public public class class Frequency2 Frequency2 { public public static static void void main(string[] main(string[] args) args) throws throws IOException IOException { String String txt, txt, t; t; int int sc; sc; int int [] [] score score = new new int[5]; int[5]; // // declare declare + allocate allocate array array BufferedReader BufferedReader in in = JLabIO.openFile(JLabIO.readString(">")); for for (int (int i=0; i=0; i<5; i<5; i++) i++) score[i] score[i] = 0; 0; // // unnecessary unnecessary while while ((txt ((txt = in.readline()) in.readline())!=!= null) null) { t = txt.substring(10, txt.length()); txt.length()); sc sc = Integer.parseInt(t.trim()); score[sc]++; score[sc]++; for for (int (int i=0; i=0; i<5; i<5; i++) i++) { System.out.println( i + " -> ->" + score[i] score[i] ); ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 7 แถวล าดะบ (Arrays) อาเรย ค อท เก บรายการของข อม ลปร เภทเด ยวกะน อาเรย เก บข อม ลทะ งหลายต ดๆ กะนไปในหน วยความจ า เสม อนน าข อม ลมาเก บใน "ช อง" ท วางเร ยงกะน แต ล อาเรย ม ช อก ากะบ ใช หมายเลขช องร บ ต าแหน งของข อม ลในอาเรย a 0 1 2 3 4 5 6 7 8 9 10 11 23 2 3 14 5 99 9 8 7 44 23 3 System.out.println( a[6] + a[9] ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 8

การปร กาศแล การสร างอาเรย ก อนใช อาเรย ต อง ปร กาศตะวแปรอาเรย สร างตะวอาเรย ตะวแปรอาเรย กะบตะวอาเรย การปร กาศตะวแปรอาเรย เป นการสร างท เก บ "ท อย " (reference) ของอาเรย ท จ สร าง int int [] [] data; ปร กาศตะวแปรช อว า data ม ไว อ างอ งอาเรย ของ int data = new new int[10]; สร างอาเรย ของ int จ านวน 10 ช อง แล วให data เป นตะวแปร ส าหระบอ างอ งอาเรย ท ได สร างข น [3] [2] [1] [0] 0 0 0 0 int int [] [] data = new new int[10]; int [] a = new int[4]; ปร กาศตะวแปรแล สร างอาเรย พร อมกะนเลยก ได 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 9 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 10 ข อสะงเกต : การปร กาศ+การสร าง การปร กาศตะวแปรอาเรย ไม ได เป นการสร างตะวอาเรย ขนาดของอาเรย ถ กก าหนดตอนสร างตะวอาเรย ไม ใช ตอนปร กาศตะวแปร ขนาดของอาเรย เป นค าของน พจน ก ได ( data = new int[ 3*n + 1]; ) อาเรย ท สร างข น ไม สามารถเพ มหร อลดขนาดได ร บบจ ตะ งค าเร มต นของข อม ลในอาเรย โดยอะตโนมะต (ให ค าศ นย กะบอาเรย ของจ านวน แล ให ค า false กะบ อาเรย ของ boolean) ข อสะงเกต : การอ างอ งอาเรย อาเรย แถวหน ง อาจม ตะวแปรหลายตะวอ างอ งได int [] a = new int[4]; [3] [2] [1] [0] int [] b = a; 0 0 0 0 a กะบ กะบ b ม ค าเท ากะน หมายความว าอ างอ งอาเรย เด ยวกะน ดะงนะ น a[i] กะบ กะบ b[i] อ างอ งท เก บข อม ลท เด ยวกะน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 11 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 12

สร างใหม ได แต ของเด มหาย ปร กาศ+สร าง+ตะ งค าเร มต น int[] int[] data; data; data data ใช initializer list ร บ ค าเร มต น ไม ต องก าหนดจ านวนช องท จ สร าง จ านวนช องท สร างเท ากะบจ านวนข อม ลใน list data data = new new int[4]; data[2] = 9; 9; data data = new new int[3]; data data 0 0 0 0 0 0 0 9 0 0 0 0 9 0 0 int[] int[] data data = new new int[4]; int[4]; data[0] data[0] = 23; 23; data[1] data[1] = 3; 3; data[2] data[2] = 21; 21; data[3] data[3] = 47; 47; int[] int[] data data = {23, {23, 3, 3, 21, 21, 47; 47; 0 0 0 0 int[] int[] data; data; data = {23, 3, 21, 47; data = {23, 3, 21, 47; เข ยนแยกเป นสองบรรทะดแบบน ไม ได 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 13 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 14 การใช ข อม ลในอาเรย ใช หมายเลขช อง (เร ยกว า index) ของอาเรย เป น ตะวอ างอ งข อม ลในอาเรย เช น data[2] เป นการ อ างอ งข อม ลช องท index 2 ในอาเรย data index ของอาเรย เร มท 0 เสมอ ถ าอาเรย ม ขนาด n ตะว index ต องเป นจ านวนเต ม ม ค าได ตะ งแต 0 ถ ง n-1 public public class class Array1 Array1 { public public static static void void main(string main(string [] [] args) args) { int int [] [] data data = new new int[100]; int[100]; int int sum sum = 0; 0; for(int for(int i = 0; 0; i < 100; 100; i++) i++) sum sum += += data[i]; data[i]; System.out.println( sum sum ); ); i = 0; 0; i < 100 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 15 การอ างอ งข อม ลแบบผ ดๆ ถ าอาเรย ม ขนาด n ตะว index ต องเป นจ านวนเต มม ค าได ตะ งแต 0 ถ ง n-1 index ไม ใช จ านวนเต ม - compile error index เป นจ านวนเต มท อย นอกช วง เก ด ArrayIndexOutOfBoundsException ขณ ท างาน public class Array3 { public static void main(string [] [] args) { int int [] [] data = new new int[100]; System.out.println( data[100] ); ); JLab>java JLab>java Array3 Array3 java.lang.arrayindexoutofboundsexception at at Array3.main(Array3.java:4) Exception Exception in in thread thread "main" "main" JLab> JLab> 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 16

โปรแกรมแสดงช อเด อน import jlab.jlabio; public class class Month Month { public static void void main(string [] [] args) args) { String month[] = {"JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"; int int m = JLabIO.readInt("Enter month month number : "); "); if if (1<=m (1<=m && && m<=12) System.out.println(month[m-1]); 0 1 2 3 4 5 6 7 8 9 10 11 การส งอาเรย ไปยะงเมท อดอ น ใช ช ออาเรย แทนทะ งอาเรย (ไม ม [ ] ) การส งอาเรย จ ไม ได ส งข อม ลของทะ งอาเรย ไป แต จ ส งต าแหน ง (reference) ของอาเรย ไปแทน public public static static void void main(string[] main(string[] args) args) { double double [] [] data data = new new double[4]; double[4]; data...... double double a = mean( mean( data data ); ); 1 23 9-19 5 "AUGUST" "JULY" "JUNE" "MAY" "APRIL" "MARCH" "FEBRUARY" "JANUARY" 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 17 "SEPTEMBER" "DECEMBER" "NOVEMBER" "OCTOBER" public public static static double double mean(double[] mean(double[] x) x) {... x... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 18 ถ าอยากร ขนาดของอาเรย เต ม.length ตามหละงช ออาเรย public class Array2 { public static void main(string [] [] args) { int int [] [] data = new new int[100]; System.out.println( sum(data) ); ); public static int int sum(int [] [] d) d) { int int sum sum = 0; 0; for(int i = 0; 0; i < d.length; i++) sum sum += += d[i]; return sum; อย าจ าสละบกะบความยาว String ซ งใช.length() เพรา เป นเมท อด 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 19 โปรแกรมนะบความถ ตะวอะกษรต างๆ import import jlab.jlabio; jlab.jlabio; import import java.io.*; java.io.*; public public class class CountChars CountChars { public public static static void void main(string[] main(string[] args) args) throws throws IOException IOException { String String txt; txt; int[] int[] freq freq = new new int[26]; int[26]; BufferedReader BufferedReader in in = JLabIO.openFile(JLabIO.readString(">")); while while ((txt ((txt = in.readline()) in.readline())!=!= null) null) { int int txtlen txtlen = txt.length(); txt.length(); for for (int (inti = 0; 0; i < txtlen; txtlen; i++) i++) { char charc = Character.toUpperCase(txt.charAt(i)); if if ('A' ('A' <= <= c && && c <= <= 'Z') 'Z') freq[c freq[c - 'A']++; 'A']++; for for (int (inti = 0; 0; i < freq.length; freq.length; i++) i++) { if if (freq[i] (freq[i] > 0) 0) System.out.println((char)('A' + i) i) + " --> -->" + freq[i]); freq[i]); in.close(); in.close(); ในจาวา char charเป นจ านวนเต มแบบ ไม ต ดลบด วย... (unsigned integer)... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 20

เมท อดหาค าเฉล ย ค าเบ ยงเบน public static double mean(double[] x) x) { double sum sum = 0.0, 0.0, m = 0.0; 0.0; if if (x.length > 0) 0) { n for for (int (int i = 0; 0; i < x.length; i++) i++) 1 sum sum += += x[i]; x = x[i]; x i n m = sum sum / x.length; i= 1 return m; m; public static double stddev(double[] x) x) { double dev dev = 0; 0; double sumsq, m = mean(x); if if (x.length > 1) 1) { n for for (int (int i = 0; 0; i < x.length; i++) i++) ( ) 2 xi x sumsq sumsq += += (x[i] (x[i] - m) m) * (x[i] (x[i] - m); m); dev dev = sum sum / (x.length - 1); 1); s = i= 1 n 1 return dev; dev; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 21 การค นข อม ลแบบล าดะบ Requirement เมท อดเพ อการค นข อม ลในอาเรย Analysis ระบ data เป นอาเรย ของจ านวนเต ม ระบ key เป นจ านวนเต มท ต องการค นในอาเรย ค น index ตะวหน งของ data ท ข อม ลม ค าเท ากะบ key แต ถ าไม ปรากฏ key ใน data ให ค นค า -1 ใช ว ธ การค นแบบล าดะบ (sequential search) public public static static int int seqsearch( seqsearch( int int [] [] data, data, int int key key ) 0 1 2 3 4 5 6 data 23 2 3 14 5 99 9 key 5 เร ยก seqsearch(data, key) จ ได 4 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 22 การค นข อม ลแบบล าดะบ public public static static int int sequentialsearch( int int [] [] data, data, int int key key ) key data 5 i data[i] data[i] == key 0 23 false 1 2 false 2 3 false 3 14 false 4 5 true return i 0 1 2 3 4 5 6 23 2 3 14 5 99 9 i data[i] data[i] == key 0 23 false 1 2 false 2 3 false 3 14 false 4 5 false 5 99 false 6 9 false 7 return -1 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 23 key 8 ผะงงานการค นข อม ลแบบล าดะบ seqsearch (data, key) i = 0 (i < data.length) && (data[i]!= key) true i ++ i >= data.length return i true false i = -1 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 24

เมท อดการค นข อม ลแบบล าดะบ public class class TestSeqSearch { public static int int seqsearch(int[] data, data, int int key) key) { int int i = 0; 0; while while (i (i < data.length && && data[i]!=!= key) key) { i++; i++; if if (i (i >= >= data.length) i = -1; -1; return i; i; // // main main is is used used for for testing public static void void main(string[] args) args) { int[] int[] data data = {23, {23, 2, 2, 3, 3, 14, 14, 5, 5, 99, 99, 9; 9; System.out.println(seqSearch(data, 5)); 5)); System.out.println(seqSearch(data, 8)); 8)); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 25 การค นข อม ลแบบล าดะบ (ถอยหละง) public public static static int int sequentialsearch( int int [] [] data, data, int int key key ) key data 5 i data[i] data[i] == key 6 9 false 5 99 false 4 5 true return i 0 1 2 3 4 5 6 23 2 3 14 5 99 9 i data[i] data[i] == key 6 9 false 5 99 false 4 8 false 3 14 false 2 3 false 1 2 false 0 23 false -1 return i 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 26 key 8 ผะงงานการค นข อม ลแบบล าดะบ (ถอยหละง) เมท อดการค นข อม ลแบบล าดะบ (ถอยหละง) seqsearch (data, key) i = data.length 1 ( i >=0 ) && (data[i]!= key) true i return i false public class class TestSeqSearch { public static int int seqsearch(int[] data, data, int int key) key) { int int i = data.length - 1; 1; while while (i (i >= >= 0 && && data[i]!=!= key) key) { i--; i--; return i; i; // // main main is is used used for for testing public static void void main(string[] args) args) { int[] int[] data data = {23, {23, 2, 2, 3, 3, 14, 14, 5, 5, 99, 99, 9; 9; System.out.println(seqSearch(data, 5)); 5)); System.out.println(seqSearch(data, 8)); 8)); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 27 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 28

เข ยนได หลายแบบ public static int int seqsearch(int[] data, data, int int key) key) { int int i = data.length; while while (i (i >= >= 0 && && data[i]!=!= key) key) i--; i--; return i; i; public static int int seqsearch(int[] data, data, int int key) key) { int int i; i; for for (i (i = data.length - 1; 1; i >= >= 0 && && data[i]!=!= key; key; i--) i--) ; return i; i; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 29 อย าล กเล นมาก public static int int seqsearch(int[] data, data, int int key) key) { int int i = data.length - 1; 1; while while (data[i]!=!= key key && && i >= >= 0) 0) i--; i--; return i; i; ตรวจสอบ i >= 0 หละงการตรวจสอบ data[i]!= key public static int int seqsearch(int[] data, data, int int key) key) { int int i = data.length - 1; 1; while while (i-- (i-- >= >= 0 && && data[i]!=!= key) key) ; return i; i; i ถ กลดค าก อนท จ ใช data[i] public static int int seqsearch(int[] data, data, int int key) key) { int int i = data.length - 1; 1; while while (i (i >= >= 0 && && data[i--]!=!= key) key) ; return i; i; i ถ กลดค าท กคระ งหละงเปร ยบเท ยบ return i จ ให ผลผ ด 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 30 การหาต าแหน งท ม ค ามากส ด Requirement เมท อดเพ อการหาต าแหน งท ม ค ามากส ดในอาเรย Analysis ระบ data เป นอาเรย ของจ านวนเต ม ค น index ของอาเรย ท ม ค าไม น อยกว าค าใดๆ ในอาเรย ใช ว ธ การหาค ามากส ดแบบล าดะบ public public static static int int max( max( int int [] [] data data ) data 0 1 2 3 4 5 6 23 2 3 14 5 99 9 เร ยก max(data) จ ได 5 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 31 เมท อดการหาต าแหน งท ม ค ามากส ด public class class TestMax { public static int int max(int[] data) data) { return max(data, data.length); // // find find the the max max among among the the first first k elements elements in in the the array array public static int int max(int[] data, data, int int k) k) { int int m = -1; -1; if if (k (k <= <= data.length && && k > 1) 1) { m = 0; 0; for for (int (int i = 1; 1; i < k; k; i++) i++) if if (data[m] < data[i]) m = i; i; return m; m; public public static static void void main(string[] main(string[] args) args) { int[] int[] data data = {23, {23, 2, 2, 3, 3, 14, 14, 5, 5, 99, 99, 9; 9; System.out.println(max(data)); System.out.println(max(new int[0])); int[0])); // // zero zero size size array array 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 32

การเร ยงล าดะบข อม ล Requirement เมท อดเพ อการเร ยงล าดะบข อม ลในอาเรย Analysis ระบ data เป นอาเรย ของจ านวนเต ม จะดล าดะบข อม ลใน data ให เร ยงล าดะบจากน อยไปมาก data[0] <= data[1] <= data[2] <=... ใช ว ธ การเร ยงล าดะบแบบเล อก (selection sort) public public static static void void selectionsort( selectionsort( int int [] [] data data ) data data 0 1 2 3 4 5 6 23 2 3 14 5 99 9 2 3 5 9 14 23 99 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 33 ก อน หละง การเร ยงล าดะบแบบเล อก มองอาเรย เป นสองส วน ส วนขวา เร ยงเสร จแล ว ส วนซ าย ยะงไม เร ยง ส วนซ าย หาตะวท ม ค ามากส ด สละบกะบตะวส ดท าย หละงสละบ ส วนซ ายลดหน งตะว ส วนขวาเพ มหน งตะว เร มจากไม ม ส วนขวา หามากส ด + สละบ ไปจน กร ทะ งส วนซ ายเหล อตะว เด ยว ก เสร จ 23 2 3 14 5 99 9 23 2 3 14 5 9 99 23 2 3 14 5 9 99 2 3 14 5 23 99 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 34 9 9 9 9 2 3 14 5 23 99 2 3 5 14 23 99 2 3 5 14 23 99 5 2 3 9 14 23 99 5 2 3 9 14 23 99 3 2 5 9 14 23 99 3 2 5 9 14 23 99 2 3 5 9 14 23 99 ผะงงานการเร ยงล าดะบแบบเล อก selectionsort (data) k = data.length k > 1 true i = max(data,k) return false swap data[i] and data[k-1] k 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 35 เมท อดการเร ยงล าดะบแบบเล อก public public class class TestSort TestSort { public public static static void void selectionsort(int[] data) data) { int int i, i, t; t; for for (int (intk = data.length; data.length; k > 1; 1; k--) k--) { i = max(data, max(data, k); k); t = data[i]; data[i]; data[i] data[i] = data[k data[k - 1]; 1]; data[k data[k- 1] 1] = t; t; public public static static void void main(string[] main(string[] args) args) { int[] int[] data data = {23, {23, 2, 2, 3, 3, 14, 14, 5, 5, 99, 99, 9; 9; selectionsort(data); printarray(data); public public static static void void printarray(int[] data) data) { for for (int (inti = 0; 0; i < data.length; data.length; i++) i++) System.out.print(data[i] + " "); "); System.out.println(); public public static static int int max(int[] max(int[] data, data, int int k) k) {...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 36

Arrays.binarySearch ของ Java API ค นข อม ล (ข อม ลในอาเรย ต องเร ยงล าดะบแล ว) int int binarysearch(byte[] a, a, byte byte key) key) int int binarysearch(short[] a, a, short short key) key) int int binarysearch(int[] a, a, int int key) key) int int binarysearch(long[] a, a, long long key) key) int int binarysearch(float[] a, a, float float key) key) int int binarysearch(double[] a, a, double key) key) int int binarysearch(char[] a, a, char char key) key) import import java.util.arrays; public public class class TestSort TestSort { public public static static void void main(string[] main(string[] args) args) { int[] int[] data data = {2, {2, 3, 3, 5, 5, 9, 9, 14, 14, 23, 23, 99; 99; System.out.println(Arrays.binarySearch(data, 5)); 5)); System.out.println(Arrays.binarySearch(data, 8)); 8)); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 37 Arrays.equals ของ Java API ตรวจว าอาเรย สองแถวม ค าเท ากะนหร อไม boolean equals(boolean[] a, a, boolean[] b) b) boolean equals(byte[] a, a, byte[] b) b) boolean equals(short[] a, a, short[] b) b) boolean equals(int[] a, a, int[] int[] b) b) boolean equals(long[] a, a, long long [] [] b) b) boolean equals(float[] a, a, float float [] [] b) b) boolean equals(double[] a, a, double [] [] b) b) boolean equals(char[] a, a, char char [] [] b) b) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 38 Arrays.fill ของ Java API เต มค าเร มต นให ช องต างๆ เท ากะบค าท ก าหนดให void void fill(boolean[] a, a, boolean val) val) void void fill(byte[] a, a, byte byte val) val) void void fill(short[] a, a, short short val) val) void void fill(int[] a, a, int int val) val) void void fill(long[] a, a, long long val) val) void void fill(float[] a, a, float float val) val) void void fill(double[] a, a, double val) val) void void fill(char[] a, a, char char val) val) void void fill(boolean[] a, a, int int from, from, int int to, to, boolean val) val) void void fill(byte[] a, a, int int from, from, int int to, to, byte byte val) val) void void fill(short[] a, a, int int from, from, int int to, to, short short val) val) void void fill(int[] a, a, int int from, from, int int to, to, int int val) val) void void fill(long[] a, a, int int from, from, int int to, to, long long val) val) void void fill(float[] a, a, int int from, from, int int to, to, float float val) val) void void fill(double[] a, a, int int from, from, int int to, to, double val) val) void void fill(char[] a, a, int int from, from, int int to, to, char char val) val) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 39 Arrays.sort ของ Java API เร ยงล าดะบข อม ล void void sort(boolean[] a) a) void void sort(byte[] a) a) void void sort(short[] a) a) void void sort(int[] a) a) void void sort(long[] a) a) void void sort(float[] a) a) void void sort(double[] a) a) void void sort(char[] a) a) void void sort(boolean[] a, a, int int from, from, int int to) to) void void sort(byte[] a, a, int int from, from, int int to) to) void void sort(short[] a, a, int int from, from, int int to) to) void void sort(int[] a, a, int int from, from, int int to) to) void void sort(long[] a, a, int int from, from, int int to) to) void void sort(float[] a, a, int int from, from, int int to) to) void void sort(double[] a, a, int int from, from, int int to) to) void void sort(char[] a, a, int int from, from, int int to) to) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 40

System.arraycopy ของ Java API อาเรย หลายม ต (Multidimensional Array) copy ข อม ลจากอาเรย ไปยะงอ กอาเรย หน ง public class class ArrayCopy { public static void void main(string[] args) args) { int[] int[] a = {23, {23, 2, 2, 3, 3, 14, 14, 5, 5, 99, 99, 9; 9; int[] int[] b = new new int[4]; System.arraycopy(a, 2, 2, b, b, 0, 0, 3); 3);...... src srcpos dest destpos length a b 0 1 2 3 4 5 6 23 2 3 14 5 99 9 3 14 5 0 int int [] [] a = new new int[7]; a[2] a[2] = 3; 3; 0 1 2 3 4 5 6 a 0 0 3 0 0 0 0 int int [][] [][] b = new new int[3][5]; b[1][3] = 4; 4; b 0 1 2 3 4 0 0 0 0 0 0 1 0 0 0 4 0 2 0 0 0 0 0 หน งม ต (vector) สองม ต (matrix) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 41 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 42 Initializer List อาเรย ของอาเรย int int [][] [][] b = { {1, {1, 2, 2, 3, 3, 4, 4, 5, 5, {5, {5, 4, 4, 3, 3, 2, 2, 1, 1, {10, {10, 20, 20, 30, 30, 40, 40, 50 50 ; ; b 0 1 2 3 4 0 1 2 3 4 5 1 5 4 3 2 1 2 10 20 30 40 50 b 0 1 2 0 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 int int [][] [][] b = new new int[3][5]; b 0 1 2 int int [][] [][] b; b; b = new new int[3][]; b[0] b[0] = new new int[5]; b[1] b[1] = new new int[5]; b[2] b[2] = new new int[5]; 0 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 43 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 44

เมท อดแสดงค าในอาเรย สองม ต public class TestPrintArray2 { public static void main(string[] args) { int[][] b = {{1, 2, 2, 3, 3, 4, 4, 5, 5, {5, {5, 4, 4, 3, 3, 2, 2, 1, 1, {10, 20, 20, 30, 30, 40, 40, 50; printarray2(b); public static void printarray2(int[][] a) a) { for for (int i = 0; 0; i < a.length; i++) { for for (int j = 0; 0; j < a[i].length; j++) System.out.print(a[i][j] + "\t "\t "); "); System.out.println(); JLab>java JLab>java TestPrintArray2 TestPrintArray2 1 2 3 4 5 5 4 3 2 1 10 10 20 20 30 30 40 40 50 50 JLab> JLab> 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 45 การบวกเมทร กซ Requirement เมท อดส าหระบการบวกเมทร กซ Analysis ระบ a แล b เป นอาเรย สองม ต ของ int ค นอาเรย สองม ต ซ งเป นผลบวกของ a กะบ b c ij = a ij + b ij 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 46 เมท อดส าหระบการบวกเมทร กซ public class class TestAddMatrices { public static void void main(string[] args) args) { int[][] b = {{1, {{1, 2, 2, 3, 3, 4, 4, 5, 5, {5, {5, 4, 4, 3, 3, 2, 2, 1, 1, {10, {10, 20, 20, 30, 30, 40, 40, 50; 50; printarray2(addmatrices(b, b)); b)); public static int[][] addmatrices(int[][] a, a, int[][] b) b) { int[][] c = new new int[a.length][a[0].length]; for for (int (int i = 0; 0; i < a.length; i++) i++) for for (int (int j = 0; 0; j < a[i].length; j++) j++) c[i][j] = a[i][j] + b[i][j]; return c; c; public static void void printarray2(int[][] a) a) {...... การค ณเมทร กซ Requirement เมท อดส าหระบการค ณเมทร กซ Analysis ระบ a แล b เป นอาเรย สองม ต ของ int ค นอาเรย สองม ต ซ งเป นผลค ณของ a กะบ b ถ า a ม ขนาด [p x q] แล b ม ขนาด [q x r] ผลค ณของ a x b จ เป นเมทร กซ ขนาด [p x r] c ij = q k = 1 a ik b kj 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 47 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 48

เมท อดส าหระบการค ณเมทร กซ public static int[][] mulmatrices(int[][] a, a, int[][] b) b) { int[][] c = new new int[a.length][b[0].length]; for for (int i = 0; 0; i < a.length; i++) { for for (int j = 0; 0; j < b[i].length; j++) { c[i][j] = 0; 0; for for (int k = 0; 0; k < b.length; k++) { c[i][j] += += a[i][k] * b[k][j]; q c return c; ij = a ik b kj c; k = 1 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 49 จ านวนฟ โบนะกช import jlab.jlabio; public class TestMulMatrices { public static void main(string[] args) { int[][] f1 f1 = {{0, 1, 1, {1, {1, 1; int[][] fn fn = {{0, 1, 1, {1, {1, 1; int int n = JLabIO.readInt("Fibonacci n = "); "); for for (int i = 1; 1; i < n; n; i++) fn fn = mulmatrices(f1, fn); System.out.println("f(" + n + ") ") = " + fn[0][1]); public static int[][] mulmatrices(int[][] a, a, n int[][] b) b) {... f... n 1 f n 0 1 = f n f n + 1 1 1 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 15/7/2002 50

หะวข อ 2110101 : การท าโปรแกรมคอมพ วเตอร Classes & Objects ภาคว ชาว ศวกรรมคอมพ วเตอร จ ฬาลงกรณ มหาว ทยาละย องค ปร กอบของคลาส การปร กาศ การสร าง แล การท าลายออบเจ กต Instance variables Class methods แล object methods Constructor methods ตะวอย าง : คลาส Complex Newton-Raphson Mandelbrot Set 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 2 องค ปร กอบของคลาส class Robot { data data members constructor methods class & object methods จ านวนเช งซ อน จ านวนเช งซ อน z = x + iy x เป นจ านวนจร ง iy เป นจ านวนจ นตภาพ y เป นจ านวนจร ง i = -1 (imaginary unit) conjugate z = x iy 2 2 absolute square : z = zz = ( x + iy)( x iy) = x + y ให z 1 = x 1 + iy 1 แล z 2 = x 2 + iy 2 z 1 + z 2 = (x 1 +x 2 ) + i(y 1 +y 2 ) ได เจออ กเยอ ใน ไฟฟ า เคร องกล โยธา... e iπ = 1 2 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 3 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 4

อยากได จ านวนเช งซ อน จาวาม แต จ านวนจร ง จ านวนเต ม แต ไม ม จ านวนเช งซ อน ต องออกแบบเอง เข ยน class ใหม ช อ Complex เข ยน class = เข ยนน ยามของปร เภทข อม ลแบบใหม เก บจ านวนเช งซ อนหน งจ านวน = เก บจ านวนจร งสอง จ านวน z = x + iy public class class Complex { public double x; x; public double y; y; fields (data members) การปร กาศแล การสร าง public class class Complex { public double x; x; public double y; y; Complex z; z; z = new new Complex(); น ยามของคลาส 0.0 0.0 Complex z; เป นการปร กาศแล สร างตะวแปร z ซ งม ไว อ างอ งเน อท เก บข อม ล ท เป นแบบ Complex z = new Complex(); เป นการสร างเน อท เก บข อม ลท เป นแบบ Complex z เน อท ท ได จาก new x y 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 5 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 6 ศะพท เทคน ค ต ารากะบข าวกะบกะบข าว class ช อ Complex public class class Complex { public double x ; public double y ; ตะวแปรอ างอ ง object ของ class Complex fields (หร อ data members) ของ class ส ตรไข ดาว ไข ดาวท ทอดแล วตามส ตร -- ไข ไก หน งฟอง -- น ามะนคร งถ วย z object reference 0.0 0.0 x y object หน ง (หร อ instance) ของคลาส Complex class บรรยายองค ปร กอบ object ค อของจร งท ถ กสร างข น object ของ class เด ยวกะน แต คนล ก อนกะน ก อาจม รายล เอ ยด ภายในไม เหม อนกะน instance variables 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 7 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 8

ค กก new เป นเสม อนโรงงานสร าง objects new จ สร าง object ใหม ของ class ท ก าหนดให ต องม ตะวแปรคอยระบต าแหน งอ างอ ง object ใหม Complex z1 z1 = new new Complex(); Complex z2 z2 = new new Complex(); Point Point p1 p1 = new new Point(); Rectangle r = new new Rectangle(); z1 z2 p1 r 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 9 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 10 ขย Object ท ถ กสร างข น แต ไม ม ตะวแปรใดอ างอ ง เน อท ส ญเปล า ร บบจาวาจ "เก บขย " น าเน อท เหล าน ไปใช ใหม Complex z1 z1 = new new Complex(); // // #1 #1...... z1 z1 = new new Complex(); // // #2 #2 z1 z1 การสร างแล ท าลาย object สร างโดยใช new ท าลายโดยอย าให ม ตะวแปรใดไปอ างอ งถ ง Complex [] [] za za = new new Complex[4]; for(int i=0; i=0; i< i< za.length; i++) i++) { za[i] za[i] = new new Complex(); za[2] za[2] = null; null; null nullเป นค าคงตะวพ เศษแทน za[3] za[3] = new new Complex(); object object reference ท ไม ได อ างอ งอ ไร za 0 1 2 3 za 0 1 2 3 #1 #1 #2 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 11 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 12 ขย ขย

การใช Instance Variables instance variables ค อตะวแปรต างๆ ภายในของ object ท ได ถ กสร างข น อยากจ ใช ให เข ยนในร ป object. variablename public class class Complex { public double x; x; public double y; y; Complex z = new new Complex(); z.x z.x = 4; 4; z.y z.y = 9.8; 9.8; z 4.0 9.8 x y การให ค าเร มต นกะบ instance variable public class class Complex { public double x; x; public double y; y; ปกต เม อ object หน งถ กสร างข น จ ม การให ค า 0 แล false กะบ instance variables ต างๆ ของ object ท เป นปร เภทจ านวน แล boolean ตามล าดะบ public class class Complex { public double x = 1.0; 1.0; public double y = 0.0; 0.0; ใส ค าเร มต นเองก ได เช นเด ยวกะบการตะ งค าเร มต น ของตะวแปรภายในเมท อด 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 13 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 14 Methods ออกแบบคลาสเพ อบรรยายละกษณ ของคลาส fields บรรยายละกษณ ของ object methods บรรยายบร การท ม ให กร ท ากะบ object คลาส Complex fields : x แล y แทนจ านวนจร งแล จ นตภาพ methods : หา absolute หา congujate หาผลบวกของจ านวนเช งซ อนสองจ านวน sort ข อม ลใน array ของ int ท ก าหนดให ไม เก ยว Class Methods vs. Object Methods ออกแบบเมท อดให ผ อ นเร ยกใช ได สองว ธ class methods classname.methodname(...) double a = Complex.abs(z1); Complex z2 z2 = Complex.conjugate(z1); Complex z3 z3 = COmplex.add(z2, z1); z1); object methods objectname.methodname(...) double a = z1.abs(); Complex z2 z2 = z1.conjugate(); Complex z3 z3 = z2.add(z1); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 15 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 16

ย อนอด ต เคยใช class methods มาแล ว Math.sqrt(x) JLabIO.readInt( ) Array.equals(a, b) public static void main( String [] args )... เคยใช object methods มาแล ว str.touppercase() in.readline() System.out.println( msg )... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 17 Class Methods public class class Complex { public double x; x; public double y; y; บรรยายคลาส Complex public static double abs( abs( Complex z ) { return Math.sqrt( z.x z.x * z.x z.x + z.y z.y * z.y z.y ); ); public class class Test Test { public static void void main( main( String [] [] args args ) { double a = JLabIO.readDouble("real part part : "); "); double b = JLabIO.readDouble("imag part part : "); "); Complex z = new new Complex(); z.x z.x = a; a; สร าง z.y z.y = b; สร าง object แล ใช method ของ ของ Complex b; System.out.println( Complex.abs(z) ); ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 18 Object Methods public class class Complex { public double x; x; ตะดค าว า static ท ง ท ง ก ก public double y; y; หมายถ ง object method public static double abs( abs( ) { return Math.sqrt(this.x*this.x + this.y*this.y); this this ใช อ างถ ง object ท ถ ก ท ถ ก เร ยกให มาท างานท เมท อด public class class Test Test { public static void void main( main( String [] [] args args ) { double a = JLabIO.readDouble("real part part : "); "); double b = JLabIO.readDouble("imag part part : "); "); Complex z = new new Complex(); z.x z.x = a; a; z.y z.y = b; b; System.out.println( z.abs() ); ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 19 Class Methods vs Object Methods class method ม ค าว า "static" ก ากะบท ห ว method object method ไม ม ค าว า "static" ก ากะบ เร ยก class methods ใช ช อคลาสน า เร ยก object methods ใช ช อออบเจกต น า ค าถาม : บรรทะดใดข างล างน เร ยกใช class method System.getProperties( ) Math.random( ) JLabIO.format( x, 5, 2 ) a.compareto(b) rectangle.setsize( w, h ) Math.PI การตะ งช ออย างม ร บบจ ช วยให เข าใจ โปรแกรมได ด ข น 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 20

ตะวอย าง Object Methods ของ Complex public class class Complex { public double x, x, y; y; // // data data members public double abs( abs( ) { return Math.sqrt(this.x*this.x + this.y*this.y); public Complex conjugate() { Complex zbar zbar = new new Complex(); zbar.x = this.x; zbar.y = -(this.y); z = x iy return zbar; zbar; public Complex add( add( Complex z ) { Complex sumz sumz = new new Complex(); sumz.x = this.x + z.x; z.x; sumz.y = this.y + z.y; z.y; return sumz; z sumz; 11 + z 22 = (x (x 11 +x +x 22 )) + i(y i(y 11 +y +y 22 )) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 21 Object Method ท ควรม : tostring tostring ม ไว แปลงข อม ลภายใน object (instance variables) ให เป น String ท คนอ านเข าใจ โดยทะ วไปใช เพ อท าให แสดงผลได ส ดวก เพรา ว า System.out.println( z ) จ เร ยก z.tostring() โดยอะตโนมะต public class class Complex { public double x, x, y; y;...... public String tostring() { return "(" "(" + this.x + ", ", i" i" + this.y + ")"; ")";...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 22 Object Method ท ควรม : equals ทดสอบ obj1 == obj2 หมายความว า obj1 แล obj2 เป น object เด ยวกะนหร อไม ทดสอบ obj1.equals( obj2 ) หมายความว า object obj1 "เท ากะบ" object obj2 หร อไม ความหมายของการ "เท ากะน" ของ object นะ นข น กะบผ ออกแบบ class public class class Complex {... public double... x, x, y; y; public...... boolean equals( Complex z ) { public Complex boolean z = new equals( new Complex(); Complex z ) { System.out.println( return this.x == == z.x z.x z && && ); this.y ); == == z.y; z.y; System.out.println( z.tostring() ); );... equals ตามกฏในจาวาจ จ กจ กกว าน 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 23 ข อสะงเกต เร ยกใช instance variable object.variable เร ยกใช object method object.method(... ) ต างกะนตรงท ม วงเล บหร อไม public class class Complex { public double x, x, y; y;...... public String tostring() { return "(" "(" + this.x + ", ", i" i" + this.y + ")"; ")";... Complex... z1 z1 = new new Complex();...... double p = z1.x; z1.x; String s = z1.tostring(); double q = z1.x(); // // WRONG WRONG String t = z1.tostring; // // WRONG WRONG System.out.println( "what "what am am I?"?" ); ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 24

ย อนอด ต String แล array เป น object String ม เมท อด length() array ม instance variable ช อว า length String s = "Hi "Hi Ho Ho Hi Hi Ho; Ho; int int a = new new int[100]; System.out.println( s.length() ); ); System.out.println( a.length ); ); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 25 Constructor Methods เป นเมท อดพ เศษของคลาส ซ งร บบเร ยกใช โดย อะตโนมะต หละง new คลาสนะ น ม ไว เพ อตะ งค าเร มต นให กะบ instance variables ของ object ใหม ซ งเพ งถ กสร าง เป นเมท อดพ เศษ ช อต องเหม อนช อ class ต องไม ร บ return type ของเมท อด public class class Complex { public double x, x, y; y; public Complex( ) { this.x = 0.0; 0.0; this.y = 0.0; 0.0; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 26 Constructor Methods Overload ได ด วยการก าหนดรายการของพารา ม เตอร ท แตกต างกะน public class class Complex { public double x, x, y; y; Complex Complex z1 z1 = new new Complex(); Complex(); public Complex( ) { Complex Complex z2 z2 = new new Complex(2, Complex(2, 3.5); 3.5); Complex this.x = 0.0; Complex z3 z3 = new new Complex( Complex( z2 z2 ); ); 0.0; this.y = 0.0; 0.0; public Complex( double x1, x1, double y1 y1 ) { this.x = x1; x1; this.y = y1; y1; public Complex( Complex z ) { this.x = z.x; z.x; this.y = z.y; z.y; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 27 Constructor Methods Constructor เร ยกกะนเองได โดยใช this public class class Complex { public double x, x, y; y; public Complex( ) { Complex(0, 0); 0); // // WRONG WRONG public Complex( double x1, x1, double y1 y1 ) { this.x public = x1; x1; class class Complex { this.y public = y1; y1; double x, x, y; y; public Complex( ) { this(0, 0); 0); // // CORRECT public Complex( double x1, x1, double y1 y1 ) { this.x = x1; x1; this.y = y1; y1; 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 28

เร องน าร Utility class ค อคลาสท ม แต class methods (เช น Math.*, Arrays.*, JLabIO.* ) คลาสไม จ าเป นต องม เมท อด main เม อเป นคลาสท ผ ใช ไม ได เร ยกใช งานโดยตรง ถ าคลาสไม ม constructor ร บบจ เต มให แบบไม ม การระบพาราม เตอร ตะ งช อคลาสเป น noun ตะ งช อเมท อดเป น verb ตะด this. ท งก ได public public class class Complex Complex { public public double double x, x, y; y;...... public publicboolean booleanequals( equals( Complex Complexz ) { return return x == == z.x z.x && && y == == z.y; z.y; ตะวอย าง : หารากด วย Newton-Raphson ต องการหารากของสมการ f(x) = 0 หาได เฉพา รากท เป นจ านวนจร ง ว ธ ของ Newton-Raphson ต องร อน พะนธ ของ f(x) ถ า x k ค อค าปร มาณของราก จ สามารถค านวณค า ปร มาณของราก (ท ด กว า) x k+1 ดะงน x k + 1 = x k f ( xk ) f ( x ) k 0 x 1 x2 x 0 f(x) x 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 29 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 30 Class NewtonRaphson public public class class NewtonRaphson NewtonRaphson { public public static static double double f (double (double x) x) { return returnx * x + 4 * x + 4; 4; 2 f ( x) = x + 4x + 4 public public static static double double df df (double (double x) x) { return return2 * x + 4; 4; f ( x) = 2x + 4 public public static static void void solve solve (double (double xnew, xnew, double double tol, tol, int int imax) imax) { double double xold; xold; int int i; i; for for (i (i = 0; 0; i < imax; imax; i++) i++) { f ( x k ) x xold xold = xnew; k + 1 = xk xnew; f ( x xnew xnew = xold xold - f(xold) f(xold) / df(xold);; k ) df(xold);; System.out.println("x = " + xnew); xnew); if if (Math.abs(xnew (Math.abs(xnew - xold) xold) < tol) tol) break; break; if if (i (i >= >= imax) imax) System.out.println("not converge"); converge"); public public static static void void main(string[] main(string[] args) args) { solve(0, solve(0, 1e-10, 1e-10, 100); 100); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 31 หาราก (เป นจ านวนเช งซ อนได ) เข ยนคลาส Complex ให ม data members : x แล y constructor object methods : add, subtract, multiply, divide, abs, tostring เข ยนคลาส NewtonRaphsonComplex 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 32

Class Complex public public class class Complex Complex { public public double double x, x, y; y; public public Complex(double Complex(double x1, x1, double double y1) y1) { x = x1; x1; y = y1; y1; public public String String tostring() tostring() { if if (y (y >= >= 0) 0) return return "(" "(" + x + " + i" i" + y + ")"; ")"; else else return return "(" "(" + x + " - i" i" + (-y) (-y) + ")"; ")"; public public Complex multiply(complex z) z) { return returnnew newcomplex(x * z.x z.x- y * z.y, z.y, x * z.y z.y + y * z.x); z.x); public public Complex Complex divide(complex divide(complex z) z) { double double abs2 abs2 = z.x z.x * z.x z.x + z.y z.y * z.y; z.y; return return new new Complex((x Complex((x * z.x z.x + y * z.y) z.y) / abs2, abs2, (z.x (z.x* y - z.y z.y * x) x) / abs2); abs2); public public double double abs( abs( ) { return returnmath.sqrt(x * x + y * y); y); เข ยนเมท อด add แล subtract เอง...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 33 Class NewtonRaphsonComplex public public class class NewtonRaphsonComplex { public public static static Complex Complex f(complex f(complex x) x) { Complex Complex two two = new new Complex(2, Complex(2, 0); 0); Complex Complex c1 c1 = x.multiply(x); x.multiply(x); Complex Complex c2 c2 = x.multiply(two); return return c1.add(c2.add(two)); public public static static Complex Complex df(complex df(complex x) x) { Complex Complex two two = new new Complex(2, Complex(2, 0); 0); Complex Complex c2 c2 = x.multiply(two); return return c2.add(two); c2.add(two); 2 f ( x) = x + 2x + 2 f ( x) = 2x + 2 ยะงม ต อ... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 34 Class NewtonRaphsonComplex Edit + Compile + Run...เข ยนต อ public public static static void void solve(complex solve(complex xnew, xnew, double double tol, tol, int int imax) imax) { Complex Complex xold, xold, temp; temp; int int i; i; for for (i (i = 0; 0; i < imax; imax; i++) i++) { xold xold = xnew; xnew; temp temp = f(xold).divide(df(xold)); xnew xnew = xold.subtract(temp); System.out.println("x = " + xnew); f ( x xnew); k ) temp temp = xnew.subtract(xold); x k + 1 = xk if if (temp.abs() (temp.abs() < tol) tol) break; f ( xk ) break; if if (i (i >= >= imax) imax) System.out.println("not converge"); converge"); public public static static void void main(string[] main(string[] args) args) { solve(new solve(new Complex(1, Complex(1, 3), 3), 1e-10, 1e-10, 100); 100); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 35 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 36

ค าถาม Complex c1 c1 = new new Complex(5,0); Complex c2 c2 = new new Complex(4,0); Complex c3 c3 = new new Complex(3,0); Complex c4 c4 = c1.add(c2).subtract(c3); Complex c5 c5 = c1.multiply(c2).add(c3); Complex c6 c6 = c1.add(c2).multiply(c3); Complex c7 c7 = c1.add( c2.multiply(c3) ); ); c4, c4, c5, c5, c6, c6, c7 c7 =? public Complex {...... public Complex sqr( sqr( ) { return ;...... จงเข ยนเมท อดยกก าละงสองในคลาส Complex โดยการใช เมท อด multiply 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 37 Mandelbrot Set (อ กคระ ง) ให ล าดะบของจ านวน เช งซ อน d n ค านวณได จาก d n = (d n-1 ) 2 +c โดยท d 0 = 0+i0 = 0 แล c เป นจ านวนเช งซ อน c เป นสมาช กของ Mandelbrot set ถ าล าดะบ ของ d n ล เข าหาค าคงตะว แกน x แทนเส นจ านวนจร ง แกน y แทนเส นจ านวนจ นตภาพ จ ดด าในร ปค อสมาช กของ Mandelbrot set 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 38 โปรแกรมแสดง Mandelbrot set public public void void paint(graphics paint(graphics g) g) { int int n; n; Complex Complex c, c, d; d; double double stepx stepx = 3.0 3.0 / getsize().width; double double stepy stepy = 3.0 3.0 / getsize().height; for for (double y = -1.5; -1.5; y <= <= 1.5; 1.5; y += += stepy) stepy) { for for (double (doublex = -2.0; -2.0; x <= <= 1.0; 1.0; x += += stepx) stepx) { c = new new Complex(x, Complex(x, y); y); d = new new Complex(0, Complex(0, 0); 0); d n = 0; d n 0; n < 2 while while (d.abs() (d.abs() < 2 && && n++ n++ < 256) 256) { d = d.multiply(d).add(c); d n = n (d (d n-1 ) n-1 ) 2 2 + c if if (n (n >= >= 256) 256) { g.drawrect((int)((x + 2) 2) / stepx), stepx), (int)((y (int)((y + 1.5) 1.5) / stepy), stepy), 1, 1, 1); 1); แบบฝ กหะด : อยากได คลาส "Rational" Rational เป นคลาสเก บเลขตรรกย ต.ย. 3/4, 15/7, 8/1 ม สอง fields : numerator แล denominator ต.ย. 15/7 ม numerator เป น 15 แล denominator เป น 7 ม เมท อดดะงน add, subtract, multiply, divide, tostring, แล equals ควรเก บแบบลดร ป เช น 4/8 ควรเก บเป น 1/2 public public class class Rational Rational { public public int int numerator; numerator; public public int int denominator; denominator;...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 39 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 40

หะวข อ 2110101 : การท าโปรแกรมคอมพ วเตอร Composition & Inheritance ภาคว ชาว ศวกรรมคอมพ วเตอร จ ฬาลงกรณ มหาว ทยาละย Composition Inheritance subclass แล superclass Overriding vs. Overloading class Object Inheritance Hierarchy upcasting แล downcasting Composition vs. Inheritance 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 2 เม อต องการสร างคลาสใหม ค ดถ ง คลาสเก าท เคยเข ยน คลาสมาตรฐานของร บบจาวา ค นจาก j2sdk help file (ม ~ 3000 คลาส) คลาสท คนอ นเข ยนแล อน ญาตให ใช ค นในอ นเตอร เน ต (JNL, JSci, JLAPACK, JEdit, Lucene,...) คลาสท ขายในท องตลาด น ามาใช ด วยว ธ copy & change source code (โบราณ) composition inheritance avoid reinventing the the wheel เล อกของด well defined carefully tested well documented portable highly rated open source Reusability Rapid Application Development 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 3 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 4

Composition สร างคลาสใหม ท ปร กอบด วย fields ท เป น objects ของคลาสอ น เข ยน methods ของคลาสใหม โดยใช fields แล methods ขององค ปร กอบภายในให เป นปร โยชน รายล เอ ยดของ methods ใหม เป นเสม อน "กาว" ท น าของท ม อย มาป ต ดกะนให ได ส งปร ด ษฐ ใหม ๆ อยากได "ส เหล ยมท วาดได " อยากได คลาส DrawableRect (ม ส ด วย) ซ งม เมท อด equals( DrawableRect r ) : ทดสอบว า r เหม อน this? draw( Graphics g ) : วาด this? เข ยนใหม หมด (หาเร อง) ใช คลาสมาตรฐานของจาวา Rectangle, Color Rectangle ม สมาช ก: fields : x, y, width, height methods : add, contains, equals, getwidth, getheight, grow, intersection, intersects, move, tostring, union,... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 5 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 6 Composition สร างคลาสใหม ปร กอบด วย fields ออบเจกต ของคลาส Rectangle ออบเจกต ของคลาส Color dr rect object ของคลาส Rectangle color object ของ คลาส Color object ของคลาส DrawableRect Composition import import java.awt.*; java.awt.*; public public class class DrawableRect DrawableRect { public public Rectangle Rectangle rect; rect; public public Color Color color; color; ปร กอบด วยออบเจกต ของ คลาส Rectangle แล Color public public DrawableRect(int x, x, int int y, y, int int w, w, int int h, h, Color Color c) c) { this.rect this.rect = new new Rectangle(x, Rectangle(x, y, y, w, w, h); h); this.color this.color = c; c; public public boolean boolean equals(drawablerect r) r) { if if (r (r == == null) null) return return false; false; return return this.rect.equals(r.rect) && && this.color.equals(r.color); public public void void draw(graphics draw(graphics g) g) { g.setcolor(this.color); g.fillrect(this.rect.x, this.rect.y, this.rect.y, this.rect.width, this.rect.height); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 7 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 8

Inheritance เข ยนคลาสใหม (B) ซ ง "ขยาย" ค ณสมบะต จาก คลาสเก า (A) ท ม อย (class B extends A) เร ยกคลาส B ว า "ระบมรดก" จากคลาส A B ม ท กๆ fields ของ A (โดยอะตโนมะต ) B ม ท กๆ methods ของ A (โดยอะตโนมะต ) (ยกเว น constructors) เร ยก B ว าเป น subclass ของ A เร ยก A ว าเป น superclass ของ B ต ความได ว า B เป นคลาสท เป นกรณ พ เศษของ A ออบเจกต ของ B เป น A แต ออบเจกต ของ A ไม จ าเป นต องเป น B ตะวอย างเช น class Cat extends Mammal 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 9 A B Inheritance : แบบง ายส ดๆ เข ยนคลาสใหม เพ ยงแค บอกว าขยายจากอ กคลาส import java.awt.*; public class class R1 R1 extends Rectangle { เหม อน Rectangle ท กปร การ (ยกเว น constructors) R1 ม fields แล methods ต างๆ ตามท Rectangle ม ไม ม constructor อ ไรเลย ร บบจ เต ม constructor แบบไม ระบพาราม เตอร ให import java.awt.*; public class class R1 R1 extends Rectangle { public R1() R1() { super(); เร ยก constructor ของ superclass 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 10 Inheritance : แบบท ควรท า ก าหนดให คลาสใหม ขยายจากคลาสเก าท ม เพ ม fields ท จ าเป น เข ยน constructors ท อยากให บร การ เพ ม methods ใหม ๆ ท superclass ไม ม เปล ยน methods เด มของ superclass ให ม พฤต กรรมใหม (เร ยกว า overriding method) จาวาไม อน ญาตให ลบ methods ของ superclass ท subclass ไม อยากได 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 11 Inheritance import import java.awt.*; java.awt.*; public public class class DrawableRect DrawableRect extends extends Rectangle Rectangle { public public Color Color color; color; เพ ม field ใหม public public DrawableRect(int x, x, int int y, y, int int w, w, int int h, h, Color Color c) c) { super(x, super(x, y, y, w, w, h); h); this.color this.color = c; c; เข ยน constructor เปล ยน method เด ม public public boolean boolean equals(object equals(object r) r) { if if (!super.equals(r) ) return return false; false; if if ( this.getclass() this.getclass()!=!= r.getclass() r.getclass() ) return return false; false; return return this.color.equals(((drawablerect) r).color); r).color); public public void void draw(graphics draw(graphics g) g) { g.setcolor(this.color); g.fillrect(super.x, super.y, super.y, super.width, super.width, super.height); super.height); เพ ม method ใหม 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 12

การใช fields ของ superclass อ างอ ง fields ของ superclass ได โดยใช super. น าหน าช อ field หร อจ ใช this. น าหน าช อ field ของ superclass ก ได (เพรา "ระบมรดก" มาแล ว) หร อจ ใช แค ช อ field ก ไม ผ ด (เพรา ตะด this. ได ) public public void void draw(graphics draw(graphics g) g) { g.setcolor(this.color); g.fillrect(super.x, super.y, super.y, super.width, super.width, super.height); super.height); public public void void draw(graphics draw(graphics g) g) { g.setcolor(this.color); g.fillrect(this.x, this.y, this.y, this.width, this.width, this.height); เข ยนแบบน this.height); ร ท มา public public void void draw(graphics draw(graphics g) g) { g.setcolor(this.color); g.fillrect(x, g.fillrect(x, y, y, width, width, height); height); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 13 การใช methods ของ superclass อ างอ ง methods เด ม ของ superclass ได โดยใช super. น าหน าช อ method หร อจ ใช this. น าหน าช อ method (ท ไม ได ถ ก overriden) ของ superclass ก ได (เพรา "ระบ มรดก" มาแล ว) public public boolean boolean equals(object equals(object r) r) { if if (!super.equals(r) ) return return false; false; if if ( this.getclass() this.getclass()!=!= r.getclass() r.getclass() ) return return false; false; return return this.color.equals(((drawablerect) r).color); r).color); เร ยก equals ของ superclass เพ อทดสอบว าเป น Rectangle ท เหม อนกะนหร อไม (ตรงน จ ใช this.equals ไม ได เพรา...) 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 14 แบบฝ กหะด เข ยนเมท อด tostring ให กะบ DrawableRect ข อแน น า : ควรใช tostring ของ superclass public class class DrawableRect extends Rectangle {...... public String tostring() { Overriding ไม เหม อน Overloading Overriding เป นการเข ยนเมท อดใน subclass ซ งม ช อ แล รายการพาราม เตอร ปรากฏอย แล วใน superclass (เป นการ "ลบล าง" ของเก าท ม อย ) Overloading เป นการเข ยนเมท อดใหม ซ งม ช อซ า แต รายการพาราม เตอร ไม เหม อนกะบของเด ม (เป นการ "เพ มภาร " ให กะบช อเมท อดว าท างานหลาย แบบ ข นกะบรายการพาราม เตอร ท ได ระบ) public public class class A {...... public public int int f() f() {...... public public class class B extends extends A { public public int int f() f() { // // overriding overriding...... public public int int f(int f(int x) x) { // // overloading overloading...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 15 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 16

คลาส Object Inheritance Hierarchy จาวาม คลาสมาตรฐานช อว า Object (ขอย า ช อ Object น เป นช อคลาส ข นต นด วยโอใหญ ) Student คลาส Object เป น "บรรพบ ร ษ" ของท กคลาสในจาวา การเข ยนคลาสใหม ท ไม ได extends จากคลาสใด ถ อ ได ว า extends จากคลาส Object ArtStudent EngStudent CommStudent Object FreshyEng CPEngStudent CEStudent EEStudent Component String... Exception Complex FreshyEng101...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 17 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 18 การแสดง Inheritance ใน Help File java.lang.object +-JSci.maths.Matrix +-JSci.maths.ComplexMatrix +-JSci.maths.ComplexSquareMatrix +-JSci.maths.ComplexTridiagonalMatrix +-JSci.maths.ComplexDiagonalMatrix แบบฝ กหะด เข ยน inheritance hierarchy ของคลาสต อไปน Quadrilateral, Trapesoid, Parallelogram, Rectangle, แล square Vehicle, Car, Truck, Sedan, Coupe, PrickupTruck, SportUtilityVehicle, Minivan, Bicycle, แล Motocycle Archosaurs, Thecodonts, Pterosaurs, Dinosaurs, Crocodilians, Saurischians, แล Ornithischians 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 19 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 20

Casting ก าหนดให B extends A B ระบพฤต กรรมท กอย างจาก A B "เป น" A (ค อเป นกรณ พ เศษของ A) Upcasting เราสามารถ cast ออบเจกต ของ B ให เป น A ได upcast ได เสมอ Downcasting ออบเจกต ของ B ท เคยถ ก upcast ให เป น A สามารถถ ก cast กละบลงมาเป น B ได ถ า downcast ไม ได จ เก ด ClassCastException A B มาด equals ของ DrawableRect equals ระบออบเจกต ของคลาส Object ดะงนะ น equals น override equals ของ Rectangle ใช super.equals(r) เพ อทดสอบว าเป น Rectangle ท เหม อนกะนหร อไม ใช this.getclass() กะบ r.getclass() เพ อเปร ยบเท ยบว า r เป นคลาสปร เภทเด ยวกะบ this หร อไม ถ าเป นคลาสปร เภทเด ยวกะนจ ได downcast จาก Object มาได เพ อจ ได หย บ color : ((DrawableRect) r).color public boolean equals(object r) r) { if if (!super.equals(r) ) return false; if if ( this.getclass()!=!= r.getclass() ) return false; return this.color.equals(((drawablerect) r).color); 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 21 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 22 แบบฝ กหะด เข ยนคลาส Square โดยใช คลาส Rectangle แบบ Composition Inheritance Fields : x, y ร บ พ กะดตรงกลางส เหล ยมจะต ระส length ร บ ความยาวด าน Methods : boolean contains( int x, int y ) void translate( int dx, int dy ) int getlength( ) int setlength( ) boolean equals( Object s ) String tostring( ) อ านความหมายของ แต ล เมท อดได จาก JDK help file ของ Rectangle 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 23 Composition vs. Inheritance ใช composition เม อเราใช ค ณสมบะต ของคลาสอ น มาเป นส วนปร กอบเพ อออกแบบของใหม เช น รถ "ม " ล อ เคร องยนต หน าต าง ปร ต ดะงนะ นคลาส Car ปร กอบด วย fields ของออบเจกต จาก คลาส Wheel, Engine, Window, Door เป นต น ใช inheritance เม อเราต องการคลาสใหม ซ งเป น กรณ พ เศษของคลาสเด ม จ งต องการค ณสมบะต เด ม ส วนใหญ ของคลาสเก า ม การเปล ยนหร อเพ มเต ม ค ณสมบะต ใหม บ าง เช น น ส ตว ศวฯ จ ฬาฯ "เป น" น ส ตจ ฬาฯ แต ม อ ไรบาง อย างเพ มเต มจากกรณ ทะ วไป ดะงนะ นคลาส EngCUStudent extends CUStudent 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 24

หะวข อ 2110101 : การท าโปรแกรมคอมพ วเตอร packages, import private, public, final, static Error & Exception Handling (Optional) เร องต องร (บ าง) ภาคว ชาว ศวกรรมคอมพ วเตอร จ ฬาลงกรณ มหาว ทยาละย 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 2 Package โปรแกรมจาวาปร กอบด วยคลาสมากมาย ทะ งท เข ยนเอง ของร บบจาวา หร อของคนอ น จ จะดเก บคลาสต างๆ อย างไร ท ไหน แล ม ว ธ ป อง กะนช อซ าได อย างไร จะดเก บคลาสต างๆ ในร ปของ package คลาสท อย ใน package เด ยวกะน ค ออย ใน directory เด ยวกะน jlab JLabIO.class JLabPanel.class ช อ ช อ package มะกข นด วยตะวเล ก ทะ งสองคลาสน อย ใน package jlab 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 3 Package Package ม ล าดะบชะ น : ม subdirectory ได ต องร บ ช อ package ในโปรแกรมด วย somchai j101 ช อแบบเต มยศ package package somchai.j101; somchai.j101; Lab1.class somchai.j101.lab1 public public class class Lab1 Lab1 { Lab2.class somchai.j101.lab2...... j211 Lab1.class somchai.j211.lab1 package package somchai.j211; somchai.j211; Lab2.class somchai.j211.lab2 public public class class Lab1 Lab1 {...... Demo.class somchai.j211.demo อ างอ งช อคลาสแบบเต มยศ public public class class Other Other {...... somchai.j101.lab1 lab101; lab101; somchai.j211.lab1 lab211; lab211;...... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 4

การสร าง Package ใน JLab 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 5 import การใช คลาสท อย นอก package ของตะวเอง เข ยนช อ class รวมทะ ง package ให ครบถ วน หร อใช import ก อน แล วอ างเฉพา ช อคลาสได เลย importแบบร บ ช อคลาส importแบบเหมาหมดท กคลาส import import jlab.jlabio; jlab.jlabio; import import jlab.*; jlab.*; public public class class Happy Happy { public public void void A() A() { public public class class Happy Happy { int intx = JLabIO.readInt(); public public void void A() A() {...... int intx = JLabIO.readInt(); public... public...... class... class Happy Happy { public public void void A() A() { int... intx = jlab.jlabio.readint();............... 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 6 การควบค มการใช fields แล methods ใช public ก ากะบ เป ดเผย : คลาสอ นๆ ใช ได หมด ใช private ก ากะบ ปกป ด : ใช ได เฉพา ภายในคลาสเจ าของเท านะ น public class class Square { public Rectangle rect; rect; ใครๆ ก ใช rect ได...... Square s = new new Square( 10, 10, 10, 10, 100 100 ); ); s.rect.width = 70; 70;...... public class class Square { private Rectangle rect; rect; ใช rect ได เฉพา ใน คลาสน เท านะ น การอน ญาตให ผ อ นเปล ยนความกว างได เอง อาจท าให Square ไม จะต ระส 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 7 ข อแน น า ให ท กๆ fields เป น private ม public method ให หย บหร อเปล ยนค าของ field ได public class class Square { private Rectangle rect; rect; public Square(int x, x, int int y, y, int int len) len) { this.rect = new new Rectangle(x, y, y, len, len, len); len); public int int getlength( ) { return this.rect.width; public void void setlength(int len) len) { if if (len (len > 0) 0) this.rect.width = this.rect.height = len; len;...... ปลอดภะย แล ตรวจหาจ ดบกพร องของโปรแกรมได ง ายข น 2110101 ว ศวกรรมคอมพ วเตอร จ ฬา 7/8/2002 8