Docstoc

Programming Note

Document Sample
Programming Note Powered By Docstoc
					www.ee.buu.ac.th
- เช็คสภาพตัวเอง (Pro)
- หนังสือวิชา
- สมุดโน้ต
หัวใจสําคัญ:
- เรียนเป็นทีม
- ฝึกเขียนโปรแกรม => ทักษะ
คะแนน:
30% (เข้าเรียน+แล๊ป+การบ้าน)
35% Midterm
35% Final
บทที่ 1-5 (Midterm)
บทที่ 6-9 (Final)
Midterm => รู้จักวิเคราะห์และหาทางแก้ปัญหาการเดินของหุ่นยนต์
        สามารถอธิบายเป็น Diagram หรือ Flowchart
                              ( ให้คิดแบบมี ตรรกะ )
Final => Hardcore Programming (Developer)

Languages:
1. Spoken Language
2. Natural Language ==> Diagram/Flowchart/Psuedo วิศกร
3. Programming Language โปรแกรมเมอร์
 3.1 Instruction (คําสั่ง)
  3.1.1 CPU Architecture
           - Speed
           - Memory (Cache)
           - Instruction Set (ล้านคําสั่ง)
    3.1.2 Programming
           - Instructions ===> Statements (ชุดลําดับคําสั่ง)
   - แต่ละภาษา จะต้องมีความเฉพาะในการเขียนโปรแกรม ==>
Syntax (รูปแบบของคําสั่ง)
     - เขียนโปรแกรม เพื่อแก้ปัญหา หรือเพื่อนําไปใช้่งานแต่ละ
ประเภท รหัสโปรแกรมทั้งหมด จะเรียกว่า Source Code
     - การแปลงจาก Source Code ไปเป็นโปรแกรมให้ผู้ใช้ ใช้งาน
ได้ จะมี สองวิธี (ขึ้นกับชนิดของภาษานั้น)
       > การแปลงรหัส (Compile)
       > การแปลรหัส (Interprete)

สองกลุ่มใหญ่ของ Programming Languages:
     1. แปลงจาก Source code => Executable File => Software
(.exe, .com)
          Source Code (อ่านได้: Readable) => Compiler =>
Executable File (อ่านไม่ได้: Unreadable)
  ตัวอย่าง:
   - โปรแกรมทั้งหมดใน Windows หรือ OS ตัวอื่น
   - Software ด้านต่างๆ (Office, Entertainment, Game)
  2. Source code (Script) (อ่านได้: Readable) => Interpreter
=> โปรแกรม (อ่านได้: Readable)
  ตัวอย่าง:
   - HTML
   - Javascript
   - PHP
   - Perl
   (Web Programming)

 1+2


 ประเภทในการพัฒนาโปรแกรม:
  - Text Mode (Terminal)
    C/C++, Assembly, Fortran, Cobol, Pascal, JAVA
  - Graphic Mode (Window Style)
    Visual Basic, .NET, Delphi, JAVA, Qt …..
 แยกแยะภาษาแต่ละประเภท:
  - คนอ่านเข้าใจมากน้อยแค่ไหน
      - ทํางานหรือประมวลผลได้เร็วมากน้อยแค่ไหน

                                     ภาษาระดับสูง
(JAVA, .NET)
            Human                    Compiler ,
Interpreter


                                     Assembly Code
                                     Machine Code
                                        45 678, 0x45
   PC    (Binary) 1110 1110

  การบ้าน (รายคน) Microsoft Word :
   1. สรุป Keywords ที่สําคัญของ Programming Languages
   2. ให้ยกตัวอย่างภาษาระดับสูง ภาษาระดับกลาง และภาษา
ระดับล่าง
   3. ทําแบบฝึกหัดท้ายบทที่ 1
  หมายเหตุ:
    - บอก reference ของแหล่งที่หามา

IDE ยอดนิยม:
    - Eclipse IDE (Integrated Development Environment)
 - Netbean

Required:
 ลง Java Development Kit (JDK) หรือ Java Run-time
Environment (JRE) version 1.6 ขึ้นไป
ขั้นตอนในการพัฒนาโปรแกรม JAVA บน Elipse:
1. ต้องสร้าง Folder สําหรับเก็บ Source code เช่น D:\ee_labs

ครั้งที่ 2:
     1. รู้จักการใช้งาน Eclipse มากขึ้น
     2. รู้จักโครงสร้างของการเขียนโปรแกรม ไปสู่การได้มาซึ่ง
โปรแกรมเพื่อใช้งาน
     3. การเริ่มต้นการพัฒนาโปรแกรมด้วย Karel Robot Concept

JAVA Concept:
    1. JDK/JRE (compiler)
    2. Source Code (.java) <== Eclipse IDE
    3. Libraries (JAVA Standard libraries, Third-party
Libraries)
    4. JVM (Java Virtual Machine)

เป็น Diagram ดังข้างล่างนี้




เริ่มต้นการใช้งาน Eclipse:
     1. ต้องมี Workspace ไว้ในเครื่อง
     2. สามารถเขียนโปรแกรม Hello World (ดูหน้า 34)
การเขียนโปรแกรม Karel Robot:
     3. Download ไฟล์ Karel101.zip จากเว๊ป (Assignment1)
Note:
    Karel ได้ออกแบบภายใต้ความคิดของ OOP (Object-
oriented Programming) การเขียนโปรแกรมเชิงวัตถุ
        แนวคิดหลักของ OOP:
             1. มองทุกอย่างเป็นวัตถุ (Object)
                 1.1 คุณสมบัติ (Property)
                      1.1.1 กระเป๋าสําหรับเก็บ Beeper
                 1.2 การทํางาน/ความสามารถ (พฤติกรรม)
(Method/Function) <== Action
                      1.2.1 move
                      1.2.2 turnLeft
                      1.2.3 pickBeeper
                      1.2.4 putBeeper
             2. วัตถุสามารถเพิ่มเติมความสามารถเข้าไปได้
             3. สามารถสืบทอดวัตถุ เป็นสู่รุ่นใหม่ได้ (Inheritance)
    4. ทําการ Import ตัว Karel101 Project เข้าไปใน Eclipse ได้
Note:
    - ไฟล์ที่สร้างขึ้นมา (FirstKarel.java) จะต้องชื่อเดียวกันกับชื่อ
Class (Case Sensitive: พิมพ์ใหญ่พิมพ์เล็ก)
import stanford.karel.Karel;

public class FirstKarel extends Karel {
	
	   public void run() {
	   }
}

    - ภายในโปรแกรม Karel ที่สร้างขึ้นจะต้องมี run() เพื่อสั่งการ
ให้ Karel Robot ทํางานตามต้องการ
         (Eclipse ต้อง version 3.5 ขึ้นไป เท่านั้น)
    - ตอนใช้ Run Configuration จะต้องกดที่ Java Application
เท่านั้น
5. การสร้าง Run Configuration จะสร้างครั้งแรกเท่านั้น เมื่อได้
   สร้าง Source code ตัวขึ้นมา
6. การสร้่างสนาม ต้องเก็บไว้ใน D:\ee_labs\Karel_101\worlds\
   และต้องมีนามสกุลไฟล์ .w เท่านั้น และต้องชื่อเดียวกับโปรแกรม
   เช่น FirstKarel.w
Note: เพื่อให้ต่อไป เมื่อมีการรัน FirstKarel.java จะเรียกสนามนั้น
โดย Default

FirstKarel.java:
import stanford.karel.Karel;

public class FirstKarel extends Karel {
	
	    public void run() {
	    	     move();
	    	     turnLeft();
	    	     move();
	    	     turnLeft();
	    	     turnLeft();
	    	     turnLeft();
	    	     move();
	    	     move();
	    	     pickBeeper();
	    	     move();
	    	     turnLeft();
	    	     move();
	    	     turnLeft();
	    	     turnLeft();
	    	     turnLeft();
	    	     move();
	    	     move();
	    	     move();
	    	     pickBeeper();
	    	     move();
	    	     move();
	    	
	    }
}
การพัฒนาความสามารถเพิ่มเติม:
1. มีการใช้โค้ดที่ซ้ําๆกันบ่อย และอาจทําให้โปรแกรมมีขนาดใหญ่
   เกินไป
2. เพื่อความสะดวกในการเรียกใช้จากโปรแกรมหลัก (run())
3. ไม่มี method ที่ให้มา ซึ่งจะต้องสร้างเองใหม่

สร้าง turnRight() method.....

public void turnRight() {
   turnLeft();
   turnLeft();
   turnLeft();
}

import stanford.karel.Karel;

public class FirstKarel extends Karel {
	
	    public void run() {
	    }

==>
}



เริ่มสร้างโปรแกรมใหม่:
1. เลือก New ==> Class
2. ตั้งชื่อไฟล์โปรแกรม เช่น LadderKarel.java
3. กด Browse ที่ Superclass แล้วพิมพ์หา Karel
4. กด Finish จะได้ไฟล์ดังนี้
import stanford.karel.Karel; <== การนํา Karel Library เข้ามาใช้งาน
public class LadderKarel extends Karel {
	   	    	   	   ^	 	     	   ^	
	   	    	   	   |	 	     	   |

	     	   !"#$%&'()*+,-./0*/1 *2/3",4$&52*    Karel   &+67%&81
    public void run(){    <== เนื้อโปรแกรมจะเขียนอยู่ภายใต้ run() method
      	
    }
}
5. ทําการสร้าง Run Configuration และสร้างสนามดังที่อธิบายไป
   ก่อนหน้านี้ (จะต้องใช้ชื่อว่า LadderKarel ในการตั้งชื่อ run
   configuration และ ชื่อสนามเท่านั้น)


Tips:
    1. การจัดแต่ง Source Code ให้ดูง่ายและ Professional โดย
เลือก Source code เลือก Source Menu => Format
import stanford.karel.Karel;
public class LadderKarel extends Karel {
public void run(){
	
}
}
===============================
import stanford.karel.Karel;

public class LadderKarel extends Karel {
	    public void run() {

	     }
}
2. การเขียน Comment ใน Source code จะไม่ถือว่าเป็น Source
code
    2.1 ใช้เครื่องหมาย // นําหน้า comment (ในกรณีมีบรรดทัด)
    2.2 ใช้เครื่องหมาย /* */ คร่อม paragraph ของ comment
(หลายบรรทัด)

แล๊ปส่งอาทิตย์หน้า (รายคน):
1. คําถามท้ายบทที่ 2
2. คําถามท้ายบทที่ 3

ประเด็นของวันนี้ (16 พ.ย. 53)
                 ิ
 - เป็นคุณสมบัต(พิเศษ) ของ Karel Robot:

       !"#$             %&&'#($"                        ตรวจสอบสิ่งใด
  !"#$%&'()*+",-     !"#$%&'.)#/0*1,-    มีกําแพงด้านหน้าหรือไม่
   )*!%&'()*+",-      )*!%&'.)#/0*1,-    มีกําแพงด้านซ้ายหรือไม่
  "234%&'()*+",-     "234%&'.)#/0*1,-    มีกําแพงด้านขวาหรือไม่
 5**6*"'7"*'*$%,-   $#.**6*"'7"*'*$%,-   มีเหรียญที่ว่างอยู่ตรงใต้89+"*)8หรือไม่
 5**6*"'&$.+3,-     $#.**6*"'&$.+3,-     มีเหรียญในถุงที่หุ่น89+"*)8หรือไม่
  !+/2$3:#"%4,-     $#%;+/2$3:#"%4,-     ทิศทาง89+"*)8ว่าหันไปทางเหนือหรือไม่
   !+/2$3<+'%,-      $#%;+/2$3<+'%,-     ทิศทาง89+"*)8ว่าหันไปทางตะวันออกหรือไม่
  !+/2$3=#>%4,-     $#%;+/2$3=#>%4,-     ทิศทาง89+"*)8ว่าหันไปทางใต้หรือไม่
  !+/2$3?*'%,-       $#%;+/2$3?*'%,-     ทิศทาง89+"*)8ว่าหันไปทางตะวันตกหรือไม่
แนวคิดหลักในการเขียนโปรแกรมให้สามารถทํางานกึ่งโอโต้ได้:
   1. Conditional Statement (แบบมีเงื่อนไข)
      > มีผลลัพธ์มีแค่สองอย่างคือ จริง (True) และ เท็จ (False)
                      Input (X)
                       ให้ X = 8
                                                              if ( X < 5 )
                                                                {
                                                                   Y = X - 10
                                                                }
           เงื่อนไข (Condition)
                   X<5
                                      False
                                              Y=X-5
                                                              else
                                                                {
                                                                   Y=X-5
                                                                 }
                      True




               Y = X - 10




                         Input (X)
                          ให้ X = 8                   if ( X < 5 )
                                                      {
                                                           Y = X - 10
                                                      }
           เงื่อนไข (Condition)           False
                   X<5




                         True




                Y = X - 10
                                           if ( frontIsBlocked() )
                                           {
                                                 turnAround();
   เงื่อนไข (Condition)   False
                                  move()
                                           }
    frontIsBlocked()
                                           else
                                           {
                                                 move();
              True
                                           }


      turnAround()




Iterative Statement (การทําซ้ํา)
     1. กําหนดรอบชัดเจน
     2. รอบไม่แน่นอน
for (int time=0; time < 5; time++)
{
     move();
     turnRight();
     move();
     if(noBeeperPresent())
     {
          putBeeper();
     }
     turnAround();
     move();
     turnRight();
     move();
}

    a. กําหนดจํานวนรอบแน่นอน

      for ( A; B; C)
      เช่น
      for (int counter=0; counter < times; counter=counter+1)
      {
           move();
      }
      โดยที่
      A => counter = 0
      B => counter < times
      C => counter = counter + 1
      รอบที่ 1:
           A ----> B -----> move(); -----> C
      รอบที่ 2:
           B ----> move(); ----> C
      รอบที่ 3:
           B ----> move(); ----> C
      ....
      รอบสุดท้าย
           B ----> move(); ----> C
      รอบถัดไป
           B --X--> จบการวนรอบ

      for (int step=0; step < 10; step++)
      {
         move();
      }
2. จํานวนรอบที่ไม่แน่นอน
    while แปลว่า ในขณะที่
ตัวอย่าง
    while (เงื่อนไข)
    {
           move();
    }
 แปลได้ว่า ในขณะที่ เงื่อนไข ยังคงเป็นจริงอยู่ ก็ให้ทํา move();
เช่น
                                    while (frontIsClear())
                                    {
      เงื่อนไข (Condition) False        move();
           frontIsClear()               if (frontIsBlocked())
                                       {
                                           turnRight();
                    True               }
                                    }
        move();
                                    keepWalking.java
โจทย์ตัวอย่าง:
  1. จงเขียนโปรแกรมให้หุ่นยนต์เดินเก็บก้อนหิน




for (int step=0; step < 14; step++)
   {
        move();
   }


สรุปประเด็นวันนี้:
   - ต้องชํานาญในการ Import ตัว karel 101
   - ต้องชํานาญในการสร้าง โปรแกรมใหม่
   - เข้าใจ และสามารถนํา Conditional Statement และ
Sensors ของหุ่นยนต์ใช้ร่วมกันได้
   - เข้าใจ และสามารถเขียน Iterative Statement ทั้งสอง
ลักษณะได้ (Fix loop และ non-Fix loop)

การบ้าน (ส่งรายคน):
   1 ให้สร้างสนามจากตัวอย่างสุดท้าย แต่เปลี่ยนเป็นบันได (ขั้น
เดียว)
   2 ออกแบบสนามในลักษณะเขาวงกต แล้วให้หุ่นยนต์เดินเก็บ
beeper เองอัตโนมัติ
         3 จงเขียนโปรแกรมจําลองให้ Karel วิ่งกระโดดข้ามรั่ว ตามที่
      กําหนด

วันที่ 23 พ.ย. 2553:
1. การตรวจสอบเงื่อนไข ที่มากกว่าหนึ่ง

if (frontIsClear())
  {
     if (rightIsBlocked())
     {
        move();
     }
  }
=============
  (
if( frontIsClear() && rightIsBlocked()) || beeperPresent() )
{
   move();
}
 else
{
   turnAround();
}

===============
Iteration Loop:
 - for ( int x=0; x < 500; x++ )
