วันศุกร์ที่ 6 กรกฎาคม พ.ศ. 2550

Homework3

สรุปเนื้อหาที่เรียนไปวันนี้


คอนแรกอาจารย์ก็สอนเรื่องคลาสMath

เช่น Math.PI,Math.E,Math.min(),Math.max(),Math.round(),Math.floor(),Math.celi(),Math.random(),Math.pow()
ข้อแตกต่างระหว่าง Math.round() ,Math.ceil()และMath.floor() คือ

  • Math.round() //ปัดเศษขึ้นลง --->ได้ผลลัพธ์เป็น int
  • Math.ceil() //ปัดเศษขึ้น--->ได้ผลลัพธ์เป็น Double
  • Math.floor() //ปัดเศษลง --->ได้ผลลัพธ์เป็น Double

อาจารย์ก็ให้สร้างโปรแกรมรับข้อมูลทางคีบอร์ด คำนวนพื้นที่วงกลม
import java.util.*;

public class circle{

public static void main(String[]args){

Scanner in=new Scanner(System.in);

System.out.print("input radian: ");

int x=in.nextInt();

Double y ; y = Math.PI*x*x;

System.out.println("Area :"+y );

}
}
อันที่2 เป็นการทดลองใช้ Math
public class circle{

public static void main(String[]args){

System.out.println(Math.round(7.61));

System.out.println(Math.round(7.5));

System.out.println(Math.round(7.4));

System.out.println(Math.round(8.2));

System.out.println(Math.round(8.215));

System.out.println(Math.floor(8.9));

System.out.println(Math.ceil(9.5));

System.out.println(Math.ceil(9.9));

System.out.println(Math.ceil(9.215));

}

}

ผลลัพธ์ที่ได้ คือ

8

8

7

8

8

8.0

10.0

10.0

อันที่3
public class circle{


public static void main(String[]args){
float rand1=(float)Math.random();
float rand2=rand1*10;
int rand3=(int)Math.round(rand2);
System.out.println("Basic random is "+rand1);
System.out.println("Bigger range random is "+rand2);
System.out.println("Rounded up random is "+rand3);
int rand4=(int)Math.ceil(Math.random()*10);
System.out.println("Another Ceiling random is "+rand4);
} }
อาจารย์แนะนำเวปด้วย http://java.sun.com/javase/6/docs/api/java/lang/Math.html .ให้ลองเข้าไปดู
อันนี้ก่อนกลับบ้าน อาจารย์สั่งให้เขียนโปรแกรมนี้ ถ้าใครเขียนเสร็จก็กลับบ้านได้

import java.util.*;
public class score1{

public static void main(String[]arg){

Scanner in=new Scanner(System.in);
System.out.print("Input score1 : ");
Double x=in.nextDouble();
System.out.print("Input score2 : ");
Double y=in.nextDouble();
System.out.print("Input score3 : ");
Double z=in.nextDouble(); Double sum;
sum=x+y+z;
if(sum>=50){
System.out.println("ผ่านและเรียนวิชาใหม่");
System.out.println("Take new Couse"); }
else { System.out.println("ไม่ผ่าน");
System.out.println("เรียนซ้ำ"); }
System.out.println("Bye Bye"); }}
จบการเรียนของวันนี้
ตัวดำเนินการ
Relational Operator





Logical Operator



ลำดับการประมวลผลของตัวดำเนินการต่างๆ เริ่มจากก่อนไปหลัง



เขียนโปรแกรม 1 โปรแกรมโดยใช้ความรู้ที่เรียนไปในวันนี้

โปรแกรมคำนวนเกรดนักเรียน

import java.util.*;

