Transcript PPT
CS@KKU
Java Summer Camp 2011
Day 1-2
•Variable, Type
•Expressions and Flow Control
Wachirawut Thamviset
1
จุดประสงค์ การเรียน
สามารถใช้ หมายเหตุแบบต่างๆ ในภาษาจาวาได้
ทราบกฎเกณฑ์การตั้งชื่อ Identifier
ทราบถึงชื่อที่เป็ น Keyword
รู ้ความแตกต่างระหว่าง primitive type และ reference type
2
Primitive Types
ใน Java จะมีชิดข้อมูลแบบ Primitive อยู่ 8 ชนิดได้แก่
ตรรก (Logical) - boolean
(มีค่าเฉพาะ true หรื อ false)
ตัวอักขระ (1 ตัว) - char
(ASCII code และ Unicode)
จานวนเต็ม
- byte, short, int และ long
ทศนิยม
- double, float
3
Premitive Data Type
Type
boolean
char
byte
short
int
long
float
double
Size (bit)
1
16
8
16
32
64
32
64
Min
Max
true , false
Unicode 0
Unicode 216-1
-128
127
-215
+215-1
-231
+231-1
-263
+263-1
± ~ 10-44.85
± ~ 10-38.53
± ~10-323.3
± ~10 308.3
4
Logical - boolean
ตัวแปรแบบ boolean สามารถมีค่าได้ 2 สถานะคือ true และ false
ตัวอย่างการประกาศ
boolean flag = true;
เราสามารถใช้คาสัง่ เปรี ยบเทียบเพื่อสร้างค่า boolean ก็ได้ เช่น
boolean flag = 5 < 6;
5
Char
ตัวอักษรของ Java จะมีขนาด 16 bit (Unicode)
การกาหนดค่าจะอยูใ่ นเครื่ องหมายคาพูดเดียว ‘ ‘
รู ปแบบการใช้
‘a’ ตัวอักษร a
‘\t’ หมายถึง tab
‘\u0E01 เป็ นรหัส unicode โดยใช้เลขฐาน 16 จานวน 4 ตัว
ดังตัวอย่าง 0E01 แทน รหัสตัวอักษร ก.ไก่
6
Java String
ไม่ใช่ primitive type , แต่ string เป็ น class
แทนค่าใช้เครื่ องหมาย คาพูดคู่ “ “
ตัวอย่างการใช้
String name = “John”;
String text = “Hello !!\n John”;
7
การจัดการ String
การจัดการทัง้ หมดจะทาผาน
method ทีอ
่ ยูใน
Object String
่
่
เช่น
trim()
ตัด space ซ้ายขวาออก
toUpperCase() แปลงเป็ นตัวใหญ่
toLowerCase() แปลงเป็ นตัวพิมพเล็
์ ก
toCharArray() แปลงเป็ น array ของตัวอักษร
(เมทอดอืน
่ ๆ
สามารถดูไดใน
JDK Document )
้
String s1 = “Hello”.toLowerCase();
String s2 = s1.toUpperCase();
s1 -> “hello”
s2 -> “HELLO”
8
String
เราไม่สามารถแก้ไขค่าของ String โดยตรง
ถ้าต้องการเปลี่ยนค่าของ String ทาได้โดยสร้าง String ใหม่เท่านั้น
เช่น
String s = “Hello”;
ถ้าต้องการเปลี่ยนให้เป็ นตัวอักษรใหญ่ตอ้ งใช้วิธี
s = s.toUpperCase();
9
Object to String
ใน จาวาทุก Object จะมีเมทอดที่ชื่อว่า toString() ดังนั้นเราจึง
สามารถแปลงข้อมูลของออบเจคต์ทุกชนิดเป็ น String ได้เช่น
Font f = new Font("Arial",Font.BOLD,20);
String fname = f.toString();
fname จะมีค่าเป็ นข้อความ
java.awt.Font[family=Arial,name=Arial,style=bold,size=20]
10
การเชื่อม String
String sx = 100 + 10.45;
// ผิด
String sy = 100+ 10.45+”$”; // 110.45$
String sz = “$”+100+ 10.45; // $10010.45
ถ้า String + กับนิพจน์ นิพนธ์น้ นั จะถูกแปลงให้เป็ น String ก่อนแล้วเชื่อมกัน
100+10.45+”$” => 110.45+”$”
=> “110.45”+”$”
“$”+100+10.45 => “$”+”100”+10.45 => “$100”+”10.45”
11
เลขจานวนเต็ม
มี 4 ระดับ
byte
short
int
long
8 bit
16 bit
32 bit
64 bit
12
เลขจานวนเต็ม
มีการแทนค่าได้ 3 รู ปแบบ (ฐานสิ บ ฐานแปด และ ฐาน 16)
77
เลข 77 เป็ นเลขฐาน 10
077
เป็ นเลขฐาน 8 มีค่าเท่ากับ 63 ในฐาน 10
0x77 เป็ นเลขฐาน 16 มีค่าเท่ากับ 119 ในฐาน 10
ค่าปกติจะเป็ น integer
เติมตัวอักษร L หรื อ l (แอลเล็ก) ต่อท้ายหมายถึงชนิด long
77L แนะนาให้ใช้ L เพราะ
l(แอล) จะมีรูปร่ างเหมือนเลข 1(หนึ่ง)
13
ทศนิยม
มี 2 ชนิดคือ
float
32 bit
double 64 bit
14
ทศนิยม
การแทนค่า
ใช้ E กาหนดค่า 10 ยกกาลัง
ใช้ F ต่อท้ายหมายถึง float
ใช้ D ต่อท้ายหมายถึง double (ถ้าไม่กาหนดจะเป็ น double)
ตัวอย่าง
3.14
3.14E20
หมายถึง 3.14 x 1020
1.2E+30D หมายถึง 1.2 x 1030
1.2F
หมายถึง 1.2 เป็ นแบบ float
15
Reference Type
ตัวแปรในภาษาจาวาที่ไม่ใช่ Primitive Type จะเป็ น Reference Type
ใช้จดั การกับ Object
เช่น
Foo a = new Foo(10);
Foo b = a;
// ให้ b อ้างถึง object เดียวกับ a
a.setX(20); หรื อ b.setX(20) จะมีผลเหมือนกัน เพราะว่า
ทั้ง a และ b อ้างถึง Object เดียวกัน
16
The this Reference
การใช้คา this เพื่ออ้างถึงสมาชิกของ Class ที่อยูใ่ นตาแหน่งที่เขียนคาสัง่
ใช้เพื่ออ้างตัวแปรเมื่อ มีตวั แปรที่มีชื่อซ้ ากัน
เช่น
class Foo{
this.x
int x;
void setX(int x){
this.x = x;
}
}
17
Identifiers
หมายถึง ชื่อ ที่ใช้ต้ งั ชื่อตัวแปร,class หรื อ method
สามารถเริ่ มต้นด้วยเครื่ องหมาย _ หรื อ $
สามารถตั้งชื่อด้วยตัวอักษร Unicode
เป็ น Case-Sensitive และ ไม่จากัดความยาว
ตัวอย่าง
example , username , UserName, FirstName, $money
18
Identifiers
คุณสามารถตั้งชื่อ Class,ตัวแปร และ method ด้วยภาษาไทยได้
แต่ไม่ควรใช้ภาษาไทยตั้งชื่อ Class
เพราะจะทาให้ไม่สามารถใช้ บน OS ที่ไม่สนับสนุนภาษาไทย
การตั้งชื่อ Class ควรขึ้นต้นด้วยตัวอักษรใหญ่
ชื่อ Method และ ตัวแปร ควรขึ้นต้นด้วยอักษรเล็ก
Identifiers ไม่สามารถตั้งชื่อเหมือนกับ Keyword ของจาวาได้
19
Identifier
ไม่สามารถใช้สญ
ั ลักษณ์พิเศษอื่น เช่น +, -, *, &,
%, # ฯลฯ เป็ นส่ วนประกอบอยูภ่ ายในชื่อได้
สามารถตั้ง Identifier ให้มีความยาวเท่าใดก็ได้
การตั้ง Identifier จะมีลกั ษณะเป็ น Case Sensitive
เช่น MyClass, myClass, MYCLASS และ myclass
ต่างก็เป็ น Identifier ที่แตกต่างกัน ไม่ใช่ตวั เดียวกัน
20
Java Keywords
เป็ นคาเฉพาะ ที่ถูกสงวนไว้ใช้ในภาษา Java
สาหรับใช้นิยามคลาส และ สร้างคาสัง่
เช่น
abstract , assert, boolean,break,continue
class,const, if , else
this, super, public, private
ไม่สามารถใช้ต้ งั ชื่อ Indentifier ได้
21
Java Keywords
ไม่ สามารถใช้ ตั้งเป็ น Identifier ได้ ตัวอย่ างเช่ น
abstract,boolean,break, byte, case, catch, char, class,const,
continue, default, delegate, do, double, else, extends,false,
final, finally, float, for, goto, if, implements, import,instance,
of, int, interface, long, multicast, native, new, null,
package, private, protected, public, return, short, static, super,
switch, synchronized, this, throw, throws, transient, true, try,
void, volatile, while
22
Scoping
ใช้เครือ
่ งหมาย { } กาหนด Scope
ตัวแปรจะใช้ไดเฉพาะในช
่ รางมั
น
้
่ วงโปรแกรมทีส
้
เทานั
่ ้น
{
มีตวั แปร I,G
int I = 100;
{
มีตวั แปร
int G = I+10;
}
System.out.printf(“%d %d”, I , G );
I แตตั
่ วแปร G จะหายไป
}
Scope จะเป็ นตัวบอกอายุของตัวแปร
เมื่อออกนอก Scope มันก็จะถูกทาลาย
23
Expressions and Flow Control
24
Operator
In addition to the simple operators in JAVA
addition(+)
subtraction(-)
multiplication(*)
division(/)
modulus(%)
There are many others.
25
Increment and Decrement Operators:
้ ม
++ ใชเพิ
่ ค่าตัวแปรขึน
้ 1
้
-- ใชลดค่
าตัวแปรลง 1
int aNumber = 8;
aNumber = aNumber + 1;
aNumber++;
aNumber = aNumber – 1;
aNumber -- ;
26
Increment and Decrement Operators:
้ ม
++ ใชเพิ
่ ค่าตัวแปรขึน
้ 1
้
-- ใชลดค่
าตัวแปรลง 1
int aNumber = 8;
aNumber = aNumber + 1;
aNumber++;
aNumber = aNumber – 1;
aNumber -- ;
สงิ่ ทีแ
่ ตกต่างระหว่าง
i++;
และ ++i;
int x=5,y=5;
System.out.println(x++); 5
System.out.println(++y); 6
27
Logical Operators:
JAVA allows for standard comparison between numbers:
< less than
5<7
//returns true
23.321 >= 54.1 //returns false
<= less than or equal to
'g' != 'G'
//returns true
'g' == 'g'
//returns true
== equal to
!= not equal to
>= greater than or equal to
> greater than
จะได้ ผลลัพธ์ เป็ น true หรือ false
28
Logical Operators:
Operator ทีใ่ ช้ จัดการกับข้ อมูลแบบ boolean ได้ แก่
! not (prefix)
&& conditional and
!(5 < 7)
('a' == 'a') && (5 < 7)
('G' == 'a') && (5 < 7)
|| conditional or
('G' == 'a') || (5 < 7)
('G' == 'a') || (5 >= 7)
//returns false
//returns true
//returns false
//returns true
//returns false
การคานวณ จากซ้ายไปขวา
สาหรับ && ถ้ามีเงื่อนไขใดเป็ น false ก็จะไม่จาเป็ นตรวจสอบเงื่อนไขถัดไป
สาหรับ || ถ้าพบเงื่อนไขที่เป็ น true ก็จะไม่ตอ้ งตรวจสอบเงื่อนไขถัดไป
29
Bitwise Operators:
JAVA also provides bitwise operators for integers and booleans:
~ bitwise complement (prefix unary operator)
& bitwise and
| bitwise or
^ bitwise exclusive-or
<< shift bits left, filling in with zeros
>> shift bits right, filling in with sign bit
>>> shift bits right, filling in with zeros
30
Assignment Operators:
ใช้คานวณและกาหนดค่าให้ตวั แปร มีรูปแบบดังนี้
variable <op>= expression;
ตัวอย่าง
x = x+ 6; สามารถเขียนใหม่เป็ น x += 6;
y = y * 2; สามารถเขียนใหม่เป็ น y *= 2;
31
Operator Precedence
ลาดับการคานวณ operator
สามารถควบคุมด้วย วงเล็บ ( )
30 + 5 * 2 - 18 / 2 - 2
30 + 10 – 18 / 2 – 2
30 + 10 – 9 – 2
40 – 9 – 2
31 – 2
29
32
ตารางแสดงลาดับของ operator
postfix operators
[]
.
(<exp>)
<exp>++
prefix operators
++<exp>
<exp>
creation/cast
new (<type>)<exp>
multiplication/division/
modulus
*
/
addition/subtraction
+
-
shift
<<
comparison
<
equality
==
bitwise-and
&
--<exp>
~<exp>
<exp>--
!<exp>
%
>>
<=
>>>
>
>=
instanceof
!=
33
ตารางแสดงลาดับของ operator (ต่ อ)
bitwise-xor
^
bitwise-or
|
logical and
&&
logical or
||
conditional
<bool_exp>? <true_val>: <false_val>
assignment
=
operation assignment
+=
bitwise assignment
>>=
boolean assignment
&=
-=
*=
<<=
^=
/=
%=
>>>=
|=
34
Math Functions
There is a whole library of math functions that can be used on
numbers.
Here are just a few on the common ones:
Trigonometric:
Math.sin(0)
Math.cos(0)
Math.tan(0.5)
//returns 0.0 which is a double
//returns 1.0
//returns 0.5463024898437905
35
Math Functions (ต่ อ)
Conversion and Rounding:
Math.round(6.6)
//returns 7
Math.round(6.3)
//returns 6
Math.ceil(9.2)
//returns 10
Math.ceil(-9.8)
//returns -9
Math.floor(9.2)
//returns 9
Math.floor(-9.8)
//returns -10
36
Math Functions (ต่ อ)
Powers and Exponents:
Math.sqrt(144)
//returns 12.0
Math.pow(5,2)
//returns 25.0
Math.exp(2) //returns 7.38905609893065
Math.log(7.38905609893065) //returns 2.0
37
Math Functions (ต่ อ)
Powers and Exponents:
Math.sqrt(144)
//returns 12.0
Math.pow(5,2)
//returns 25.0
Math.exp(2) //returns 7.38905609893065
Math.log(7.38905609893065) //returns 2.0
38
Math Functions (ต่ อ)
Comparison:
Math.max(560, 289) //returns 560
Math.min(560, 289) //returns 289
Generation of a Random Number:
Math.random()
//returns a double >=0.0 and <1.0
39
Math Functions (ต่ อ)
ต ัวอย่าง:
เราจะสามารถคานวณจุดทศนิยม 2 หล ักได้อย่างไร
5415.23491872773773 => 5415.24
วิธก
ี ารอย่างง่าย คูณด้วย 100 แล้ว round จากนน
ั้ หารด้วย 100
double x = 524.14982232132143;
System.out.println("x is: " + x);
x = Math.round(x * 100) / 100.0;
System.out.println("x rounded is: " + x);
40
Flow Control
Every programming language must have the ability to:
evaluate code in some specific order
evaluate different code depending on some condition
repeat a selected portion of code a specific number or times, or until
some condition occurs
41
Control Structure
sequence
executing code line-by-line.
selection
being able to choose as to whether or not a piece of code is to be
executed based on some condition.
repetition
executing the same code fragment more than once.
42
Control Structure
if
switch
for
while
The control structures
will be used to handle
the selection and
repetition.
43
The if control structure
ใช้ควบคุมการตัดสิ นใจ
if (<boolean-expression>) {
//statements for true case;
}
if (<boolean-expression>) {
//statements for true case;
}
else {
//statements for false case;
}
44
ตัวอย่ าง
สร้างฟังก์ชนั คานวณความชัน
ระหว่างจุด 2 จุด
public static double slope(int x1, int x2, int y1, int y2) {
if (x1 == x2)
return Double.NaN;
return ((y2- y1) / (x2 - x1));
}
หมายเหตุ Double.NaN เป็ นค่าคงที่ สาหรับกาหนดว่า หาค่าไม่ได ้
45
ตัวอย่ าง
การแสดงผลสามารถใช้ if เพื่อเลือกวิธีการแสดงได้
double slope = slope(1,1,1,4);
if (Double.isNaN(slope))
System.out.println("Slope is undefined");
else
System.out.println("Slope is " + slope);
้
หมายเหตุ Double.isNaN ใชทดสอบ
ตัวเลขทีห
่ าค่าไม่ได ้
46
ตัวอย่ าง : if
public class PollutionClassifier {
public static String classify(int polutionIndex) {
if ((polutionIndex < 0) || (polutionIndex > 100))
return null;
if ((polutionIndex >= 0) && (polutionIndex <= 34))
return "Pleasant";
if ((polutionIndex >= 35) && (polutionIndex <= 60))
return "Unpleasant";
if (polutionIndex > 60)
(ระดับมลภาวะ)
return "Hazardous";
return null;
}
}
47
ตัวอย่ าง : if (ระดับมลภาวะ) ลดความซับซ้ อน
public static String classify(int polutionIndex) {
if ((polutionIndex < 0) || (polutionIndex > 100))
return null;
else if (polutionIndex <= 34)
return "Pleasant";
else if (polutionIndex <= 60)
return "Unpleasant";
else
return "Hazardous";
}
48
ตัวอย่ าง : if (ระดับมลภาวะ) ลดความซับซ้ อน
ในความเป็ นจริง การใชค้ าสงั่ return ไม่จาเป็ นต ้องมี else ก็ได ้
public class PollutionClassifier {
public static String classify(int polutionIndex) {
if ((polutionIndex < 0) || (polutionIndex > 100))
return null;
if (polutionIndex <= 34)
return "Pleasant";
if (polutionIndex <= 60)
return "Unpleasant";
return "Hazardous";
}
}
49
The switch Statement
ใช้สร้างสาหรับเงื่อนไขที่มีหลาย
ทางเลือก
switch (<switch-expression>) {
case value1: statements for case1; break;
case value2: statements for case2; break;
...
case valueN: statements for caseN; break;
default:
statements for default case; break;
}
้ ้เฉพาะ expression ทีเ่ ป็ น premitive type
ข ้อจากัด : ใชได
50
The switch Statement : ตัวอย่ าง
ใช้ สร้ างสาหรับเงือ่ นไขทีม่ หี ลายทางเลือก
public class Grader {
public static void printGradeRangeFor(char aLetter) {
switch(aLetter)
case 'A': System.out.println("80% - 100%"); break;
case 'B': System.out.println("70% - 79%"); break;
case 'C': System.out.println("60% - 69%"); break;
case 'D': System.out.println("50% - 59%"); break;
case 'F': System.out.println("0% - 49%"); break;
default: System.out.println("not defined");
}
}
}
51
The switch Statement : ตัวอย่ าง
ปัญหาจานวนวันในเดือน
version 1
public static int daysInMonth(int month) {
if ((month == 1) || (month == 3) || (month == 5) || (month == 7) |
(month == 8) || (month == 10) || (month == 12))
return 31;
if ((month == 4) || (month == 6) || (month == 9) || (month == 11))
return 30;
if (month == 2)
return 28;
}
52
The switch Statement : ตัวอย่ าง
ปัญหาจานวนวันในเดือน version 2
ปรับปรุงลาดับเงือ่ นไข เพือ่ ลงความซับซ้ อน
public static int daysInMonth(int month) {
if (month == 2)
return 28;
if ((month == 4) || (month == 6) || (month == 9) || (month == 11))
return 30;
return 31;
}
53
The switch Statement : ตัวอย่ าง
ปัญหาจานวนวันในเดือน
ใช้ switch
version 3
public static int daysInMonth(int month) {
int days;
switch(month) {
case 2: days = 28; break;
case 4:
case 6:
case 9:
case 11: days = 30; break;
default: days = 31;
}
return days;
}
54
ตัวอย่ างที่ผดิ
switch (age) {
case 1-12: price = 5.00; break;
case 13-17: price = 8.00; break;
case 18-54: price = 10.00; break;
default: price = 6.00;
}
switch (name) {
case "Mark": bonus = 3; break;
case "Betty": bonus = 2; break;
case "Jane": bonus = 1; break;
default:
bonus = 0;
}
55
The for Loop
ใช้เพื่อควบคุมการทาซ้ า
ถ้ าต้ องการแสดงข้ อความต่ อไปนี้
**********
**********
**********
**********
**********
จะเขียนโปรแกรมแบบนี้ ?
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");
System.out.println("**********");
56
The for Loop
ไวยกรณ์
for (<start-expression>; <check-expression>, <update-expression>) {
// body of the loop;
}
<start-expression>
เป็ น expression เริม
่ ต ้นการวนลูป ปกติจะใชตั้ ง้ ค่าเริม
่ ต ้นของตัวแปร
<check-expression>
เป็ นเงือ
่ นไขการวนลูป การทางานจะออกจากลูปเมือ
่ เงือ
่ นไขเป็ นเท็จ
<update-expression>
เป็ นคาสงั่ สาหรับปรับปรุงตัวแปร เมือ
่ วนรอบการทางานแต่ละรอบ
57
The for Loop
เพือ
่ แก ้ปั ญหาทีน
่ าเสนอไว ้ตอนแรก
เราสามารถใช ้ for ในการทา loop:
for (int i=1; i<=5; i++)
System.out.println("**********");
ถ ้าต ้องการให ้ทา 10 แถว ก็เปลีย
่ นแค่ 5 เป็ น 10:
for (int i=1; i<=10; i++)
System.out.println("**********");
58
The for Loop
ข้อควรระวัง
เครื่ องหมาย ;
หมายถึงคาสัง่ เปล่า
ที่ไม่ทางานอะไร
for (i=0;i<100;i++); {
System.out.println(“***************”);
}
ระวังอย่างใส่ ; หลัง for
59
The while Loop
ไวยกรณ์
while (<boolean-expression>) {
//body of the loop;
}
จะวนลูป ทาคาสั่งที่อยูใ่ นปี กกา วนรอบไปเรื่ อย ๆ
เมื่อเงื่อนไขเป็ นจริ ง
60
The while Loop
ตัวอย่าง
int i=0;
while (i<=10) {
System.out.println(“***************”);
i++;
}
61
The while Loop
ตัวอย่าง
int i=0;
do {
System.out.println(“***************”);
i++;
} while (i<=10);
62
การใช้ break, continue
break ใช้เพื่อจบการวนลูป
continue ใช้เพื่อข้ามการทางานในลูปปัจจุบนั
ไปทาในรอบต่อไป
int i=0;
while(i<=100) {
System.out.println(i);
if(i % 5 == 0) {
i++;
continue;
}
i++;
}
63
รู ปแบบการเขียน Code ภาษา Java
Packages
package app.lab;
Classes
class BallFrame
Interfaces
interface AniObj
Method
void moveObj( );
64
รู ปแบบการเขียน Code ภาษา Java
Variables
int x;
String currentStudent;
Constants
static int MAX_SIZE=10;
Block
for(int i=0;i<10;i++){
/// คาสัง่
}
65