! {
! !         if (beeperPresent())
! !         {
! !         !     pickBeeper();
! !         }
! !         move();
! }
for ( ; ; )
{
  move();
}

=============
while (frontIsClear() && rightIsBlocked())
{
! move();
}

while(TRUE)
{
! move();
}

การถ่ายทอดความสามารถ (หลักการของการเขียนโปรแกรม
แบบเชิงวัตถุ OOP)
วิธีการ:
! - ทําการสร้างโปรแกรมใหม่ โดยต้องอ้างอิง (สืบทอด) จาก
โปรแกรมก่อนหน้านี้
! !
! !      !   FirstKarel extends Karel <== SuperClass
	   	         	   	   ^
	   	         	   	   |
	   	         	   SubClass

	   	
ดังนั้นโปรแกรมใหม่ต้องสืบทอดต่อจาก FirstKarel

!   !         MyKarel extends FirstKarel
ทําการสร้างโปรแกรมใหม่ชื่อว่า MyKarel.java โดยทําการ
สืบทอดจากตัวแม่ (FirstKarel) ซึ่งจะเรียกตัวแม่ว่า Super
Class และเรียกตัวลูก Sub Class

MyKarel.java
public class MyKarel extends FirstKarel {

}


แต่ยังไม่ครบโครงสร้างของ Karel จะต้องมี
public void run()


public class MyKarel extends FirstKarel {
       public void run(){

          }
}
ให้สร้าง mySuperKarel เพื่อเป็นหุ่นยนต์ต้นแบบต่อไปใน
อนาคต:
ตัวอย่าง:
  จงสร้างโปรแกรม AutoFixHoleKarel.java




MySuperKarel   <==== AutoFixHoleKarel
(SuperClass)            (SubClass)
public class AutoFixHoleKarel extends MySuperKarel {
	    public void run(){
	    	    // 1. keep walking until the end
	    	    // 2. if found the hole (rightIsClear = TRUE)
	    	    // 3. start fixing the Hole
	    	
	    	    while(frontIsClear()) // 1.
	    	    {
	    	    	    move();
	    	    	    if(rightIsClear()) // 2.
	    	    	    {
	    	    	    	    autoFixHole1(); // 3.
	    	    	    }
	    	    }
	    	
	    }
}
MySuperKarel        <==== AutoSteppingKarel
(SuperClass)                 (SubClass)
1.เดินไปจนสุดทางเองอัตโนมัติ (frontIsBlocked ==>
oneStepUp) ??? หยุด? (leftIsBlocked)
2. เดินขึ้นบันได (oneStepUp())
public class AutoSteppingUpKarel extends MySuperKarel {
	    public void run(){
	    	     // 1. keep walking until meet the ceil (leftIsBlocked())
	    	     // 2. If frontIsBlocked(), call oneStepUp();
	    	     while(leftIsClear()) // check the ceil?
	    	     {
	    	     	    if(frontIsBlocked())
	    	     	    {
	    	     	    	     oneStepUp();
	    	     	    }
	    	     	    else
	    	     	    {
	    	     	    	     move();
	    	     	    }
	    	     }
	    }
}
MySuperKarel        <==== AutoSteppingKarel2
(SuperClass)                 (SubClass)

public class AutoSteppingKarel2 extends MySuperKarel {
	    public void run(){
	    	     while(frontIsClear())
	    	     {
	    	     	    move();
	    	     	    if(frontIsBlocked())
	    	     	    {
	    	     	    	     turnLeft();
	    	     	    	     move();
	    	     	    	     if(rightIsClear())
	    	     	    	     { // Stepping Up
	    	     	    	     	    turnRight();
	    	     	    	     	    move();
	    	     	    	     }
	    	     	    	     else
	    	     	    	     { // **** Trick to the Karel stands in front of
the wall
	    	     	    	     	    turnAround();
	    	     	    	     	    move();
	    	     	    	     	    turnLeft();
	    	     	    	     }
	    	     	    }
	    	     }
	    }
}
ประเด็นหลักๆของวันนี้:
1. ฝึกการเขียนโปรแกรมต่อ
  a. วิเคราะห์ปัญหาหลักๆของโจทย์ออกมาเป็นข้อๆ
  b. กลับไปฝึกเขียน Flow Chart ต่อ
  c. วิธีการวางรูปแบบของการเขียนโปรแกรม
2. เรียนรู้เรื่องตัวแปรของภาษาจาวา (บทที่ 6)
3. การสร้างความสามารถ (Method/Function) ที่สามารถรับ Input
   (พารามิเตอร์) และส่งผลลัพธ์กลับมายังโปรแกรมหลักได้

--------------------------------------------
1. ฝึกการเขียนโปรแกรมต่อ

Ex1: สร้างสนามขนาด 15x4 ดังรูป




การวิเคราะห์ปัญหา:
1. สามารถทําให้ Karel เดินไปได้จนสุดท้าย (frontIsClear)
2. ตัว Karel จะต้องสามารถตรวจจับ Beeper ได้ในระหว่างการเดิน
   (beeperPresent)
3. ตัว Karel จะต้องสามารถเก็บกองของ beeper ทั้งหมดได้ (while
   => beeperPresent())

public class CollectingKarel extends MySuperKarel {
	    public void run(){
	    	     while(frontIsClear())
	    	     {
	    	     	    if(beepersPresent()) // found the beepers
	    	     	    {
	    	     	    	     while(beepersPresent())
	   	    	    	    {
	   	    	    	    	    pickBeeper();
	   	    	    	    }
	   	    	    }
	   	    	    move();
	   	    }
	   }
}



Ex2: สร้างสนามขนาด 15x10 ดังรูป




1. เดินไปให้ถึงสุดทาง (while => frontIsClear) แต่ต้องหาวิธีหยุด
   ให้ได้
   a. รู้ว่าคือกําแพงแน่นอน???
      i. แยกให้ได้ระหว่าง รั้วกับกําแพง