public class grade1{

public static void main(String[]arg){

Scanner in=new Scanner(System.in);

System.out.print("Input your score of Math <0-100> : ");

Double m=in.nextDouble();

System.out.print("Input your score of Biology <0-100> : ");

Double n=in.nextDouble();

System.out.print("Input your score of Chemisty <0-100> : ");

Double o=in.nextDouble();

System.out.print("Input your score of Physic <0-100> : ");

Double p=in.nextDouble();

System.out.print("Input your score of English <0-100> : ");

Double q=in.nextDouble();

System.out.print("Input your score of Thai <0-100> : ");

Double r=in.nextDouble();

Double sum; sum =(m+n+o+p+q+r)/6;

System.out.println("===========================================");

System.out.println("Your Average score: "+sum);

if(sum>=80)

System.out.println("You get 'A'่");

else if(sum>=70)

System.out.println("You get 'B'่");

else if(sum>=60)

System.out.println("You get 'C'");

else if(sum>=50)

System.out.println("You get 'D'");

else { System.out.println("You get 'F'");

System.out.println("Take Course Again"); }

System.out.println("Bye Bye"); System.out.println

("===========================================");

}}

จบHomework3

Homework2


การรับตัวเลขที่ผู้ใช้ป้อนค่าทางคีย์บอร์ด Input number from keyboard (Scanner)

การรับค่าจากทางแป้นพิมพ์

1-ทำให้ใช้ Scannerได้

2-ใช้งานประกาศตัวแปร reader ให้มีค่าเป็น class Scanner

3-ใช้คำสั่งรับค่าจาก reader.nextLine()

**ไม่ว่าต้องการรับค่าเมื่อไร ให้ใช้reader.nextLine() (หรือตัวแปรตัวไหนก็ได้ ที่ประกาศไว้เป็น Scanner) เป็นตัวรับค่าจากทางเป้นพิมพ์**

nextมีโปรแกรมรับข้อมูลสำหรับdata tyepแต่ละแบบ จะเอามาปนกันไม่ได้ ดังนี้

Scanner read=new Scanner(System.in);

char b=read.next().charAt(0); // ชนิดข้อมูล Char

byte c=read.nextByte();// ชนิดข้อมูล byte

short d=read.nextShort();// ชนิดข้อมูล Short

int e=read.nextInt();// ชนิดข้อมูล Int

long f=read.nextLong(); // ชนิดข้อมูล Long

float g=read.nextFloat();// ชนิดข้อมูล Float

double h=read.nextDouble();// ชนิดข้อมูล Double

boolean i=read.nextBoolean();// ชนิดข้อมูล Boolean

ดูเพิ่มเติมที่ http://www.bloggang.com/mainblog.php?id=suar-hine&month=27-05-2007&group=9&gblog=3

Class ที่เป็น Wrapper จัดการกับตัวเลข


การเปลี่ยนแปลงข้อมูลสายอักขระเป็นข้อมูลตัวเลข และ การเปลี่ยนตัวเลขเป็นสายอักขระ

  • Integer Type Wrapper สำหรับจำนวนเต็ม

- public Integer(String s)

- public static String toString(int I, int radix)

- public static int parseInt(String s, int radix)

- public static Integer valueOf(Strings, int radix)

// radix คือระบบเลขฐาน เช่น 2, 8 10, 16 โดยปกติจะเป็นฐานสิบ

  • Double สำหรับจำนวนจริง

- public Double(String s)

- public static String toString(int I, int radix)

- public static Double valueOf(Strings, int radix)

// radix คือระบบเลขฐาน เช่น 2, 8 10, 16 โดยปกติจะเป็นฐานสิบ

ขั้นตอน เปลี่ยนข้อมูลสายอักขระเป็นข้อมูล Double ซึ่งเป็น class Double ที่เก็บค่าจำนวนจริง แต่ไม่สามารถเรียกไปคำนวณได้ Double tmpV = Double.valueOf(StrVal); เปลี่ยนค่าของ Double เป็นข้อมูลจำนวนจริงด้วย method doubleValue() double realVal = doubleValue(tmpV);


ดูเพิ่มเติ่ม www.cs.sci.ku.ac.th/~chulee/java-ku/java-5.ppt

Homework1(ตัวดำเนินการ)

ตัวดำเนินการ (Operator)
ตัวดำเนินการ (Operator) ในการเขียนโปรแกรมภาษาจาวาประกอบด้วย
- ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operator)

- ตัวดำเนินการกำหนดค่า (Assignment Operator)

- ตัวดำเนินการเปรียบเทียบ (Equality and Relational Operator)

- ตัวดำเนินการทางตรรกะ (Logical Operator)

1. ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operator) เป็นตัวดำเนินการที่จำลองมาจากสมการทางคณิตศาสตร์ โดยในภาษาจาวาจะใช้เครื่องหมายต่างๆ แทนตัวดำเนินการทางคณิตศาสตร์ต่างๆ ดังนี้

ลำดับการทำงานของตัวดำเนินการทางคณิตศาสตร์

เมื่อมีตัวดำเนินการหลายตัวอยู่ในสมการเดียวกัน เช่น int myNumber = 2 + 2 * 5 / 3;

ภาษาจาวามีกฏในการเรียงลำดับ ดังนี้

1. คำนวนสมการที่อยู่ภายในวงเล็บก่อนเป็นอันดับแรก โดยเริ่มจากวงเล็บในสุด

2. ถ้าสมการที่เหลือไม่มีวงเล็บแล้ว จะเรียงลำดับดังนี้

2.1 คูณ, หาร และ mod จะถูกคำนวนก่อน โดยมีความสำคัญอยู่ในระดับเดียวกัน ถ้ามีหลายตัว จะเริ่มคำนวนจากซ้ายไปขวา

2.2 บวก และ ลบ จะถูกคำนวนเป็นลำดับถัดมา โดยมีความสำคัญอยู่ในระดับเดียวกัน ถ้ามีหลายตัว จะเริ่มคำนวนจากซ้ายไปขวา

Ex. 1 y = 2 * 5 * 6 + 3 * 4 + 7

ลำดับการทำงานคือ

1. 2 คูณ 5 ( y = 2 * 5 * 6 + 3 * 4 + 7 )

2. 10 คูณ 6 ( y = 10 * 6 + 3 * 4 + 7 )

3. 3 คูณ 4 ( y = 60 + 3 * 4 + 7 )

4. 60 บวก 12 ( y = 60 + 12 + 7 )

5. y = 72 + 7สุดท้าย ผลลัพธ์เท่ากับ 79

2.ตัวดำเนินการกำหนดค่า (Assignment Operator) คือตัวดำเนินการที่ใช้สำหรับกำหนดค่าให้กับตัวแปร ทิศทางการทำงานจะเป็นจากขวาไปซ้าย คือกำหนดค่าทางขวาให้กับตัวแปรทางซ้าย สัญลักษณ์ที่ใช้คือ เครื่องหมายเท่ากับ ( = ) เช่น int number1 = 5; // กำหนดให้ตัวแปร number1 มีค่าเป็น 5เครื่องหมายเท่ากับ สามารถใช้กำหนดค่าได้โดยสมบูรณ์อยู่แล้ว แต่ในความเป็นจริง ภาษาจาวามีตัวแปรที่ใช้สนธิกันระหว่างตัวดำเนินการทางคณิตศาสตร์และตัวดำเนินการกำหนดค่าในครั้งเดียว เพื่อความสะดวกในการเขียนโปรแกรม เช่นy = y + 10สามารถเขียนแทนได้ด้วยy += 10โดยตัวดำเนินการที่มีลักษณะสนธิดังกล่าวมีดังนี้



นอกจากตัวดำเนินการแบบสนธิดังกล่าวแล้ว ยังมีตัวดำเนินการอีกชนิดหนึ่งที่มีเพื่อความสะดวกในการเขียนโปรแกรม ได้แก่ ตัวดำเนินการที่ใช้เพิ่มค่าหรือลดค่าของตัวแปรทีละ 1 ตัวดำเนินการแบบนี้มักใช้ในการทำงานแบบวนซ้ำ ซึ่งจะกล่าวถึงในตอนต่อไป ตอนนี้มาดูวิธีเขียนและความแตกต่าง ธรรมดาเวลาเราจะเพิ่มค่าให้กับตัวแปรทีละ 1 เราอาจเขียนดังนี้
counter = counter + 1 // variable = variable + 1
แต่เราสามารถเขียนแบบย่อที่สามารถลดจำนวนการเขียนโค้ดลง และมีประสิทธิภาพมากขึ้นได้ ดังนี้ ++counter หรือ counter++จะเป็นการเพิ่มค่าให้กับตัวแปร counter อีก 1 เหมือนกัน แต่ความแตกต่างกัน อยู่ตรงที่ตำแหน่งของเครื่องหมายบวกสองอันที่อยู่ด้านหน้าหรือหลังตัวแปรหากอยู่ด้านหน้าตัวแปร (++counter) จะเพิ่มค่าตัวแปร counter ขึ้น 1 แล้วจึงนำค่าในตัวแปร counter ไปใช้หากอยู่ด้านหลังตัวแปร (counter++) จะนำค่าเก่าของตัวแปร counter ไปใช้ แล้วจึงเพิ่มค่าให้ตัวแปร counter อีก 1