2. จะเดินข้ามรั้ว โดยการเช็ค rightIsClear
3. จะเดินลงจากยอดรั้ว โดยการเช็ค frontIsBlocked (while
   (frontIsClear())

public class AutoJumpingKarel extends MySuperKarel {
	    public void run()
	    {
	    	    while (facingEast())
	    	    {
	    	    	    if (frontIsBlocked())
	    	    	    {
	   	   	    	     turnLeft();
	   	   	    	     while(rightIsBlocked() && frontIsClear())
	   	   	    	     {
	   	   	    	     	    move();
	   	   	    	     }
	   	   	    	     if(rightIsClear())
	   	   	    	     {
	   	   	    	     	    turnRight();
	   	   	    	     	    move();
	   	   	    	     	    turnRight();
	   	   	    	     	    GoDown();
	   	   	    	     	    turnLeft();
	   	   	    	     }
	   	   	         if (frontIsBlocked())
	   	   	    	     {
	   	   	    	     	    turnAround();
	   	   	    	     	    GoDown();
	   	   	    	     }
	   	   	    }
	   	   	    else
	   	   	    {
	   	   	    	     move();
	   	   	    }
	   	   }
	   	   turnLeft();
	   }
	

	   public void GoDown()
	   {
	   	    while(frontIsClear())
	   	    {
	   	    	    move();
	   	    }
	   }
}
Ex3: สร้างสนามขนาด 11x2 ดังรูป




public class FixingHoleKarel extends MySuperKarel {
	     public void run() {
	     	     for (int time = 0; time < 5; time++) {
	     	     	     gotoPickBeeper();
	     	     	     gotoFillHole();
	     	     }
	     }
	     public void gotoPickBeeper() {
	     	     move();
	     	     pickBeeper();
	     	     move();
	     }
	     public void gotoFillHole() {
	     	     turnRight(); // going down
	     	     move();
	     	     putBeeper();
	     	     turnAround(); // going up
	     	     move();
	     	     turnRight();
	     }
}
Ex4: จงสร้างสนามขนาด 6x6 ดังรูป




1. ให้ Karel เดินไปเรื่อยๆ (while(frontIsClear())
2. เจอกําแพงระหว่างทาง ให้เลั้ยวซ้าย
3. ในระหว่างให้ตรวจสอบ beeper ว่าวางอยู่ไหมถ้าไม่มีก็ให้วาง
   เติมเต็มเข้าไป

public class SpiralKarel extends MySuperKarel {
	    public void run(){
	    	     while (frontIsClear())
	    	     {
	    	     	    if(noBeepersPresent())
	    	     	    	     putBeeper();
	    	     	    move();
	    	     	    if(frontIsBlocked())
	    	     	    	     turnLeft();
	    	     }	
	    }
}
1. ทําความเข้าใจ Karel Robot มากขึ้น
 2. เพิ่มความความสามารถในการตัดสินใจให้กับ Karel โดย
เพิ่ม Condition Commands เช่น frontIsBlocked(),
frontIsClear(), leftIsBlocked(), leftIsClear(), facingNorth()
เป็นต้น (รายละเอียดไปอ่านในหน้าที่ 68)
3. เพิ่มความความสามารถในการทําซ้ํา เพื่อให้ Karel ทําซ้ําได้
และลดโค้ดที่ต้องเขียนซ้ําซ้อน
================================================

1. ทําความเข้าใจ Karel Robot มากขึ้น

องค์ประกอบภายใน Source Code:
1. import stanford.karel.Karel;
คือการอ้างอิงโปรแกรมที่เกี่ยวกับการแสดงผลกราฟฟิกของหุ่น
ยนต์ (สนาม, ตัวหุ่นยนต์ และอุปกรณ์รอบข้าง)


2. public class FirstKarel extends Karel
ชื่อ class ว่า FirstKarel ซึ่งจะตรงกันชื่อไฟล์ FirstKarel.java

3. public void run() {
	   	    move();
}

เนื้อในโปรแกรม (Code Body)
การสร้าง comment เข้าไปใน source code:
- เพื่อให้ programmer หรือ นักพัฒนาต่อยอดจาก
  programmer สามารถเข้าใจความหมายของ code ที่เราเขียน
  ได้
- comment สามารถเขียนได้ไม่จํากัด แต่จะไม่รวมเข้าไปใน
  โปรแกรม เมื่อถูก compile แล้ว
- เพื่อเอาไว้ปิด source code ที่ไม่ต้องใช้
มีอยู่ 2 ประเภท:
1. ถ้าต้องการอธิบาย code เพียงบรรทัดเดียว จะใช้
turnLeft(); // find the left way go to another way
2. ถ้าต้องการอธิบาย code มากกว่าหนึ่งบรรทัด จะใช้
        /* 3 lines below is for turning right
	   	     you can create as a method named "turnRight"
	   	     Commented by: Wiroon Sriborrirux
	   	     Date: 30/06/2010
	   	     */
	   	    turnLeft();
	   	    turnLeft();
	   	    turnLeft();
3. ถ้าต้องการ disable หรือปิด code บางบรรทัดสามารถ
   ทําได้ดังนี้
!  ในกรณีที่มากกว่า 1 บรรทัด
!  !     move();
	   	   move();
	   	   /*
	   	   move();
	   	   move();
	   	   turnLeft();
	   	   */
	   ในกรณีที่มี 1 บรรทัด
	   	   turnLeft();
	   	   // turnLeft();
ปัญหา:
1.Eclipse version เก่า (3.3.2) ให้กลับที่รายวิชา แล้วดาวโหด
   www.eclipse.org
2.ต้องสร้าง New Class ไม่ได้เลือก SuperClass




3.ลืมการ save สนาม
เมื่อต้องการสร้างสนามและให้ default โหลดสนาม:
!     - จะต้องตั้งชื่อสนามให้ตรงกับชื่อไฟล์โปรแกรม
(FirstKarel.java) ชื่อว่า FirstKarel.w
!     - ทําการ copy ไฟล์ FirstKarel.w ไปไว้ที่ D:
\group1\Karel_101\worlds\

4.ไม่ได้ตรวจสอบเครื่อง
!    1. รู้ว่าสร้าง Workspace อยู่ที่ไหน D:\group1
!    2. เปิด Eclipse ให้ตรวจสอบ Version โดยชื่อ Gademedy
หรือ Galieo
!    3. เมื่อเข้า Eclipse มาได้เช็ค File==>Switch
Workspace==>Browse
	   4. ต้องมี Project ที่ชื่อ Karel_101 อยู่แล้ว
!   5. การ save สนาม ต้องเช็คให้ชัวร์ว่าเก็บไว้ใน
\workspace\Karel_101\worlds\

5.ชื่อไฟล์ FixedHoleKarel.java
!    ใน Argument จะต้องเป็น code=FixedHoleKarel.class
!    ชื่อสนามต้องชื่อว่า FixedHoleKarel.w เช่นกัน

Ex1. สร้างสนามขนาด 4x6 และตั้งชื่อโปรแกรมว่า
“FixedHoleKarel.java”




import stanford.karel.Karel;
public class FixedHoleKarel extends Karel {
	   public void run(){
	   	    move();
	   	    turnLeft(); turnLeft(); turnLeft();
	   	    move();
	   	    putBeeper(); // Fix Hole by putting a Beeper
	   	    turnLeft(); turnLeft();
	   	    move();
	   	    turnLeft(); turnLeft(); turnLeft();
	   	    move();
	   	    move();
	   	    move();
	   	    move();
	   }
}




จะทําอย่างไรให้ Karel รู้ว่า ควรจะซ่อม หรือไม่:
!    1. ต้องมีการตรวจสอบว่าในหลุมมีก้อนหินอยู่แล้วหรือไม่
(ให้ดูเงื่อนไขการตรวจสอบหน้าที่ 68)
!    !      beepersPresent() เป็นเงื่อนไขในการตรวจสอบ
!    2. จะเขียนโปรแกรมอย่างไรให้ใช้เงื่อนไขดังกล่าวได้ โดย
ถ้าเป็น
!    จริง: (เจอก้อนหิน)
!    !      ไม่ต้องทําอะไร
!    เท็จ: (ไม่เจอก้อนหิน)
!    !      ต้องทําการวางก้อนหิน ด้วยคําสั่ง
!    !      putBeeper();
ในเชิงโปรแกรม การใช้คําสั่ง เพื่อตรวจสอบเงื่อนไขว่าเป็นจริง
หรือเท็จ จะใช้ตัว
!    if...... หรือ if.....else หรือ if....else....if
if (เงื่อนไข)            if (เงื่อนไข)             if (เงื่อนไขที่ 1)
{                        {                         {
!       ชุดคําสั่ง A;        ชุดคําสั่ง A;             ชุดคําสั่ง A;
}                        } else                    } else if (เงื่อนไขที่ 2)
                         {                         {
                             ชุดคําสั่ง B;             ชุดคําสั่ง B;
                         }                         } else
                                                   {
                                                       ชุดคําสั่ง C;
                                                   }
ถ้าเงื่อนไขเป็นจริงทํา   ถ้าเงื่อนไขเป็นจริงทํา    ถ้าเงื่อนไขที่ 1 เป็นจริง
ชุดคําสั่ง A             ชุดคําสั่ง A             ทํา ชุดคําสั่ง A
แต่ถ้าเป็นเท็จก็ไม่ทํา   แต่ถ้าเป็นเท็จทํา ชุดคํา แต่ถ้าเป็นเท็จ และ
อะไร                     สั่ง B                   เงื่อนไขที่ 2 เป็นจริง ทํา
                                                  ชุดคําสั่ง B
                                                  แต่ถ้าเป็นเท็จและ
                                                  เงื่อนไขที่ 2 เป็นจริง ทํา
                                                  ชุดคําสั่ง C
                                                  แต่ถ้าเท็จอีก ก็ไม่ต้อง
                                                  ทําอะไร
if(noBeepersPresent
())
{
    putBeeper();
}
Ex2. สร้างสนามขนาด 4x6 และตั้งชื่อโปรแกรมว่า
“PickandPutBeeperKarel.java” ถ้าเจอก้อนหิน ให้หยิบ แต่ถ้า
ไม่เจอก้อนหินให้วาง




import stanford.karel.Karel;
public class PickandPutBeeperKarel extends Karel {
	    public void run(){
	    	     checkBeeper();
	    	     move();
	    	     checkBeeper();
	    	     move();
	    	     checkBeeper();
	    	     move();
	    	     checkBeeper();
	    	     move();
	    	     checkBeeper();
	    	     move();
	    	     checkBeeper();
	    }
	
	    public void checkBeeper(){
	    	     if(beepersPresent())
	    	     {
	    	     	     pickBeeper();
	    	     }else
	    	     {
	    	     	     putBeeper();
	    	     }
	    }
}



> เมื่อพิจารณาจากโค้ดแล้วพบว่า มีการทําซ้ําๆกันมากกว่า 1
ครั้ง เช่น Ex2 ทําซ้ํากันถึง 5 ครั้ง
!    !    checkBeeper();
	    	    move();
	    	    checkBeeper();
	    	    move();
	    	    checkBeeper();
	    	    move();
	    	    checkBeeper();
	    	    move();
	    	    checkBeeper();
	    	    move();
	    	    checkBeeper();

ภาษาจาวา (และภาษาอื่นๆ) จะชุดคําสั่งพิเศษในการให้มีการทํา
ซ้ํา หรือรันคําสั่งตามจํานวนรอบที่ต้องการ โดยใช้ for loop
!     for (A; B; C)
!     {
!     !     ชุดคําสั่ง;
!     }
โดยที:  ่
A คือ ค่าเริ่มต้นของตัวนับ
B คือ การตรวจสอบค่าตัวนับว่ายังเป็นจริงอยู่หรือไม่
C คือ การเพิ่ม/ลดค่าตัวนับ
ตัวนับ ==> Counter
วิธีเขียน:
!     for (int counter=0; counter<5; counter++)
!     {
!     !     checkBeeper();
!     !     move();
!     }
Counter = 0 (A)
B จริง ==========> ก็ทําชุดสั่ง;
C เพิ่มค่าอีก 1
Counter = 1 (A)
B จริง ==========> ก็ทําชุดสั่ง;
C เพิ่มค่าอีก 1
Counter = 2 (A)
B จริง ==========> ก็ทําชุดสั่ง;
C เพิ่มค่าอีก 1
Counter = 3 (A)
B จริง ==========> ก็ทําชุดสั่ง;
C เพิ่มค่าอีก 1
Counter = 4 (A)
B จริง ==========> ก็ทําชุดสั่ง;
C เพิ่มค่าอีก 1
Counter = 5 (A)
B เท็จ ==========> สิ้นสุด Loop




for (A; B; C)
!    {
!    !    ชุดคําสั่ง;
!    }
A คือ ค่าเริ่มต้นของตัวนับ int counter=0
B คือ การตรวจสอบค่าตัวนับว่ายังเป็นจริงไหม counter < 5
C คือ การเพิ่ม/ลดค่าตัวนับ counter ++
           Old! !       !    !   !   !   New
           checkBeeper();
	     	    move();
	
	
      	
      	
           checkBeeper();
           move();
                              for(int counter=0; counter<   5; counter
	     	    checkBeeper();     ++)
	     	    move();            	    {
                              	    	    checkBeeper();
	     	    checkBeeper();
                              	         move();
	     	    move();
                              	    }
	     	    checkBeeper();
                              checkBeeper();
	     	    move();
	     	    checkBeeper();



ถ้าต้องการให้เดินไปเรื่อยๆ จนเจอกําแพง:
หลักการ:
- มีการทําซ้ํา (แต่ไม่กําหนดที่ชัดเจน)
- มีการตรวจสอบเงื่อนไข
ในภาษาจาวาและทุกภาษา จะมีคําสั่ง while แปลเป็นภาษาไทย
            ่
ว่า “ในขณะที”




รูปแบบการใช้:
!     ! while(เงื่อนไข)
!     ! {
!     ! !   ชุดคําสั่ง;
!     ! }
แปลว่า
!     ! ในขณะที่เงื่อนไขยังเป็นจริง (True) ก็ให้ทําชุดคําสั่งไป
เรื่อยๆ
Note:
!     ! หน้า 68 คือเงื่อนไขที่ Karel จะเอามาใช้ในการ Action
Code:
!  while(frontIsClear())
!  {
!  !   move();
!  }

Ex3: จงควบคุมให้ Karel ทําการซ่อมหลุม




ตั้งชื่อโปรแกรมว่า ManualFixHole.java
import stanford.karel.Karel;
public class ManualFixHole extends Karel {
	    public void run()
	    {
	    	    for (int counter=0 ;counter<5; counter++)
	    	    {
	    	    	    // walk to the hole
	    	    	    move();
	    	    	    move();
	    	    	    // go down to fix the hole
	    	    	    // by putting beeper
	    	    	    turnRight();
	    	    	    move();
	    	    	    if(noBeepersPresent())
	    	    	    {
	    	    	    	    putBeeper(); // fix the hole
	    	    	    }
	    	    	    turnAround();
	    	    	    move();
	    	    	    turnRight();
	    	    }
	    	    move();
	   	
	   }
	
	   public void turnRight(){
	   	    turnLeft(); turnLeft(); turnLeft();
	   }
	   public void turnAround(){
	   	    turnLeft(); turnLeft();
	   }
}



Ex4. ให้หุ่นยนต์ทําการซ่อมหลุม
หลักการ:
-จะรู้ได้อย่างไรว่าเมื่อไหร่จะเจอหลุม (ดูตารางในหน้า 68)
-แล้วจะหยุดเดินได้เมื่อไหร่
while (frontIsClear())
{
!   move();
}




import stanford.karel.Karel;
public class ManualFixHole extends Karel {
	    public void run()
	    {
	    	    while(frontIsClear())
	    	    {
	    	    	    if(rightIsClear()) // check hole?
	    	    	    {
	    	    	    	    // fix the hole
	   	    	   	    fixHole();
	   	    	   }
	   	    	   move();
	   	    }
	   }
	
	   public void fixHole()
	   {
	   	    turnRight();
	   	    move();
	   	    putBeeper();
	   	    turnAround();
	   	    move();
	   	    turnRight();
	   }
	   public void turnRight(){
	   	    turnLeft(); turnLeft(); turnLeft();
	   }
	   public void turnAround(){
	   	    turnLeft(); turnLeft();
	   }
}


แล๊ปครั้งที่ 2 (ส่งภายในก่อนเข้าคาบเรียน 7 กค. 53)
-ทําแบบฝึกหัดท้ายบทที่ 4 (รายคน)




การบ้านครั้งที่ 2 (ส่งภายในก่อนเข้าคาบเรียน 7 กค. 53)
-จงควบคุมให้ Karel เดินบันไดเองจนถึงขั้นท้าย และสามารถ
 เก็บ beeper ระหว่างทางได้ (สนาม 14x10)
-สรุปประเด็นสําคัญในบทที่ 5 ทั้งหมด




-จงควบคุมให้ Karel เดินบันไดเองจนถึงขั้นท้าย และสามารถ
 เก็บ beeper ระหว่างทางได้ (สนาม 14x10)
-วิเคราะห์ปัญหา
!    > จะทําอย่างไรให้หุ่นยนต์เดินหน้าจนกว่าจะเจอสันบันได
!    !   while(rightIsBlocked())
!    !   {
!    !   !   // ค้นหาสันบันได!
!    !
!    !   }

!   > จะรู้อย่างไรว่า เจอสันบันไดแล้ว ==> เดินขึ้นบันได
!   !   // ค้นหาสันบันได!
!   !   if(frontIsBlocked()) // เจอสันบันได
!   !   !      {
!   !   !      !    stepUp(); // เดินขึ้นบันได
!   !   !      }else
!   !   !      {
!   !   !      !    move();
!   !   !      }
!   !
!   > จะหยุดด้วยวิธีใด

import stanford.karel.Karel;
public class AutoSteppingKarel extends Karel {
	    public void run(){
	    	    while(rightIsBlocked())
	    	    {
	    	    	    if(frontIsBlocked())
	    	    	    {
	    	    	    	    stepUp();
	    	    	    }else
	    	    	    {
	    	    	    	    move(); // keep walking
	    	    	    }
	    	    }
	    	    if(rightIsClear()) //correct the right position
	    	    {
	    	    	    turnRight();
	    	    	    move();
	    	    	    turnLeft();
	    	    }
	    }
	    public void stepUp(){
	    	    turnLeft();
	    	    move();
	    	    turnRight();
	    	    if(frontIsClear())
	    	    {
	    	      move();
	    	    }
	    }
	
	    public void turnRight(){
	    	    turnLeft(); turnLeft(); turnLeft();
	    }
}
วันที่ 7 กรกฏาคม 2553
บทที่ 5:
  - การใช้ Conditional Statement (ประโยคเงื่อนไข)
!     > การตรวจสอบค่าตรรกะของ output จากเงื่อนไข เช่น
!     !    ถ้า (frontIsBlocked())
!     !    {
!     !    !     turnLeft();
!     !    } แต่ถ้าไม่เป็นจริง
!     !    {
!     !    !     turnRight();
!     !    }
=====================
!     !    ถ้า (เงื่อนไข)
!     !    {
!     !    !     ชุดคําสั่ง;
!     !    }
// ถ้ามีคําสั่งเดียวให้เลือกทํา เฉพาะกรณีที่เป็นจริง เช่น
!     !    if(beeperInBag())
!     !    {
!     !    !     putBeeper();
!     !    }
=====================




     *** ถ้ามีเงื่อนไขให้ตรวจสอบว่า จริงหรือเท็จมากกว่า 1
เงื่อนไขเมื่อไหร่ เช่น
!      !    if (rightIsBlocked())
!    !    {
!    !    !    ชุดคําสั่ง A;
!    !    } else if(frontIsClear())
!    !    {
!    !    !    ชุดคําสั่ง B;
!    !    } else if(facingNorth())
!    !    {
!    !    !    ชุดคําสั่ง C;
!    !    }
ข้อสังเกต:
!    จะมีเงื่อนไขให้ตรวจสอบถึง 3 ชุด rightIsBlocked(),
frontIsClear() และ facingNorth()




        Start




                     จริง
  rightIsBlocked()          move();



            เท็จ




   turnLeft();




       Finish

                                      if (rightIsBlocked())
!         !            !      !          !       {
!         !            !      !          !   !    move();
!         !            !      !                }else
!         !            !      !          !     {
!         !            !      !          !   !    turnLeft();
!         !            !      !          !     }

         Start




                       จริง
    rightIsBlocked()          ชุดคําสั่ง A



              เท็จ



                       จริง
     frontIsClear()           ชุดคําสั่ง B



              เท็จ



                       จริง
     facingNorth()            ชุดคําสั่ง C



              เท็จ




        Finish




if (rightIsBlocked())
!     !    {
!     !    !    ชุดคําสั่ง A;
!     !    } else if(frontIsClear())
!     !    {
!     !    !    ชุดคําสั่ง B;
!     !    } else if(facingNorth())
!     !    {
!     !    !    ชุดคําสั่ง C;
!     !    }
!  เสริม:
!  การพิจารณาหรือตรวจสอบเงื่อนไข สามารถตรวจสอบได้
มากกว่าหนึ่ง

!   if ( (เงื่อนไขที่ 1) และ (เงื่อนไขที่ 2) และ (เงื่อนไขที่ 3) )
!   {
!   !      move();
!   }

และ ==> &&
หรืิอ ==> ||

if ( (facingEast()) && (frontIsClear()) && (beepersInBag
()) )
!      {
!      !    move();
!      }
ภาษาเกมส์:
!      ถ้าหันไปทิศตะวันออก และเส้นทางดินสะดวก และมีอาวุธใน
กระเป๋าพร้อม ก็ให้ออกเดินทางได้

!   if ( ( (X) && (X) && (X) ) || (X) )
===========
!   ภาษาเกมส์:
!   ถ้าหันไปทิศตะวันออก และเส้นทางดินสะดวก และมีอาวุธใน
กระเป๋าพร้อม ก็ให้ออกเดินทางได้

!   if(facingEast())
!      {
!      !   if(frontIsClear())
!      !   {
!      !   !     if(beepersInBag())
!      !   !     {
!      !   !     !    move();
!      !   !     }
!      !   }! !
!      }
==========================
if ( (facingEast()) && (frontIsClear()) && (beepersInBag
()) )
!      {
!      !   move();
!      }

==========================




Iterative Statement (ประโยคทําซ้ํา)
!    1. ถ้าต้องการทําซ้ําในจํานวนที่แน่นอน
!    !    for loop
!    เช่น
!   !    for(int counter=0; counter<5 ; counter++)
!   !    !    {
!   !    !    !    fixHole();
!   !    !    }
!      2. ถ้าต้องการทําซ้ําในจํานวนที่ไม่แน่นอน
!      !    while loop
!      เช่น
!      !    while(frontIsClear())
!      !    {
!      !    !    move();
!      !    }
!      หรือ
!      !    while(beeperPresent())
!      !    {
!      !    !    pickBeeper();
!      !    }
ข้อสังเกต:
-ภายใน () ของ while คือ เงื่อนไข ........ ดังนั้น มันจะวนไป
  เรื่อยๆจนเงื่อนไขเป็นเท็จ
-ภายใน () ของ for ตัวเงื่อนไขก็คือ counter < 5 ถ้าเงื่อนไขนี้
  เป็นเท็จ ก็จะสิ้นสุดการทําซ้ํา



Workshop:
!   การเตรียมโค้ดที่ดี:
!   !   1. ควรสร้าง หุ่นยนต์ต้นแบบของตัวเอง (MyKarel) ที่
มี method ที่จําเป็นๆ นอกเหนือจาก 4 methods พื้นฐาน
!   !   2. เมื่อเริ่มสร้างโปรแกรมใหม่ให้ทําการสืบทอด
(Extend) จาก SuperClass หรือ หุ่นยนต์ต้นแบบของตัวเอง

ประเด็นของวันนี้ (14 กค. 53)
1.การ Debug ดีบักโปรแกรม
  a.การกด F11 เพื่อเข้าไปใน Debug Perspective
  b.การแทรกข้อความ เพื่อตรวจสอบว่าโปรแกรมอยู่ในขั้น
    ตอนไหนแล้ว
  c.การแทรกหน้าต่าง Alert เพื่อตรวจสอบว่าโปรแกรมอยู่ใน
    ขั้นตอนไหนแล้ว
2.การวิเคราะห์การทํางานของโปรแกรม ออกมาในรูปของ
  Flowchart
3.เทคนิคอื่นๆ ที่เกี่ยวกับ Karel และเข้าสู่บทที่ 6

===========================================
====
1.การ Debug ดีบักโปรแกรม
    a.การกด F11 เพื่อเข้าไปใน Debug Perspective
เงื่อนไข:
!     1. ต้องมีการสร้าง Run Configuration เรียบร้อยแล้ว (รัน
โปรแกรมเบื้องต้นได้แล้วจริงๆ)
!     2. กําหนด Toggle Breakpoint ไว้ใน code บรรทัดแรกๆ
ภายใน public void run()

!
ขั้นตอน:
     1. ให้กด F11 หรือเข้าไปที่เมนู Run => Debug
2. (Windows) จะปรากฏสนามของ Karel นั้น แล้วให้กดปุ่ม
      Start เพื่อทําการ Debug
3. (Windows) จะปรากฏหน้าต่าง Debug Perspective
หรือ
2. (Mac) ให้คลิ๊กขวาที่โปรแกรม แล้วเลือก Debug As =>
    Debug Configuration
3.    (Mac) กดปุ่ม Debug ในหน้าต่างใหม่ที่เปิดขึ้นมา


การใช้ F6 และ F5
 F6: คือการทํา Step Over หมายถึงเมื่อต้องเรียก method
ย่อย (subroutine) เช่น turnRight, jump แต่ไม่ได้เข้าไปในราย
ละเอียดของ subroutine นั้น
 F5: เรียกว่า Step Into หมายถึง การ debug เข้าไปใน code
ย่อยของ subroutine นั้นเช่น turnRight, jump
!     ควรระวัง:
!     !    ห้ามกด F5 เมื่อมีการเรียก method หลักของ Karel
เช่น move, turnLeft, pickBeeper, putBeeper, frontIsClear
(), rightIsClear()
!     !    จะได้สําหรับ subroutine ที่สร้างขึ้นมาเองเท่านั้น




b. การแทรกข้อความ เพื่อตรวจสอบว่าโปรแกรมอยู่ในขั้นตอน
ไหนแล้ว

!    จะใช้คําสั่ง System.out.println(“Youʼre Here!”);
หรือ
!    จะใช้คําสั่ง System.err.println(“Youʼre Here!”);

แทรกเข้าไปใน code ของ Karel
ตัวอย่าง:
!   !     System.err.println(“found the fence!!!!”);

Note:
-เมื่อ Debug แล้วเจอปัญหาว่าเกิดจาก Code ที่เขียน ในใช้
  เครื่องหมาย comment เช่น // หรือ /* .... */ เพื่อปิด code ไม่
  ให้ run แล้วค่อยๆเปิด code ทีละชุด
- การใช้ System.out หรือ System.err ต่างแค่สีที่พิมพ์ออกมา
และการจัดการความผิดพลาดในระดับ programming low
level
ถ้า code มีโอกาสทําให้โปรแกรมแฮงค์ จะต้องใช้ System.err
เท่านั้น


c. การแทรก popup windows เพื่อตรวจสอบว่าโปรแกรมอยู่ใน
ขั้นตอนไหนแล้ว

!   ใช้คําสั่ง
!   JOptionPane.showMessageDialog(null, "Is
Fence!!");
	   	
*** โดยเมื่อโปรแกรมเรียกใช้คําสั่งนี้ โปรแกรมจะหยุดรอให้ผู้ใช้
กดปุ่ม OK ต่อไป โปรแกรมถึงจะสามารถทํางานต่อไปได้
Ex8:
จงสร้างสนามขนาด 10x5 ดังรูป
แล้วให้ทําการ debug โปรแกรม เมื่อเจอ beeper โดยใช้รูปแบบ
ที่ 2 และรูปแบบที่ 3 เปรียบเทียบกัน
รูปแบบที่ 2 ใช้ System.err.println(“ Oop! I found the
beeper.”);
รูปแบบที่ 3 ใช้
JOptionPane.showMessageDialog(null, "Oop! I
found the beeper.");
Note: สําหรับรูปแบบที่ 3 ให้ใช้ mouse กดที่กากบาทสีแดงซ้าย
มือ แล้วเลือก Import.... ดังรูป




import javax.swing.JOptionPane;

public class AutoPickingKarel extends MyKarel {
	    public void run() {
	    	    // 1. keep walking until the end (Wall)
	    	    while (frontIsClear()) {
	      	           	   // 2. find the beepers and pick up them all
	      	           	   autoPickingBeepers();
	      	           	
	      	           	   move();
	      	           }
	      }

       Start




    frontIsClear          autopickingBeeper




                               move()




      Finish


	
  public void autoPickingBeepers(){
	     while (beepersPresent()) {
	       //System.err.println(" Oop! I found the beeper.");
	       JOptionPane.showMessageDialog(null, "Oop! I found the
beeper.");
	       pickBeeper();
	     }
  }

}



การเขียน Flowchart:
สัญลักษณ์ที่จะใช้ได้แก่
           Start            Finish

1.

2. การตรวจสอบเงื่อนไข (if, if...else, while)
Yes = จริง
No = เท็จ




                   move()        autoPickingBeeper()


3. ชุดคําสั่ง




Flowchart ที่แทน if หรือ if...else
      Start




                  Yes
   frontIsClear         move()




         No




     Finish




Flowchart ที่แทน for loop
  for (int i = 0; i < count; i++)
!    {
!    !    statements;
!    }
Flowchart ที่แทน while loop
  while (test)
!   {
!   !    statements;
!   }

เช่น test => frontIsClear()
 statements => move()




public class AutoPickingKarel extends MyKarel {
	    public void run() {
	    	    // 1. keep walking until the end (Wall)
	    	    while (frontIsClear()) {
	    	    	    // 2. find the beepers and pick up them all
	    	    	    autoPickingBeepers();
	    	    	
	    	    	    move();
	    	    }
	    }
	




  public void autoPickingBeepers(){
	     while (beepersPresent()) {
	       //System.err.println(" Oop! I found the beeper.");
	       JOptionPane.showMessageDialog(null, "Oop! I found the
beeper.");
	       pickBeeper();
	     }
  }

}




ประโยชน์ของการใช้ FlowChart:
1.Programmer จะต้องลดโค้ดที่ซ้ําซ้อน เพื่อไปเป็น
  subroutine หรืิอ ลดโค้ดใน main program (public void
  run()) แล้วเน้นเรียก subroutine
2.จะทําให้การเขียนโปรแกรมถูกต้องมากที่สุด และสามารถเห็น
  การเดินของโปรแกรม ได้อย่างละเอียดมากที่สุด (ลดบักของ
  โปรแกรม)
3.เป็นภาษาที่วิศวกร ใช้สื่อสารกัน




Workshop:
!   การเตรียมโค้ดที่ดี:
!   !   1. ควรสร้าง หุ่นยนต์ต้นแบบของตัวเอง (MyKarel) ที่
มี method ที่จําเป็นๆ นอกเหนือจาก 4 methods พื้นฐาน
!   !   2. เมื่อเริ่มสร้างโปรแกรมใหม่ให้ทําการสืบทอด
(Extend) จาก SuperClass หรือ หุ่นยนต์ต้นแบบของตัวเอง

!    Ex1. จงควบคุมให้ Karel สามารถเดินเก็บก้อนหินที่ถูกกอง
ไว้ระหว่างทางได้ทั้งหมด (สนามขนาด 20x5)




public class AutoPickingKarel extends MyKarel {
	    public void run(){
	    	    // 1. keep walking until the end (Wall)
	    	    while(frontIsClear())
	    	    {	
	    	    	    // 2. find the beepers and pick up them all
	    	    	    while(beepersPresent())
	    	    	    {
	   	    	    	    pickBeeper();
	   	    	    }
	   	    	
	   	    	    move();
	   	    }
	   }
}




!   Ex2. จงควบคุมให้หุ่นยนต์สามารถกระโดดข้ามถังน้ําที่วาง
กีดขวางทางเดินได้ (สนามขนาด 15x8)




public class AutoJumpingKarel extends MyKarel {
	    public void run(){
	    	    // 1. keep walking until the end (Wall)
	    	    while(frontIsClear())
	    	    {
	    	    	    move();
	    	    	    // 2. if found the box, auto jump
	    	    	    if(frontIsBlocked())
	    	    	    {
	    	    	    	    jump();
	    	    	    }
	    	    	
	    	    }
	    }
	    public void jump(){
	      	   turnLeft();
	      	   move();
	      	   turnRight();
	      	   if (frontIsBlocked()){ // Not jump because of having
wall
	      	   	    turnRight();
	      	   	    move();
	      	   	    turnLeft();
	      	   }else{ // Jump
	      	   	    move();
	      	   	    move();
	      	   	    turnRight();
	      	   	    move();
	      	   	    turnLeft();
	      	   }
	      }
}

========================= OR ====================
public class boxJumpingKarel extends MyKarel {
	    public void run()
	    {
	    	    while(frontIsClear())
	    	    {
	    	    	    move();
	    	    	    if(frontIsBlocked()) // check whether finding the
box
	    	    	    {
	    	    	    	     // is found
	    	    	    	     jump(); // box OR wall
	    	    	    }
	    	    }
	    }
	    public void jump()
	    {
	    	    claimUp();
	    	    BoxClaiming();
	    	    claimDown();
	    }
	
	    public void BoxClaiming()
	    {
	    	    if(frontIsClear()) // is box
	    	    {
	    	    	    // walking over the box
	   	    	    move();
	   	    	    move();
	   	    }
	   }
	   public void claimDown()
	   {
	   	    turnRight();
	   	    move();
	   	    turnLeft();
	   }
	   public void claimUp()
	   {
	   	    turnLeft();
	   	    move();
	   	    turnRight();
	   }
}




!   Ex3. จงควบคุมให้หุ่นยนต์สามารถกระโดดข้ามรั้วได้




public class AutoJumpingKarel extends MyKarel {
	    public void run(){
	    	    // 1. keep walking until the end (Wall)
	    	    while(frontIsClear())
	    	    {
	    	    	    move();
	    	    	    // 2. if found the box, auto jump
	      	    	    if(frontIsBlocked())
	      	    	    {
	      	    	    	    jump();
	      	    	    }
	      	    	
	      	    }
	      }
	      public void jump(){
	      	    turnLeft();
	      	    move();
	      	    turnRight();
	      	    if (frontIsBlocked()){ // Not jump because of having
wall
	      	   	    turnRight();
	      	   	    move();
	      	   	    turnLeft();
	      	   }else{ // Jump
	      	   	    move();
	      	        turnRight();
	      	   	    move();
	      	   	    turnLeft();
	      	   }
	      }
}



การ Debug:
!   1. โปรแกรมต้องสามารถรันได้ในเบื้องต้น
!   2. ครั้งแรก อาจจะคลิ๊กขวาที่ชื่อโปรแกรม แล้วเลือก
Debug as ==> แล้วกดปุ่ม Debug
!   3. ในครั้งถัดไป ให้กด F11 ได้ทันที
!   4. ต้องกดปุ่ม Start ที่หน้าต่าง Karel เพิ่มเริ่มต้น debug ที
ละบรรทัด
!   5. ใช้ F6 เพื่อทําการ Debug ทีละบรรทัด หรือ ใช้ F5 เมื่อ
ต้องการ Debug ใน method ที่ตัวเองสร้างไว้ (เท่านั้น)

Ex4: จงควบคุมให้หุ่นยนต์สามารถกระโดดข้ามรั้วที่ไม่เท่ากันได้
Note ปัญหา ที่ต้องแก้ในครั้งหน้า:
!   - ปัญหาหลักของการเดินข้ามวัตถุที่มีความสูงไม่เท่ากัน จะ
ไม่สามารถไม่หยุดต้องที่เจอปลายทาง .... !!!!!!!

Ex4.1:




วิเคราะห์ปัญหา:
!    1. เดินจนสุดทาง (frontIsClear())
!    2. ค้นหาหลุม (rightIsClear())
!    3. ซ่อมหลุมที่ยังไม่ได้ซ่อม (nobeeperPresent())
while(frontIsClear()) // ยังไม่เจอกําแพง
{
!    if(rightIsClear()) // เจอหลุมแล้ว
!    {
!    !     fixHole(); // ลงไปซ่อมหลุม
!    }
!
!    move();
}
=======================
fixHole()
!    // ลงหลุม
!    turnRight();
!    move();
!    // ตรวจสอบ beeper
  if(noBeeperPresent()) // ไม่มีก้อนหินอยู่, หลุมยังไม่ได้ซ่อม
!    {
!    !     putBeeper();
!    }
!    // เดินขึ้น
!    turnAround();
!    move();
!    turnRight();
!    move();

Technique การฝึก (ทําเองก่อน):
!   1. ตีปัญหา เพื่อแยกเป็นปัญหาย่อยๆให้ได้ (30%)
!   2. ร่างโค้ดหยาบๆขึ้นมาก่อน ให้ทํางานได้สัก 70-80%
!   3. มีการสร้าง method ย่อย เพื่อให้ main เรียกใช้
!    4. พลิกแปลงโจทย์ที่ให้ในคาบทุกข้อ อย่างน้อย 2-3 แบบ
!    5. ทําโจทย์เองให้ได้สัก 20 ตัวอย่าง โดยมาจากการติว


Ex5. จาก Ex2 ถ้ามีกล่องวางติดๆกัน จงควบคุมให้หุ่นยนต์เดิน
ข้ามเองได้




============= Technique 1 ================
public class boxJumpingKarel extends MyKarel {
	    public void run() {
	    	    while (rightIsBlocked()) {
	    	    	    if (frontIsBlocked()) // check whether finding the
box
	    	    	    {
	    	    	    	    // is found
	    	    	    	    jump(); // box OR wall
	    	    	    } else {
	    	    	    	    move();
	    	    	    }
	    	    }
	    	    if (rightIsClear()) {
	    	    	    claimDown();
	    	    }
	    }
	   public void jump() {
	   	    claimUp();
	   	    BoxClaiming();
	   }

	   public void BoxClaiming() {
	   	    if (frontIsClear()) // is box
	   	    {
	   	    	    // walking over the box
	   	    	    move();
	   	    	    move();
	   	    	    claimDown();
	   	    }
	   }

	   public void claimDown() {
	   	    turnRight();
	   	    move();
	   	    turnLeft();
	   }

	   public void claimUp() {
	   	    turnLeft();
	   	    move();
	   	    turnRight();
	   }
}
!
============= Technique 2 ================
public class boxJumpingKarel extends MyKarel {
	    public void run()
	    {
	    	    while(frontIsClear())
	    	    {
	    	    	    move();
	    	    	    if(frontIsBlocked()) // check whether finding
the box
	    	    	    {
	    	    	    	    // is found
	    	    	    	    jump(); // box OR wall
	    	    	    	    if(frontIsBlocked())
	    	    	    	    {
	    	    	    	    	    jump();
	   	    	    	   }
	   	    	    }
	   	    }
	   }
	   public void jump()
	   {
	   	    claimUp();
	   	    BoxClaiming();
	   	    claimDown();
	   }
	
	   public void BoxClaiming()
	   {
	   	    if(frontIsClear()) // is box
	   	    {
	   	    	    // walking over the box
	   	    	    move();
	   	    	    move();
	   	    }
	   }
	   public void claimDown()
	   {
	   	    turnRight();
	   	    move();
	   	    turnLeft();
	   }
	   public void claimUp()
	   {
	   	    turnLeft();
	   	    move();
	   	    turnRight();
	   }
}




Ex6. จงควบคุมให้หุ่นยนต์ดําดินไปตามท่อระบายน้ํา จน
สามารถหาทางออกได้
import javax.swing.JOptionPane;

public class DickingKarel extends MyKarel {
	    public void run()
	    {
	    	    while(frontIsClear())
	    	    {
	    	    	    if(beepersPresent())
	    	    	    {
	    	    	    	    JOptionPane.showMessageDialog(null, "Yeah I
found the beeper!");
	    	    	    }
	    	    	    move();
	    	    	    if(frontIsBlocked())
	    	    	    {
	    	    	    	    if(rightIsClear())
	    	    	    	    {
	    	    	    	    	    turnRight();
	    	    	    	    }else if (leftIsClear())
	    	    	    	    {
	    	    	    	    	    turnLeft();
	    	    	    	    }else{
	    	    	    	    	    turnAround();
	   	   	    	   }
	   	   	    }
	   	   }
	   }
}


Ex7. จงควบคุมให้หุ่นยนต์เดินค้นหาขุมทรัพย์เองอัตโนมัติ




!   !

while (nobeeperPresent())
{
!   if(frontIsClear()
!   {
!   !     move();
!   } else
!   {
!   !     // เจอกําแพง
!   !     if(factingEast())
!   !     {
!   !     !    turnLeft();
!   !     !    move();
!   !     !    turnLeft();
!   !     }else if(factingWest())
!   !     {
!   !     !    turnRight();
!   !     !    move();
!   !     !    turnRight();
!   !     }
!   !
!   }

}
Final:
จากที่ผ่านมา:
  - 70% ที่ผ่านมา การคิดอย่างมีระบบและมีตรรกะ
    30% การเขียนโปรแกรมตาม syntax และมาตราฐานที่กําหนด
  - เขียนโปรแกรมในเชิงคณิตศาสตร์ และประยุกต์โปรแกรมสําหรับงานทางด้าน
วิศวกรรม

    ประเด็นของวันนี้:
     1. รู้จักกับตัวแปรในประเภทต่างๆ และลักษณะการนําไปประยุกต์ใช้งาน
       1.1 ประเภทของตัวแปร
       1.2 ความสามารถในการเก็บข้อมูล
       1.3 ขอบเขตของการใช้งานตัวแปร
       1.4 ความสัมพันธ์ระหว่างตัวแปรแต่ละชนิด
      2. การแก้ปัญหาทางคณิตศาสตร์เบื้องต้น

  ================================================
  ตัวแปร:
U    - จากกลางภาค ที่เคยที่เรียกใช้มาก่อนหน้านี้
U    U    for (int i=0; i<10; i++)
U    U    {
U    U    U    ....
U    U    }

U      ตัวแปรชื่อว่า i โดยค่าเริ่มของตัวแปร i เริ่มที่ 0 และทําการบวกค่าเพิ่มทีละ 1

   - ปลายภาค
U    - จะต้องสามารถสร้างตัวแปรขึ้นมาใหม่เองได้ ดังนี้
U    U    int counter = 0;
U    U
       > การตั้งชื่อตัวแปร
  U U     + ต้องใช้ตัวอักษร หรือ _ หรือ $ นําหน้าเท่านั้น เช่น int _age = 35;
U    U    U    U    U    int 7eleven = 11; // ผิด
U    U    U    U    U    int #age = 11;       // ผิด
U    U    + ตัวที่ตามมา
U    ยกเว้น: เครื่องหมายที่ใช้ใน JAVA เองเช่น สัญลักษณ์พิเศษ !#%^&*+-/><
U    U    U    และ space bar ตัวอย่างเช่น
U    U    U    U    U    int my age = 30; // ผิด
U    U    U    U    U    int counter%;        // ผิด
U    U   U   U     U     int my_age = 30; // ถูก
U    U   + การตั้งชื่อ ต้องให้สื่อความหมายชัดเจน
U    U   U   U     U     int number_of_boxes = 55; // สื่อความหมาย
U    U   U   U     U     int b = 55; // ไม่เหมาะ
U    - ประเภทของตัวแปร
F    U   U   + ตัวแปร (Variable) => ตัวที่สามารถเปลี่ยนค่าที่เก็บได้
U    U   U   U     1. ตัวเลข
U    U   U   U     U     1.1 จํานวนเต็ม (Integer)
U    U   U   U     U     1.2 จํานวนจริง (Real Number)
U    U   U   U     2. ตัวอักษรและตรรกะ
U    U   U   U     U     2.1 ตัวอักขระ (Character)
U    U   U   U     U     2.2 ข้อความ (Message/String)
U    U   U   U     U     2.3 ตรรกะ (Boolean) => true/false
U    F   F   Remark:
F    U   U   U     - ตัวแปรเอาไว้เก็บค่า
U    U   U   U     U     + เพื่อใช้ในการคํานวณทางคณิตศาสตร์ (พักข้อมูลชั่วคราว)
U    U   U   U     U     + เพื่อการแสดงผล
U    U   U   U     U     + เพื่อใช้ในการเก็บข้อมูลถาวร (ไฟล์)

F   ตัวเลข:
F    F    1. จํานวนเต็ม (บวก/ลบ)
U    U    U      byte, short, int, long
U    U    U      U    - แตกต่างตรงที่ขนาดในการเก็บข้อมูล (ค่าน้อยที่สุดที่เก็บได้ และ
ค่ามากที่สุดที่เก็บได้)
U    U    U      U    ขึ้นอยู่กับจํานวน bit ของตัวแปรนั้นๆ เช่น
U    U    U      U    U    byte => 8-bit       28 = 256
U    U    U      U    U    short => 16-bit 216 = 65536
U    U    U      U    U    int => 32-bit       232 = 4,300 ล้าน
U    U    U      U    U    long => 64-bit 264 = 1.8 x 1019

U    ผลลัพธ์จากการคํานวณจํานวนอะตอมที่เกิดจากการชนกันของสสาร ==> int

U      U    2. จํานวนจริง (ทศนิยม)
U      U    U    U   - จะขนาดของของตัวแปรที่สามารถเก็บค่าน้อยที่สุด จนถึงค่ามาก
ที่สุดได้ จะเป็นไปตามมาฐาน IEEE654
U      U    U    U   float 128-bit => -3.4x1038 -> 3.4x1038
U      U    U    U   double => -1.7x10308 -> 1.7x10308
U      U    U
U    U    Remark:
U    U    U   - การสร้างตัวแปรที่มีขนาดใหญ่มากๆ เช่น double เป็นต้น ถ้าสร้างสิ้น
เปลืองเกินไป จะทําให้คอมฯ ทํางานช้าลง เพราะ กินหน่วยความจํามาก

        3. ตัวอักษรและตรรกะ
U     U     U    char (character) เก็บได้เพียงตัวอักษรตัวเดียวเท่านั้น เช่น
U     U     U    U    U   char firstLetter = 'M';
U     U     U    String เช่น
U     U     U    U    U   String fullName = "Wiroon Sriborrirux";
U     U     U    boolean (ตรรกะ)
U     U     U    U    U   boolean status = true;
U     U     U    U    U   boolean flag = false;
U     U     U    U    U   ...U
U     U     U    U    U   if (status == true)
U     U     U    U    U   {
U     U     U    U    U   U    U   ....
U     U     U    U    U   }
U     U
    การใช้งานตัวแปรประเภทต่างๆ
U     U     หมายถึง การสร้างตัวแปร (ประกาศตัวแปร) ใหม่ และการกําหนดค่าเริ่มต้น
ให้กับตัวแปรนั้น

U   U   int      number_of_boxes        =                      5       ;
U   <ชนิดตัวแปร>   <ชื่อตัวแปร>  <ตัวดําเนินการ>              <ค่า> <ตัวหยุด>

U   U    U      byte age = 4;
U   U    U      long population = 4523454235L;
U   U    U      float light_speed = 3.0E38F;
U   U    U      double number_of_virus = 3.0E38D;
U   U    U      char sex = 'F';
U   U    U      String name = "Wiroon";
U   U    U      boolean status = true;U
public class MathDemo1 {
	     /**
	      * My First Math Programming
	      */
	     public static void main(String[] args) {
                                                                          				
             short EE_students = 450; // Initialization                   		
             short IE_students = 635;
             short CE_students = 425;
             short ME_students = 353;
             short ChE_students = 345;
             int Number_of_Engineering_Students;




                                                                            		
             Number_of_Engineering_Students = EE_students + IE_students
             	     	     + CE_students + ME_students + ChE_students;
                                                                            		
                                                                            		
	

             System.out.println("Total is " + Number_of_Engineering_Students);




	        }
}


U    Ex1:

U    U       x = 4, 6

public   class MathDemo2 {
	        /**
	          * y = x^2 + 5x - 5
	          */
	        public static void main(String[] args) {
	        	       int x=4;
	        	       int y;
	        	
	        	       y = x*x + 5*x -5;
	        	
	        	       System.out.println("x = " + x);
	        	       System.out.println("y = " + y);
	        }

}
U    Ex2:




U    U      x = 1,2,3,4,5

public   class MathDemo3 {
	        public static void main(String[] args) {
	        	      float x=4.0F;
	        	      float y;
	        	
	        	      if(x!=3.0)
	        	       {
	        	      	      y = ((x*x) + (5*x)) / (x-3);
	        	       }else
	        	       {
	        	      	       System.err.println("Error!.. Divided by Zero ");
	        	      	       y = 0.0F;
	        	       }
	        	
	        	      System.out.println("x = " + x);
	        	      System.out.println("y = " + y);
	        }

}




U    U      ตัวอย่างที่ 1:
                จงคิดภาษีมูลค่าเพิ่มของสินค้าที่มีราคา 34434 บาท
U    U      U    int price = 34434;
U    U      U    byte VAT = 7;
U    U      U    int vated_price = 0;
U           U   U    vated_price = price * (1+VAT/100);
    U
        U       ตัวอย่าง ที่ 2:
F           F    U    2X + 5 = Y
U           U    U     โดยที่ X = {0 - 56}
U           U    U    // Declaration and Initialization
U           U    U    byte X=0;
U           U    U    byte Y=0;

U           U   U    X = 40;
U           U   U    Y = 2*X + 5;
U           U   U    System.out.println(Y);


แล๊ป
e   1. ให้ศึกษาฟังก์ชั่น JAVA Math มาอย่างน้อย 15 ฟังก์ชั่น และ
ทําตัวอย่างมาคนละ 5 ตัวอย่าง
e   2. ให้เขียนสมการคณิตศาสตร์ ดังต่อไปนี้




การบ้าน
1. ให้ทําตามตัวอย่างในบทที่ 6 ทั้งหมด
2. ให้ทุกคน หาตัวอย่างภาษาจาวา จากเว๊ปไซต์ต่างๆ เช่น
www.java2s.com, java dev, java example code แล้วนํา
ตัวอย่างมาทดสอบรัน แล้วไปโพสไปในกระทู้ “ห้องแชร์ความรู้
โปรแกรมภาษาจาวา” อาทิตย์ละ 3 ตัวอย่างต่อคน
เงื่อนไข: ในการตั้งชื่อกระทู้
1. ให้ตั้งชื่อโปรแกรม และคําอธิบายโปรแกรมอย่างสั้น
2. ใส่ source code และผลการรันโปรแกรม
ประเด็นวันนี้:
บทที่ 6:
  1. เริ่มต้นเขียนโปรแกรมเกี่ยวกับตัวแปร:
U    U      จะมี 3 steps ใหญ่ๆ ดังนี้
U    U      U    1.1 สร้าง(ประกาศ)ตัวแปร ที่ต้องการ
U    U      U    1.2 ประมวลผลตัวแปรที่สร้างขึ้นมา
U    U      U    1.3 การแสดงผลลัพธ์ หรือตอบโต้กับผู้ใช้ได้
   2. ตัวดําเนินการ
   3. ขอบเขตของตัวแปร
   4. เก็บข้อมูลเป็นกลุ่ม
บทที่ 7:
   5. ทําความเข้าใจในเรื่องของ Control Flow Statements ทั้ง 4 แบบ
   6. การประยุกต์เพื่อสร้างโปรแกรมที่สามารถสื่อสาร (แสดงผล/รับค่า) กับผู้ใช้ได้
(Interactive Program)
U    6.1 Text mode Style
U    6.2 Graphic mode Style

1. ตัวแปร
U    1.1 การเลือกชนิดของตัวแปรให้เหมาะสมกับ ตัวแปรที่โจทย์ต้องการ
  U  U   1.1.1 รู้ค่าต่ําสุดและค่าสูงสุดจากโจทย์
U    U   Ex: จํานวนประชากร
U    U   U    U    long population = 3456E6L;
U    U   U      % ของผู้หญิง
U      U U    U    float women_percentage = 45.67324F;
U    U   U    Note:
U    U   U    1. ถ้าใช้ Math ฟังก์ชั่นของ JAVA ….. Math.sqrt()
U    U   U    U     U     double x = 242.25D;
U    U   U    U     U     System.out.println(Math.sqrt(x));
U    U   1.1.2 การคํานวณทางคณิตศาสตร์
U    U   U    พิจารณาค่าที่เป็น input และ ค่าที่เป็น output ว่าจะใช้ตัวแปรชนิด
ไหนเก็บ
U    U   U    U    Ex:
U    U   U    U     U     x2+45x - 5 = y
U    U   U    U     U     โดยที่ x = { 0-100}
U    U   U    U     U     int x=0, y=0;
U    U   U    U    Ex:
U    U   U    U     U     ปริมาตรของดวงจันทร์ (PI, r, volumn)
U    U   U    U     U     final double PI = Math.PI;
U     U    U    U     U    double r=0.0D, volumn=0.0D;
  U   U    U    ข้อสังเกต:
U     U    1. ค่าตัวแปรนั้น เป็นค่าคงที่ ตัวอย่างเช่น ค่าคงที่ในโลกคณิตศาสตร์, ค่า
คงที่ ที่พบเห็นในชีวิตประจําวัน (จน.เดือน) ====> อย่าลืม ต้องใช้ final นําหน้า
เสมอ
U     U    U
U     U    1.1.3 ตัวแปร พวกที่ไม่ได้เกี่ยวกับการคํานวณ แต่จะใช้ในการแสดงผล
ข้อความ (char, String) หรือเอามาใช้เป็นตัวเงื่อนไข (boolean)
U     U    Ex:
U     U    U    U     char firstLetter = 'W';
U     U    U    U     String fullname = "Wiroon Sriborrirux";
U     U    U    U
U     U    U    U     System.out.println("First Letter : " + firstLetter);

U    U    U    U    boolean isMale = true;
U    U    U    U    if(isMale)
U    U    U    U    {
U    U    U    U    U    System.out.println("He is a man");
U    U    U    U    }



1.2 การประกาศตัวแปร และกําหนดค่าตัวแปร
  int        number_of_boxes            =                     5             ;
<ชนิดตัวแปร>UU     <ชื่อตัวแปร>        <ตัวดําเนินการ>      <ค่า>      <ตัวหยุด>
U     U  U    U  U     การกําหนดค่า มี 2 รูปแบบคือ
U     U  U    U  U     1.2.1 กําหนดค่าเริ่มต้น (ในระหว่างที่กําลังประกาศตัวแปร)
U     U  U    U  U     1.2.2 กําหนดค่าทั่วไป (ภายในโปรแกรม)
U     U  Ex:
U     U  U    U  x2+45x - 5 = y

U    U    U    U    int x=0;
U    U    U    U    int y=0;
U    U    U    U    ..
U    U    U    U    ..U
U    U    U    U    ..
U    U    U    U    x = 1;
U    U    U    U    // สูตร…..
U    U    U    U    // แสดงผล
U   U   U    U   ….U
U   U   U    U   ...
U   U   U    U   x = 5;
U   U   U    U   // สูตร…..
U   U   U    U   // แสดงผล
U   U   U    U   ….U



U       U 1.3 การนําตัวแปรที่ประกาศไว้มาใช้ใน สมการทางคณิตศาสตร์, การคํา
นวณทั่วๆไป, เก็บข้อมูลแล้วนําเสนอข้อมูล
U       U U   สมการทางคณิตศาสตร์:
U       U U   U    U   - เขียนสูตร และการนํา Math ฟัง
ก์ชั่น UU U   U    x2+45x - 5 = y
U       U U   U    U   ...
U       U U   U    U   …
U       U U   U    U   y = (x*x) + (45*x) - 5;
U       U U   U
U       U U   จากแบบฝึกหัด:
U       U U   U    final double PI = Math.PI;
U       U U   U    final double e = Math.e;
U       U U   U    ..

U   U   U    U   y = Math.sqrt(2*PI*n) * (Math.pow((n/(e)),n));

U   U   U    การคํานวณทั่วๆไป:
U   U   U     Math.ceil(4.5); ==> 5.0
U   U   U    Math.floor(4.5); ==> 4.0
U   U   U    Math.sin(30); // ผิด

U   2. ตัวดําเนินการ (Operator)
U   U    U      1. Arithmetic Operators
U   U    U      > +, -, *, /, %
U   U    U      U   y = (x + 5)/(x*3);
U   U    % (mod) เหลือเศษ (จํานวนเต็ม)
U   U      เช่น 8%4 ==> 0
U   U    U        6%2 ==> 0
U   U    U        6%4 ==> 2
U   U    U        7%2 ==> 1
U   U   U      3%4 ==> 3
U   U   U      2%7 ==> 2
U   U   U      15%2 ==> 1
U   U   U      15%8 ==> 7
U   U   U      8%15 ==> 8
U   U       หาเลขจํานวนเฉพาะ (prime number)

U   U   U      > ++, --
U   U   U      for (int i=0; i<5; i++)
U   U   U      U    i++ ==> i = i + 1;

U   U   U      > +=, /= , -=, *= U   U
U
U   U   U      U   x = x + 5; ==> x+=5;
U   U   U      U   y = x + 5; ==> y+=5; X ผิด
U   U   U      U   y = y + x + 5; ==> y += (x+5);
U   U   U      U   y = y * 8; ==> y*=8;

U   U   2. Relational and Conditional Operators
U   U   U   >, <, >=, <=, !=, ==
U   U   U   Ex1:
U   U   U   U    if(age > 60)
U   U   U   U    {
U   U   U   U    U    Vat = 0.0001;
U   U   U   U    }else
U   U   U   U    {
U   U   U   U    U    Vat = 1.0;
U   U   U   U    }
U   U   U   pay = salary * Vat;
U   U
U   U   U      Ex2:
U   U   U      U   U
U   U   U      U   if(x!=2){
U   U   U      U   y = (x*x)/(x-2);
U   U   U      U   }else
U   U   U      U   {
U   U   U      U   U    System.out.println("Error!! Divided by Zero");
U   U   U      U   }
U   U   U   Ex3:
U   U   U   U    U    70 <= score <= 80
U   U   U   U
U   U   U   U    if(score >= 70)
U   U   U   U    {
U   U   U   U    U    if(score <= 80)
U   U   U   U    U    {
U   U   U   U    U    U    System.out.println("B+");
U   U   U   U    U    }
U   U   U   U    }
U   U   ====================
U   U   Conditional:U U
U   U   Ex3.1:
U   U      if((score >= 70) && (score <= 80))
U   U   U     {
U   U   U   U    System.out.println("B+");
U   U   U     }

U   U   Ex4:
U   U   U   x = 0;
U   U   U   if(!(x==0)) ==> if (x!=0)

U   U   Ex5:
U   U   U   boolean status = true;

U   U   U   if(!status)
U   U   U   {
U   U   U   U    A;
U   U   U   }else
U   U   U   {
U   U   U   U    B;
U   U   U   }

U   ลําดับความสําคัญ:
U   U    x = 2;
U   U    y = x+4*2/4-5;
U   1010 1010 => 170
U   0101 0101 => 85
Value = 170;
while(1)
   UU    Value = Value >> 1;
U   U    delay(100);



เก็บข้อมูลแล้วนําเสนอข้อมูล:
U     U    U    U      - char ==> ‘W’, String ==> “Burapha University”
U     U    U    U      - Array
U     Array:
U     U    U    - เพื่อสร้างตัวแปร ที่ใช้ชื่อเดียว แต่มีหลายบล๊อค ดังนั้นถ้าเราต้องการ
เข้าถึงบล็อคที่ต้องการ จะใช้ index เป็นตัวระบุ
U     U    U    - แต่ละบล็อค จะเป็นตัวแปรชนิดเดียวกัน
U     U    Ex:
U     U    U    byte age1=0;
U     U    U    byte age2=0;
U     U    U    U      ...
U     U    U    U      ...
U     U    U    byte age100=0;
U     U
U     U    U    for (int i=1; i<101; i++)           X
U     U    U      agei = 0;U U      U        U      X

U    U    Array:
U    U    U     byte[] age = new byte[100]; // เป็นการประกาศตัวแปร
U    U    ซึ่งการอ้างอิง index จะเริ่มต้นที่เลข 0
U    U    U     U    age[0] = 20;
U    U    U     U    age[1] = 19;
U    U    U     U    age[2] = 67;
U    U    U     U    ..
U    U    U     U    ..
U    U    U     U    age[99] = 30;



age[0] - age[99]
ในเชิงโปรแกรมค่ที่เปลี่ยนแปลงได้ในการอ้างอิง block คือ ค่าดัชนี (Index)
U   U       for (int i=0; i<100; i++)
U   U       U    age[i] = 0;



U   // การประกาศตัวแปรแบบ Array
U   U    float[] employee_salary = new float[1000];
U   U    U
    // ถ้าต้องการกําหนดค่าเริ่มต้นให้ตัวแปรแบบ Array
U   public class ArrayDemo1 {
	    public static void main(String[] args) {
	    	     float[] intensity = {45.7F, 56.3F, 23.56F, 67.3F, 77.3F, 34.5F};
	    	
	    	     for (int i=0; i<intensity.length; i++)
	    	     {
	    	       System.out.println("Intensity of [" + i + "] is " + intensity[i]);
	    	     }

	       }

}

U   U       - จํานวนบล๊อคของตัวแปร Array ===> intensity.length

U   ประโยชน์ของอะเรย์:
U   U   > งานสถิติศาสตร์
U   U   U   int[] age = new int[68];

U   Ex:
U   U       - หาค่าเฉลี่ย
U   U       - หาค่า Min/Max
U   U
U   U       int[] prices = {41,13,53,14,51,16};U U
U   U       int MAX=0;
U   U       for (int i=0; i<prices.length; i++)
U   U       U    {

U   U       U   }



U   U       > เลขลําดับ
U         int[] x = new int[101];
U     U     U   x[0] = 0;
U     U     U   x[1] = 1;
U     U     U   ..
U     U     U   x[100] = 100;
U     U     > vector, coordinate system (X-Y)
U     U     > Matrix
U     U     > ฐานข้อมูล

U      U      ชนิดของ array:
U      U      U   - มิติ
U      U      U   U      > 1 มิติ จากตัวอย่างที่ผ่านมา
U      U      U          > 2 มิติ Matrix, vector
U      U      U   U      > 3 มิติ 3D
U      U      U
for   (int   i=6; i>0; i--)




บทที่ 7
เน้น do…while, switch…case, break, continue, try…catch
U    U     1. ทําความเข้าใจในเรื่องของ Control Flow Statements ทั้ง 4 แบบ
U    U     2. การประยุกต์เพื่อสร้างโปรแกรมที่สามารถสื่อสาร (แสดงผล/รับค่า) กับผู้
ใช้ได้ (Interactive Program)
U    U     U    2.1 Text mode Style
U    U     U    2.2 Graphic mode Style

U    1. ทําความเข้าใจในเรื่องของ Control Flow Statements ทั้ง 4 แบบ
U     U    U   1.1 Looping
U     U    U   U   > for….loop
U     U    U   U   U   + for (A; B; C)
U     U    U   U   > while…loop
U     U    U   U   U   + while(เงื่อนไข) แปลได้ว่า ในขณะที่เงื่อนไขยังเป็นจริง ให้
ทําคําสั้งภายในปีกกา
U     U    U   U   U   U     while(x < 30)
U     U    U   U   U   U     {
U     U    U   U   U   U     U   ชุดคําสั่ง;
U     U    U   U   U   U     }
U     U     U   U     เงื่อนไขเป็นอะไรได้บ้าง:
U     U     U   U     U      - การเปรียบเทียบในเชิงคณิตศาสตร์ เช่น <,>,>=,<=,!
=,==
U     U     U   U          - ใช้ตัวแปรชนิด boolean (true หรือ false)
U     U     U   U     U      U     boolean primes = false;
U     U     U   U     U      U     ....
U     U     U   U     U      U     while(primes)
U     U     U   U     U      U     {
U     U     U   U     U      U     U    ชุดคําสั่ง;
U     U     U   U     U      U     }
U     U     U   U     U      - การรวมเงื่อนไขต่างๆ โดยใช้ &&, ||
U     U     U   U     U      U     while( (x>40) && (x<50) )
U     U     U   U     U      U     {
U     U     U   U     U      U     U    ชุดคําสั่ง;
U     U     U   U     U      U     }
U     U     U   U     U      U
U     U     U   U     > do while….loop
U     U     U   U     รูปแบบการเขียน:
U     U     U   U     U      do{
U     U     U   U     U      U     ชุดคําสั่ง;
U     U     U   U     U      }while(เงื่อนไข);
U     U     U   U     แปลได้ว่า ให้ทําชุดคําสั่ง 1 ครั้งก่อน แล้วค่อยเข้าไปตรวจสอบ
เงื่อนไข ซึ่งในขณะที่เงื่อนไขยังเป็นจริง ก็ให้วนไปทําชุดคําสั่งข้างบนต่อไป

U    U    U    U    การนําไปประยุกต์ใช้งาน:
U    U    U    U      U - ต้องการแสดงเมนูให้ผู้ใช้ ใช้งานโปรแกรม
U    U    U    U    U   do{
U    U    U    U    U   U    // แสดงเมนูหลัก

U    U    U    U    U    U    // รับค่าเข้ามาจากผู้ใช้
U
U    U    U    U    U    U    // process

U   U     U    U    U    U    // แสดงเมนูว่าจะทําต่อหรือไม่ (y/n) <== choice
(char)

U    U    U    U    U    }while(choice == 'y');
U    U    U    1.2 Decision Making
U    U    U    U    > if…else
U    U    U    U    > if…else if….else
U    U    U    U    U    if(เงื่อนไข)
U    U    U    U    U      A;
U    U    U    U    U    else
U    U    U    U    U      B;
U    U    U    U    > switch…case
ข้อระวังการใช้ switch case:
U    1. ตัวแปรที่จะเอามาตรวจสอบ ต้องเป็นชนิด    จํานวนเต็ม หรือ character เท่านั้น
U    2. ทุก case ต้องมีคําสั่ง break; เสมอ
U    U    U    รูปแบบการเขียน:
U    U    U    U    int choice=0;
U    U    U    U    U    ….
U    U    U    U    U    switch(choice)
U    U    U    U    U    U      {
U    U    U    U    U    U      U   case 1:
U    U    U    U    U    U      U   U   U   U   {
U    U    U    U    U    U      U   U   U   U   U    U    ชุดคําสั่ง;
U    U    U    U    U    U      U   U   U   U   U    U    break;
U    U    U    U    U    U      U   U   U   U   }
U    U    U    U    U    U      U   case 2:
U    U    U    U    U    U      U   U   U   U   {
U    U    U    U    U    U      U   U   U   U   U    U    ชุดคําสั่ง;
U    U    U    U    U    U      U   U   U   U   U    U    break;
U    U    U    U    U    U      U   U   U   U   }

U   U    U   U    U    U   U    default:
U   U    U   U    U    U   U    U   U      U    {
U   U    U   U    U    U   U    U   U      U    U    U    ชุดคําสั่ง;
U   U    U   U    U    U   U    U   U      U    U    U    break;
U   U    U   U    U    U   U    U   U      U    }
U   U    U   U    U    U   }

U   U  U   U   Note:
U   U  U   U   U     - switch…case แตกต่างกับ if…else (else if) ตรงที่
switch…case จะเช็คค่าภายในของตัวแปรนั้น กับแต่กรณีที่ตั้งรอไว้
U   U    U   U   การประยุกต์ใช้งาน:
U   U    U   U   U   1. เพื่อตรวจสอบเลขจํานวนเต็ม หรือ ตัวอักขระ
U   U    U   U   U   2. เน้นการใช้ร่วมกันเมนู



U   U    U   Ex1:
U   U    U   U   U   char sexual;
U   U    U   U   U   …
U   U    U   U   U   …
U   U    U   U   U   sexual = 'T';
U   U    U   U   U   switch(sexual)
U   U    U   U   U   {
U   U    U   U   U   U   case 'F','f':
U   U    U   U   U   U   U   U     System.out.println("Hello Man!");
U   U    U   U   U   U   U   U     …..
U   U    U   U   U   U   U   U     break;
U   U    U   U   U   U   case 'M':
U   U    U   U   U   U   U   U     System.out.println("Hello Girl!");
U   U    U   U   U   U   U   U     …..
U   U    U   U   U   U   U   U     break;
U   U    U   U   U   U   default:
U   U    U   U   System.out.println("Invalid!…..Please enter again");
U   U    U   U   U   U   U   U     break;
U   U    U   U   U   U   }

U   U    U   U   U   if (sexual == 'F')
U   U    U   U   U   {
U   U    U   U   U   …..
U   U    U   U   U   }else if (sexual == 'M')
U   U    U   U   U   {
U   U    U   U   U   ....
U   U    U   U   U   }else
U   U    U   U   U   {
U   U    U   U   U   System.out.println("Invalid!…..Please enter
again");

U   U    U   U   U   }U
U
U    U    U    1.3 Exception handling
U    U    U    มีประโยชน์อะไร:
U    U    U    U    1. ถ้าโปรแกรมทํางานผิดพลาด ไม่ว่ากรณีใดก็ตาม ตัว
exception handling จะละทิ่้ง หรือหลบเลี่ยงการทํางานต่อของโปรแกรม เพื่อป้องกัน
ไม่ให้ระบบ หรือข้อมูล เกิดปัญหา
U    U    U    U    U
U    U    U    U    การใช้งาน:
U    U    U    U    U    try
U    U    U    U    U    {
U    U    U    U    U    U     โปรแกรมหลัก;
U    U    U    U    U    }
U    U    U    U    U    catch(exception type)
U    U    U    U    U    {
U    U    U    U    U    ชุดคําสั่งสํารอง/ฉุกเฉิน; ==> แนะนําให้ผู้ใช้ออกจาก
โปรแกรม หรือทําให้โปรแกรมจบทันที
U    U    U    U    U    }
U    U    U    U    U    U     U     U     U   U
U    U    U    1.4 branching
U    U    U    U    U      - การกระโดดข้ามโปรแกรมส่วนที่เหลือ
U    U    U    U    U      - จะนําไปใช้สองรูปแบบคือ
U    U    U    U    U    U     U     - ใช้ในลูป ***
U    U    U    U    U    U     U     - ภายในปีกกา
U    U    U    U    break:
U    U    U    U    U    - ข้ามโค้ดส่วนที่เหลือ และออกจากลูป/ปีกกาทันที
U    U    U    U    Ex1:
U    U    U    U    U    U     for(int c=0; c<2000; c++)
U    U    U    U    U    U     {
U    U    U    U    U    U     U     …
U    U    U    U    U    U     U     if( c == 500)
U    U    U    U    U    U     U     U     break;
U    U    U    U    U    U     U     …
U    U    U    U    U    U     U     …U
U    U    U    U    U    U     }
U    U    U    U    continue:
U    U    U    U    U    - ข้ามโค้ดส่วนที่เหลือ เพื่อวนลูปใหม่ต่อ
U    U    U    U    U    U     for(int c=0; c<2000; c++)
U    U    U    U    U    U     {
U   U    U    U      U   U   U   …
U   U    U    U      U   U   U   if( c == 500)
U   U    U    U      U   U   U   U    continue;
U   U    U    U      U   U   U   …
U   U    U    U      U   U   U   …U
U   U    U    U      U   U   }

Workshop:
U  Ex1:




public class MathDemo5 {
	    public static void main(String[] args) {
	    	    int[] x = {3,6,23,7,23};
	    	    int y=0;
	    	
	    	    for (int i=0; i<x.length;i++)
	    	    	    y += x[i];
	    	
	    	    System.out.println("Summation is " + y);
	    }

}

Ex2:




แทนค่า x เท่ากับ 2
U  U     double..

public class MathDemo6 {
	     public static void main(String[] args) {
	      	   double x,y,n;
	      	   n=0.0D;
	      	   x=2.0D;
	      	   y=0.0D;
	      	
	      	   for ( n=0.0 ; n<20.0 ; n+=1.0 )
	      	   {
	      	   	     //System.out.println("Debug: " + y);
	      	   	     y += Math.pow(x, n);
	      	   }
	      	
	      	   System.out.println("Summation is " + y);
	      	
	      }

}




Ex3:




มีค่าแม่นยํา ==> Epsilon E-10
public class MathDemo7 {
	     public static void main(String[] args) {
	     	     double x, y, n;
	     	     n = 0.0D;
	     	     x = 2.0D;
	     	     y = 0.0E-300D;
	     	     double Epsilon = 1.0E-15;
	     	     double accuracy=0.0D;
	
	     	     do
	     	     {
	     	     	     y += 1/(Math.pow(x, n));
	     	     	     accuracy = 1/(Math.pow(x, n));
	     	     	     n+=1.0;
	     	     	     System.out.println("n = " + n + " " + accuracy);
	     	     }while (accuracy > Epsilon);
	     	     System.out.println("y = " + y);
	     }

}


Ex4:
  การเขียนโปรแกรมในลักษณะเมนู
*********** Beverage Seller Machine ***********
1) Pepsi
2) Coke
3) Sprite
4) Pure Water
0) Exit
Please Select: 1

public class SwitchCaseDemo1 {
	    public static void main(String[] args) {
	    	     int choice = 0;
	    	     float price = 0.0F;

System.out.println("*********** Beverage Seller Machine ***********");
	    	     System.out.println("1) Pepsi");
	    	     System.out.println("2) Coke");
	    	     System.out.println("3) Sprite");
	    	     System.out.println("0) Exit");
	    	     System.out.print("Please select:");
	    	    choice = 2;   <========= ***** !"#$%&'()*+,!,-./$01$.+,2   keyboard
	    	    switch (choice) {
	    	    case 1:
	    	    	    price = 20.0F;
	    	    	    break;
	    	    case 2:
	    	    	    price = 19.50F;
	    	    	    break;
	    	    case 3:
	    	    	    price = 15.25F;
	    	    	    break;
	    	    case 0:
	    	    	    break;
	    	    default:
	    	    	    System.err.println("Invalid choice!!");
	    	    	    break;
	    	    }
	    	    System.out.println("Total price is " + price);
	    }
}
public class SwitchCaseDemo1 {
	    public static void main(String[] args) {
	    	     char choice;
	    	     float price = 0.0F;

System.out.println("*********** Beverage Seller Machine ***********");
	    	     System.out.println("a) Pepsi");
	    	     System.out.println("b) Coke");
	    	     System.out.println("c) Sprite");
	    	     System.out.println("q) Exit");
	    	     System.out.print("Please select:");
	     choice = ‘b’;   <========= ***** !"#$%&'()*+,!,-./$01$.+,2         keyboard
	     	    switch (choice) {
	     	    case ‘a’:
	     	    	     price = 20.0F;
	     	    	     break;
	     	    case ‘b’:
	     	    	     price = 19.50F;
	     	    	     break;
	     	    case ‘c’:
	     	    	     price = 15.25F;
	     	    	     break;
	     	    case ‘q’:
	     	    	     break;
	     	    default:
	     	    	     System.err.println("Invalid choice!!");
	     	    	     break;
	     	    }
	     	    System.out.println("Total price is " + price);
	     }
}


public class ConvestString {
	      public static void main(String[]args){
	      String word = "Java Programming Language";
	      String s1 = "123",s2 = "350 Baht.";
	      System.out.println("\"" + word + "\" toUpperCase =   \"" + word.toUpperCase()+"\"");
	      System.out.println("\"" + word + "\" toLowerCase =   \"" + word.toLowerCase()+"\"");
	      System.out.println("Convert String\"" + s1 +"\" to   int " + Integer.parseInt(s1));
	      System.out.println("Convert String\"" + s2 +"\" to   double " + Double.parseDouble
(s2.substring(0,3)));
	      }
}
double DegreeToRadien = Math.toRadians( y );




ทําแล๊ป:
  1. ทําแบบฝึกหัดท้ายบทที่ 6 (อย่างน้อยครึ่งหนึ่ง)
  2. แก้ไขที่โพสใน web board

การบ้าน:
 1. ทําแบบฝึกหัดท้ายบทที่ 6 ส่วนที่เหลือ
 2. อ่านทบทวนบทที่ 7 เพิ่มเล่นตัวอย่างที่มีให้
 3. อ่านในส่วนการรับค่าจากผู้ใช้ผ่านทางคีย์บอร์ด
**** ตั้งคําถามผ่าน email, ผ่านเพื่อน, โดยตรง
ประเด็นของวันนี้:
1. การรับค่าจาก keyboard
U   1. การเขียนโปรแกรมแบบ Text Mode
F   F    1.1 Text mode Style (แสดงออกและรับค่าทางหน้าต่าง Console)

==> System.out.println (แสดงผลของโปรแกรมตั้งแต่ต้น จนสิ้นสุดโปรแกรม)
F
หัวใจสําคัญคือ การรับค่าข้อความ ที่ผู้พิมพ์ผ่าน keyboard ==> ภาษาจาวาจะต้องมี
library พิเศษ (JAVAIO) เพื่อดักจับข้อความที่พิมพ์

Concept ของโปรแกรมมาตราฐาน:
U    ขั้นที่ 1: มีการประกาศ (หรือกําหนดค่าเริ่มต้น)
U    ขั้นที่ 2: ส่วนของการประมวลผล (คํานวณ, เปรียบเทียบ, วิเคราะห์)
U    ขั้นที่ 3: ถ้าต้องการรับค่าจากภายนอก (Input) เช่น Keyboard, File, Mouse,
Joystick, Message ระหว่างโปรแกรม
U    ขั้นที่ 4: แสดงผลลัพธ์ให้กับผู้ใช้ (Output) เช่น แสดงบนหน้าจอ, File,Printer
เป็นต้น

Ex1:
       X^3 + 5X^2 + 3X = Y
U   ==> รับค่า x จากผู้ใช้ผานทาง keyboard
U   ข้อสังเกต:
U   U     - ตัวแปรที่รับค่ามาจาก keyboard จะเป็นชนิด String เท่านั้น
U   ==> ต้องแปลงตัว String --> จํานวนเต็ม (int, long)U
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputDemo1 {
	    public static void main(String[] args) {
	    	     // 1. Declaration
	    	     int x,y;
	    	     BufferedReader dataIn = new BufferedReader
	    	     (new InputStreamReader (System.in));
	    	     String user_input = null;
	    	
	    	     System.out.println("Please Enter X = ");
	    	     	     	    // Input from User
	    	     try {
	    	     	     user_input = dataIn.readLine();
	    	     } catch (IOException e) {
	    	    	    e.printStackTrace();
	    	    }
	    	    	
	    	    // Convert String to Integer
	    	    	    x = Integer.parseInt(user_input);
	    	
	    	    // 2. Processing
	    	    y = (x*x*x) + (5*x*x) + (3*x);
	    	
	    	    // 3. Display
	    	    System.out.println("Y = " + y);
	    }

}


Ex2:
U    โปรแกรมคิด VAT 7% ของสินค้า
U    โปรแกรมจะถามราคาของสินค้าทั้งหมด หลังจากนั้นโปรแกรมจะแสดง VAT 7%
ให้ใหม่
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputDemo2 {
	    public static void main(String[] args) {
	    	     float price,total;
	    	     final float VAT = 7.0F;
	    	     BufferedReader dataIn = new BufferedReader
	    	     (new InputStreamReader(System.in));
	    	     String user_input = null;
	    	
	    	     System.out.print("Price = ");
	    	
	    	     try {
	    	     	     user_input = dataIn.readLine();
	    	     } catch (IOException e) {
	    	     	     e.printStackTrace();
	    	     }
	    	
	    	     price = Float.parseFloat(user_input);
	    	     total = price + (price*(VAT/100));
	    	
	    	     System.out.println("Price is " + price +
	    	     	     	    "\nTotal is " + total);
	    }

}
Ex3:
     จงเขียนโปรแกรมเมนูขายเครื่องดื่ม
1) Pepsi
2) Coke
3) Water
4) Quit
Please select: 1
Pepsi Price = 20
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class SwitchCaseDemo1 {
	     public static void main(String[] args) {
	     	     int choice = 0;
	     	     float price = 0.0F;
	     	     BufferedReader dataIn = new BufferedReader
	     	     (new InputStreamReader(System.in));
	     	     String user_input = null;

	     	     do {
	     	     System.out.println("*********** Beverage Seller Machine
***********");
	     	     System.out.println("1) Pepsi");
	     	     System.out.println("2) Coke");
	     	     System.out.println("3) Sprite");
	     	     System.out.println("0) Exit");
	     	     System.out.print("Please select:");
	     	     try {
	     	     	     user_input = dataIn.readLine();
	     	     } catch (IOException e) {
	     	     	     e.printStackTrace();
	     	     }
	     	
	     	     choice = Integer.parseInt(user_input);
	     	
	     	     switch (choice) {
	     	     case 1:
	     	     	     price = 20.0F;
	     	     	     break;
	     	     case 2:
	     	     	     price = 19.50F;
	     	     	     break;
	     	     case 3:
	     	     	     price = 15.25F;
	     	     	     break;
	     	     case 0:
	     	     	     System.out.println("GoodBye");
	     	     	     break;	
	     	     default:
	     	     	     System.err.println("Invalid choice!!");
	     	     	     break;
	     	     }

	     	     System.out.println("Total price is " + price);
	     	     }while (choice != 0);
	     	
	     }

}




ขั้นตอนการเขียนโปรแกรมเพื่อรับค่าจากผู้ใช้ผ่าน Keyboard:
U       1. การ import จาวา libraries ที่เกี่ยวข้องกับ IO (Input/Output)
U       2. เริ่มต้นโปรแกรมหลัก จะต้องมีการประกาศตัวแปรชนิดพิเศษ (Object) ชื่อว่า
BufferedReader เพื่อบอกให้โปรแกรมเตรียมรับค่าผ่านทาง System.in (คีย์บอร์ด)
U       3. ต้องประกาศตัวแปรชนิด String เพื่อเตรียมรับค่า ที่ผู้ใช้ป้อนผ่านทางคีย์บอร์ด
U       4. เขียนคําสั่ง เพื่อสั่งในโปรแกรม ไปรอรับค่าจากคีย์บอร์ด (try….catch)
U       5. ถ้าค่าที่ได้รับเข้ามา ต้องนํามาแปลงเป็นตัวเลข เพื่อไปประมวลทางคณิต
ศาสตร์ใดๆก็ตาม จะต้องทําการแปลง (Convert/Parsing) ตัว String นั้น ให้เป็น
ตัวแปรชนิดตัวเลขที่ต้องการ
U       แต่ถ้าต้องนําข้อความที่อยู่ใน String นั้น ไปแสดงผล ก็ไม่ต้องทําการแปลงใดๆ
ทั้งสิ้น
U       Note:
U       - ถ้าต้องการรับค่าจากผู้ใช้ผ่านทางคีย์บอร์ด มากกว่าหนึ่งค่า ก็ให้เขียนโปรแกรม
เพื่อตั้งแต่ข้อที่ 3-5 ใหม่
U
รายละเอียดของแต่ละข้อข้างต้น:
U       1. การ import จาวา libraries ที่เกี่ยวข้องกับ IO (Input/Output) และสร้าง
method พิเศษ (จะต้องใช้ชื่อเดียวกันโปรแกรม เท่านั้น)
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;

           public class GetInputFromKeyboard {

             public GetInputFromKeyboard() {
             }
e   2. เริ่มต้นโปรแกรมหลัก จะต้องมีการประกาศตัวแปรชนิดพิเศษ (Object) ชื่อว่า
BufferedReader เพื่อบอกให้โปรแกรมเตรียมรับค่าผ่านทาง System.in (คีย์บอร์ด)
U   e    // Create BufferedReader object from Standard
input device.
        // Standard input device is typically a keyboard.
            BufferedReader dataIn = new BufferedReader(new
                      InputStreamReader( System.in) );

U   U    U   3. ต้องประกาศตัวแปรชนิด String เพื่อเตรียมรับค่า ที่ผู้ใช้ป้อนผ่าน
ทางคีย์บอร์ด
U    U   U          String user_input = ""; 3'4%
                    String user_input = null;
e   e    e
U   U   U  4. เขียนคําสั่ง เพื่อสั่งในโปรแกรม ไปรอรับค่าจากคีย์บอร์ด
(try….catch)
U   U   U    System.out. println("Please Enter Your Name:");

              // Read entered data into name variable
              try{
                   user_input = dataIn.readLine();
              }catch( IOException e ){
                   System.out.println("Error occure!");
              }
                  5. ถ้าค่าที่ได้รับเข้ามา นําข้อความที่อยู่ใน String นั้น ไปแสดงผล
ก็ไม่ต้องทําการแปลงใดๆทั้งสิ้น
U     U    U   e   // Display the name
               System.out.println("Hello " + user_input +"!");


U    U   ในกรณีที่ต้องการรับค่ามากกว่าหนึ่งค่า จะต้องเริ่มข้อที่ 3 ใหม่

             // Prompt a user to enter his/her age
             String age= "";
             System.out.println("Please Enter Your Age:");

             // Read entered data into age variable
             try{
                  age = dataIn.readLine();
           }catch( IOException e ){
               System.out.println("Error!");
           }

           int ageint = Integer.parseInt(age);

                   ใน step เมื่อต้องการแปลงค่าที่รับเข้ามา (ชนิด String อยู่) ให้
เป็นตัวเลขที่ต้องการ
U      U     U     U    int, long,float, double
U      int ageint = Integer.parseInt(age);
      long x = Long.parseLong(user_input);
      float y = Float.parseFloat(user_input);
      double z = Double.parseDouble(user_input);


import java.util.*;

public class ScannerDemo {
	    public static void main(String[] args) {

	     	     Scanner in = new Scanner(System.in);
	     	     System.out.println(" WHAT YOUR NAME: ");
	     	     String name = in.nextLine();
	     	     System.out.println(" HOW OLD ARE YOU: ");
	     	     String age = in.nextLine();
	     	     System.out.println(name + " is " + age +" year old.");
	     }
}
U    2. การเขียนโปรแกรมแบบ Graphics Mode

2. การประยุกต์เพื่อสร้างโปรแกรมที่สามารถสื่อสาร (แสดงผล/รับค่า) กับผู้ใช้ได้
(Interactive Program)
F
U    2.2 Graphic mode Style
F      ขั้นตอนการเขียนโปรแกรม:
U    U     1. การ import จาวา libraries ที่เกี่ยวข้องกับ Windows เรียกว่า
JOptionPane
U    e     import javax.swing.JOptionPane;
U    U     2. ก่อนเริ่มต้นโปรแกรมหลัก จะต้องสร้าง method พิเศษ เช่นกัน
U    e     public class InputFromKeyboardJOptionPane {
                public InputFromKeyboardJOptionPane()
                {

                   }
U    U    3. ต้องประกาศตัวแปรชนิด String เพื่อเตรียมรับค่า ที่ผู้ใช้ป้อนผ่านทาง
คีย์บอร์ด
U    U    U    e String user_input = null;
U    U    4. เขียนคําสั่ง เพื่อสั่งให้โปรแกรม เพื่อหน้าต่างขึ้นมา เพื่อรอรับค่าจาก
คีย์บอร์ด
user_input = JOptionPane.showInputDialog("Please
enter your name");

U    U  5. ถ้าค่าที่ได้รับเข้ามา ต้องนํามาแปลงเป็นตัวเลข เพื่อไปประมวลทางคณิต
ศาสตร์ใดๆก็ตาม จะต้องทําการแปลง (Convert/Parsing) ตัว String นั้น ให้เป็น
ตัวแปรชนิดตัวเลขที่ต้องการ ตัวอย่างเช่น

U        int ageint = Integer.parseInt(age);
         long x = Long.parseLong(user_input);
         float y = Float.parseFloat(user_input);
         double z = Double.parseDouble(user_input);

แต่ถ้าต้องนําข้อความที่อยู่ใน String นั้น ไปแสดงผล ก็ไม่ต้องทําการแปลงใดๆทั้งสิ้น
String msg = "Hello " + user_input + "!";
JOptionPane.showMessageDialog(null, msg);ee
e    e
สรุปe     e
U   การรับค่า:
	    	     //System.out.println("Please Enter X = ");
	    	     //user_input = dataIn.readLine();
	    	     user_input = JOptionPane.showInputDialog
	    	     	   ("Please Enter X");

U   การแสดงผล:
	    	    //System.out.println("Y = " + y);
	    	    JOptionPane.showMessageDialog(null, "Y = " + y);

การบ้าน:
U   1. ให้ไปศึกษาการใช้ JOptionPane เพิ่มเติม พร้อมตัวอย่าง 4 ตัวอย่าง

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputDemo2 {
	    public static void main(String[] args) {
	    	     float price,total;
	    	     final float VAT = 7.0F;
	    	     BufferedReader dataIn = new BufferedReader
	    	     (new InputStreamReader(System.in));
	    	     String user_input = null;
	    	
	    	     System.out.print("Price = ");
	    	
	    	     try {
	    	     	     user_input = dataIn.readLine();
	    	     } catch (IOException e) {
	    	     	     e.printStackTrace();
	    	     }
	    	
	    	     price = Float.parseFloat(user_input);
	    	     total = price + (price*(VAT/100));
	    	
	    	     System.out.println("Price is " + price +
	    	     	     	    "\nTotal is " + total);
	    }

}


	       System.out.print("Do you want to continue? (Y/N)");
	    	     try {
	    	     	   user_input = dataIn.readLine();
	    	     } catch (IOException e) {
	    	     	   e.printStackTrace();
	    	     }
	    	     answer = user_input.charAt(0);          // Note**
	    	     }while (answer == 'Y' || answer == 'y');	
OR
	    	     user_input = user_input.toLowerCase();
	    	     answer = user_input.charAt(0);
	    	     }while (answer == 'y');


Price = 40000
Price is 40000.0
Total is 42800.0
Do you want to continue? (Y/N) _

  2. การสร้าง method ในแบบต่างๆ
U    ประเภทของ Method:
U    U   2.1 Method แบบไม่ Return ค่า (Void) และไม่มีรับค่า (no
Parameter; Void) ==> เรียกใช้แบบลอยๆ
U    U   U
U    U   โปรแกรมหลักเรียก method ประเภทนี้ เช่น
U    U   U    U  U   showMenu();
public class MethodDemo1 {
	    public static void showMenu()
	    {
	    	     System.out.println("*********** Beverage Seller Machine
***********");
	    	     System.out.println("1) Pepsi");
	    	     System.out.println("2) Coke");
	    	     System.out.println("3) Sprite");
	    	     System.out.println("0) Exit");
	    }
	
	    public static void main(String[] args) {
	    	     showMenu();
	    }
}
U   U  2.2 Method แบบไม่ Return ค่า แต่รับค่า
U
U   ===> เรียกใช้ method แล้วใส่ parameter ให้ method นั้นนํา parameter
ไปประมวลผลให้ แทนโปรแกรมหลัก
U   U  เช่น
U   U   U   U    System.out.println(“Hello”);

U   U    U   ใช้ method ที่สร้างขึ้นมาเฉพาะ ===>

U   U    U   U   myptr(“Hello”);

public static void myptr(String msg)
	    {
	    	   System.out.println(msg);
	    }

Note:
U  - void ที่อยู่หน้า myptr บอกถึงการไม่ return ค่า
   - String msg หมายถึง การรับ parameter เข้ามา 1 ชุด

U    U   2.3 Method แบบ Return ค่า และไม่รับค่า
U    U   การ return ค่ากลับมาก็เป็นไปตามประเภทตัวแปรที่ต้องการ เช่น return
ค่ากลับมาเป็นชนิด จํานวนทศนิยม (float)

U   U    U   U   float CurrentVAT()

U     U   U  public static float CurrentVAT ()
U     U   U  {
U     U   U  U   return 7.0F;
U     U   U  }
U     Note:
U     U  ในการ return ค่าจะต้องมีคําสั่ง return ในบรรทัดสุดท้ายของ method
นั้นเสมอ

U   U    U   U   ตรรกะ (Boolean)

U   U
U   U    U    U    public static boolean frontIsClear()
U   U    U    U    {
U   U    U    U    U   ...
U   U    U    U      return ture;
U   U    U    U    }

U     Note:
          ในกรณีเป็น method แบบ return ค่า จะต้องมีการประกาศตัวแปรมารองรับ
ค่าที่ถูก return กลับมา เช่น
U     U     U   float result = VAT_Calculator(56000.0F);
	 	 	 VAT_Calculator(56000.0F); X Wrong!!!!

	   Note:
	   	 แปลงจาก ตัวเลข เป็น String
	   	 myptr(String.valueOf(result));

	   	    แปลงจาก String เป็น ตัวเลข
	        float x = Float.parseFloat(user_input);


U   U    2.4 Method แบบ Return ค่า และรับค่า

การบ้าน:
U   1. ให้ไปศึกษาการใช้ JOptionPane เพิ่มเติม พร้อมตัวอย่าง 4 ตัวอย่าง
    2. หาตัวอย่างการสร้าง method เพิ่มเติมเกี่ยวกับการแปลงหน่วยค่าการวัด เช่น
meter, cm., lite, kg, km
U   3. ทําแบฝึกหัดท้ายบท บทที่ 7 ทั้งหมด

Ex4:
U   โปรแกรมลักษณะเมนู คํานวณพื้นที่วงกลม พื้นที่สี่เหลี่ยม และมีการสร้าง
method ย่อย
U   - สูตรพื้นฐาน (PI*R^2), WxH
U   - สร้างเมนู
U   - สร้าง method ของการคํานวณพื้นที่ทั้งสองแบบ
U   - การรับค่าจากผู้ใช้ (รัศมี, กว้างและยาว)

U   Area_Calculator.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JOptionPane;

public class Area_Calculator {
	    public static void CircleArea (double radius)
	    {
	    	     double PI = Math.PI;
	    	     double area = PI*radius*radius;
	    	     //myptr("Circle area is " + String.valueOf(area));
	    	     JOptionPane.showMessageDialog(null, "Circle area is " +
String.valueOf(area));
	    }
	
	    public static void myptr(String msg)
	    {
	    	     System.out.println(msg);
	    }
	    public static void showMenu()
	    {
	    	     myptr("***** Area Calculator *****");
	    	     myptr("c) Circle Area");
	    	     myptr("r) Rectangle Area");
	    	     myptr("q) Quit");
	    }
	
	    public static void main(String[] args) {
	    	     BufferedReader dataIn = new BufferedReader (new
InputStreamReader(System.in));
	    	     String user_input = null;
	    	     char choice;
	    	     showMenu();
	    	     System.out.print("Please select : ");
	    	     try {
	    	     	     user_input = dataIn.readLine();
	    	     } catch (IOException e) {
	    	     	     e.printStackTrace();
	    	     }
	    	     choice = user_input.charAt(0);
	    	     switch (choice)
	    	     {
	    	     case 'c':
	    	     	     	    	     double radius;
	    	     	     user_input = JOptionPane.showInputDialog("Radius = ");
	    	     	     radius = Double.parseDouble(user_input);
	    	     	     CircleArea(radius); // call CircleArea Method
	    	     	     	    	     break;
	    	     case 'r':
	    	     	    	       	    // get width and height from user
	    	     	    	       	    // call RectangleArea method ==>
RectangleArea (width,   height);
	    	     	    	       	    break;
	    	     case 'q':
	    	     	    	       	    myptr("Good Bye");
	    	     	    	       	    break;
	    	     default:	
	    	     }
	    }

}




การเขียนโปรแกรมยุคอนาคต:
- Traditional Programming
e    > ตัวแปร จะต้องถูกกําหนดมาตั้งแต่เริ่มแรก ก่อนที่โปรแกรมจะรัน
ได้
e    > Conditional Statement (Loop,condition) ==> เพื่อเอา
ไว้เป็นเครื่องมือในการประมวลผล ในการกรองผลลัพธ์ต่างๆ ตรวจสอบ
ค่าที่รับมาหรือผลลัพธ์ที่จะเกิดขึ้น
e    > การรับค่าจากผู้ใช้ และแสดงผลลัพธ์ออกทางหน้าจอ / ไฟล์ /
พริ้นเตอร์ เป็นต้น

- Modern Programming (การเขียนโปรแกรมเชิงวัตถุ) Object-
  oriented Programming
e    การเขียนโปรแกรมที่เลียนแบบสิ่งมีชีิวิต และพฤติกรรมของสิ่งมี
ชีวิต / ไม่มีชีวิต
e    > Class (สายพันธุ์/ยีนส์) และ Object (วัตถุ: ตัวที่เกิดขึ้นมาใน
กลุ่มสายพันธุ์ที่กําหนดขึ้นมา)
e    e   = Class
e    e   e    โครงสร้างของ Object ที่ถูกสร้างขึ้น
e    e   e    ประกอบไปด้วย
e    e   e    e    1. คุณสมบัติ (Properties)
e    e   e    e    2. พฤติกรรม/การกระทํา (Behavior/Action)
e   e    = Object
e   e    e    จะขึ้นอยู่กับ Class ต้นแบบที่กําหนดไว้ จะสามารถถูกสร้าง
ได้ไม่จํากัด เมื่อสร้างเสร็จแล้ว สามารถติดต่อกับ Object ตัวอื่นๆใน
สายพันธุ์เดียวกันได้ , สามารถนํา Object เป็นสร้างสายพันธุ์ตัวใหม่ๆ
ได้

e   e       = Properties
e   e       e  คือที่เก็บของตัวแปรทั้งหลาย (Data Field)

e   e       = Behavior/Action ==> Function/Method

B   public class Circle {
	     // Data Fields
	     protected int x;
	     protected int y;
	     protected double radius;
	
	       // Standard Method ==> Constructor method
	       Circle()
	       {
	       	      x=0;
	       	      y=0;
	       	      radius=1.0D;
	       }
	       // User Methods
	       public double Area()
	       {
	       	      return Math.PI*radius*radius;
	       }
	       public double Circumference()
	       {
	       	      return 2*Math.PI*radius;
	       }
	       public void setXY(int _x, int _y)
	       {
	       	      x = _x;
	       	      y = _y;
	       }
	       public void setRadius(double _r)
	       {
	       	      radius = _r;
	       }
}
e   จะเห็นว่าการสร้าง Class เพื่อเป็นต้นแบบของ object ที่จะถูก
สร้างขึ้นในโปรแกรมหลัก จะมีการสร้างตัวแปร (Data Field) ไว้
ภายในเรียบร้อย และจะมีการจํากัดสิทธิการเข้าถึงไว้สามระดับคือ
e   - public ==> สาธารณะ
e   - protected ==> วัตถุในสายพันธุ์เดียวกัน สามารถเข้าถึงได้
e   - private ==> method ของวัตถุตัวนั้นๆ เข้าถึงได้อย่างเดียว

import javax.swing.JOptionPane;

public class CircleDemo1 {
	    public static void main(String[] args) {
	    	     // Object Instance / Creation
	    	     Circle circle_A = new Circle();
	    	     Circle circle_B = new Circle();
	
	    	     double area = circle_A.Area();
	    	     JOptionPane.showMessageDialog(null, "Original Area is " +
area);
	    	     circle_A.setXY(5, 8);
	    	     circle_A.setRadius(4.5);
	    	     area = circle_A.Area();
	    	     JOptionPane.showMessageDialog(null, "New Area is " + area);
	    	     circle_B.setXY(8, 10);
	    	     circle_B.setRadius(6.5);
	    	     area = circle_B.Area();
	    	     JOptionPane.showMessageDialog(null, "B New Area is " + area);
	    	
	    }

}
แนวทางการพัฒนาโปรแกรมเชิงวัตถุ;
e  ประโยชน์
e  e  1. ใช้ในทุกศาสตร์ และสาขาของวิศวกรรม
e  e  2. ใช้แก้ปัญหาในระดับที่ซับซ้อนมากๆได้
e  e  3. ใช้ในการสร้างแบบจําลองทางคณิตศาสตร์
e  e  4. ใช้ในการสร้างกราฟฟิก (2D, 3D)
e  e  5. ใช้ในการพัฒนา Game
e  e  6. ใช้ในการควบคุมการเคลื่อนไหวของหุ่นยนต์
e  e  7. ใช้ในการพัฒนาสู่ AI

e   e    C++ ==> JAVA
e   e
e   ขั้นตอนที่ 1: การสร้าง Class ต้นแบบ
e   e    e  e    e   - Data Fields (สิทธิการเข้าถึงข้อมูล)
e   e    e  e    e   - Methods (สิทธิการเข้าถึง method)
e   e    e  e    e     > Constructor Method (ชื่อเดียวกับ Class)
e   e    e  e    e     > User Methods
e   ขั้นตอนที่ 2: การพัฒนาโปรแกรมประยุกต์
e   e    e  e    e   - การสร้าง Object ที่เกิดจาก Class
	
	    	   Circle circle_A = new Circle();
	    	   Circle circle_B = new Circle();
	
e  e   e  e  e   - การเรียกใช้ หรือขอเข้าถึงข้อมูล Data Field
ภายใน Object ผ่าน (.)
	    	   Circle_A.setXY(5, 8);
	    	   circle_A.setRadius(4.5);
	    	   double area = circle_A.Area();

Note:
e  e  - ต้องรู้ว่า method นั้นมีการ return ค่าหรือไม่
public class Calculator {
	    // Data Fields
	    private double result;
	
	    // Constructor Methods
	    Calculator ()
	    {
	    	     result=0.0D;
	    }
	
	    // User Methods
	    public double plus(double first, double second)
	    {
	    	     result = first + second;
	    	     return result;
	    }
	
	    public int plus(int first, int second)
	    {
	    	     return first+second;
	    }
	
	    public double Max(double first, double second)
	    {
	    	     if (first > second)
	    	     {
	    	     	    return first;
	    	     }
	    	     else
	    	     	    return second;
	    }
}



ให้พัฒนา Calculator Class ต้นแบบ ให้สามารถคํานวณพื้นที่วงกลม
พื้นที่สี่เหลี่ยม และการคํานวณพื้นฐานอื่นๆ (อย่างน้อย 3 แบบ)
การประยุกต์การเขียนโปรแกรมสําหรับ กราฟฟิก 2D
e      - Point2D Class ==> X, Y
e      - Rectangle Class ==> Point2D 4 ตัว
e
    สร้าง Point2D Class ขึ้นมา:
e      public class Point2D {
	       // Data Fields
	       private int x;		     	      	   <== Data Field/Member
	       private int y;
	
	       // Constructor Method
	       Point2D()		    	    	    	      <== Constructor 1
	       {
	       	    this.x = 0;
	       	    this.y = 0;
	       }
	       // Point2D A = new Point2D();
	       Point2D(int x, int y)	   	    <==   Constructor 2
	       {
	       	    this.x = x;
	       	    this.y = y;
	       }
	       // Point2D B = new Point2D(5,5);
}
	    ขั้นตอนต่อมา ต้องสร้าง User Method ที่สามารถเข้าถึง Data
Field แต่ละตัว (X,Y) โดยการเข้านั้นจะมีสองวิธี คือ
e    e     - การเข้าถึงแบบอ่านอย่างเดียว (Read Only) <== Get
e    e     - การเข้าถึงแบบเปลี่ยนแปลงค่า (Write)e    <== Set

โดยเลือกเมนู Sources ===> Generate Getters and Setters
แล้วเลือก Data Field ที่ต้องการเข้าถึง
	       public int getX() {
	       	    return x;
	       }
	       public void setX(int x) {
	       	    this.x = x;
	       }
	       public int getY() {
	       	    return y;
	    }
	    public void setY(int y) {
	    	    this.y = y;
	    }


ในการกรณีที่ต้องการสร้าง User Method เพิ่มเติม เช่น นําค่า X และ
Y มาคํานวณ หรือประมวลผลพิเศษ เช่น method เกี่ยวกับเลื่อนจุด
e   public void translate_X(int distance)
	    {
	    	    this.x += distance;
	    }
	
	    public void translate_Y(int distance)
	    {
	    	    this.y += distance;
	    }



เริ่มเข้าสู่การพัฒนาโปรแกรมประยุกต์
e     - เมื่อ New Class ใหม่ขึ้นมาเช่น Point2DDemo.java
e    - สร้าง object ของจุดพิกัดที่ต้องจาก Point2D Class
import javax.swing.JOptionPane;

public class Point2DDemo {
	    public static void main(String[] args) {
	    	     Point2D A = new Point2D();
	    	     Point2D B = new Point2D(8,0);
	    	     Point2D C = new Point2D(8,5);
	    	     Point2D D = new Point2D(0,5);
	    	
	    	     A.translate_X(3);
	    	     B.translate_X(3);
	    	     C.translate_X(3);
	    	     D.translate_X(3);
	    	
	    	     String details = "A("+A.getX()+","+A.getY()+")";
	    	     details += "\nB("+B.getX()+","+B.getY()+")";
	    	     details += "\nC("+C.getX()+","+C.getY()+")";
	    	     details += "\nD("+D.getX()+","+D.getY()+")";
	    	     JOptionPane.showMessageDialog(null, details);
	    }

}
  สร้าง Rectangle Class ขึ้นมา:
	     ==> การนํา Point2D Object มาเป็น Data Field ให้กับ
Rectangle Class
e     e    e   e
e     Height <=== ระยะทางจากจุด A - D หรือ B - C
e     Widthe <=== ระยะทางจากจุด A - B หรือ C - D
e     Areae    <=== Height x Width



e   Distance(A,D) <=== Height Method
e   Distance(A,B) <=== Width Method
e   Distance Method:
F   public int Distance(Point2D a, Point2D b)
	   {
	   	    int distance;
	   	    double m = Math.pow(b.getX()-a.getX(), 2.0);
	   	    double n = Math.pow(b.getY()-a.getY(), 2.0);
	   	    distance = (int) Math.sqrt(m+n);
	   	    return distance;
	   }
F   Height Method:
F   public int Height()
	   {
	   	    return Distance(this.A,this.D);
	   }
F   Width Method:
F   public int Width()
	   {
	   	    return Distance(this.A,this.B);
	   }
F   Area Method:
F   public int Area()
	   {
	   	    return Height()*Width();
	   }
	 	 	 ./+9!2 3:;/+,<+*./2!9=
3> 58 .> ?8=>@+7 A8& B21 5&

				
DOCUMENT INFO
Shared By:
Stats:
views:53
posted:10/4/2012
language:
pages:114