ตัวอย่าง

===========================
// IncrementOperator.java

public class IncrementOperator { public static void main(String[] args) {
int prefix = 0;
int postfix = 0;
System.out.println("On the fly Prefix = "+ ++prefix);
System.out.println("after addition Prefix = "+ prefix);
System.out.println("On the fly Postfix = "+ postfix++);
System.out.println("after addition Postfix = "+ postfix); }}===========================
โปรแกรมจะแสดงผลออกมาดังนี้
3. ตัวดำเนินการเปรียบเทียบ (Equality and Relational Operator) ใช้สำหรับเปรียบเทียบค่า 2 ค่า และจะ return ค่าออกมาเป็น boolean (true/false) ถ้าหากนิพจน์เป็นจริง ก็จะให้ค่า true ถ้านิพจน์เป็นเท็จ ก็จะให้ค่า false ข้อควรจำ

- เครื่องหมายที่มี 2 ตัว จะต้องเขียนติดกันเสมอ

- เครื่องหมาย >= (มากกว่าหรือเท่ากับ) และ <= (น้อยกว่าหรือเท่ากับ) จะต้องเขียนเครื่องหมายเท่ากับไว้ด้านขวาเสมอ

4. ตัวดำเนินการทางตรรกะ (Logical Operator) เมื่อต้องการตรวจสอบตัวดำเนินการเชิงเปรียบเทียบหลายๆ อัน จะใช้ตัวดำเนินการทางตรรกะในการตรวจสอบ




จะเห็นว่ามี AND สองแบบคือ &&amp; กับ & และมี OR อีก 2 แบบ คือ กับ สาเหตุแบบนี้เนื่องจาก conditional AND (&&) และ conditional OR ( ) จะหยุดทำการตรวจสอบทันทีเมื่อรู้แน่ชัดแล้วว่าคำตอบของการตรวจสอบนั้นจะตอบว่า true หรือ false เช่น( gender == "female" ) && ( age >= 18 )
หาก gender ไม่ได้มีค่าเป็น "female" โปรแกรมก็จะหยุดการตรวจสอบทันที เพราะรู้แล้วว่าจะคำตอบของการตรวจสอบเป็น false การที่โปรแกรมมีหลักการทำงานเช่นนี้ เค้าเรียกว่า "Short-Circuit Evaluation" มีข้อดีคือ สามารถช่วยป้องกันการเกิด error ได้ระดับหนึ่ง เช่น ถ้าต้องการตรวจสอบว่า( 10 / a == 2 )

กรณีนี้ ถ้าหากตัวแปร a เป็น 0 จะเกิด error เพราะตัวหารเป็น 0 สามารถใช้หลักการทำงาน Short-Circuit Evaluation ช่วยป้องกันการเกิด error ได้ ดังนี้( a != 0 ) && ( 10 / a == 2 ) // ถ้า a มีค่าเท่ากับ 0 นิพจน์แรกเป็นเท็จ ก็จะหยุดการทำงานไม่ตรวจสอบนิพจน์สอง ช่วยป้องกัน error ได้

ด้วยเหตุที่ conditional AND (&&) และ conditional OR ( ) จะหยุดทำการตรวจสอบทันทีเมื่อรู้แน่ชัดแล้วว่าคำตอบของการตรวจสอบนั้นจะตอบว่า true หรือ false ดังนั้นหากโปรแกรมเมอร์ต้องการให้มีการตรวจสอบทั้งสองนิพจน์ (นิพจน์สองอาจให้เพิ่มค่าตัวแปร โดยไม่สนใจนิพจน์แรก) เช่น( gender == "female" ) && ( ++counter < gender ="=">

ที่มาhttp://www.thaiarchaeology.com/viewtopic.php?board=&id=890