การสร้างโปรเจกใน NetBeans IDE
สำหรับคนที่หัดเขียน Java เป็นครังแรกนะครับ วันนี้เรามาพาสร้างโปรเจกใน NetBeans IDE ไม่พูดร่ำทำเพลง มาเริ่มกันเลย ขั้นแรกก็ new project
พอคลิก New Project ก็จะแสดงหน้าต่างให้เรา ตั้งชื่อโปรเจก ในที่นี้ ตั้งชื่อเป็น InceptionWatchQ
ตั้งชื่อโปรเจกตามรูป หรือตั้งตามใจเลยก็ได้ครับ |
ให้เราทำการ คลิกขวาที่ default package แล้วก็ new > Java Class
พอได้แล้วก็ ตั้งชื่อให้เหมือนกันกับชื้อโปรเจก ดังรูป แล้วก็กด finish
พอกดเสร็จ มันก็จะเจนค่าให้ดังรูป
ทีนี้ก็ได้ Class InceptionWatch มาแล้ว ซึ่งตอนนี้ยังไม่สามารถ run โปรเจกได้เนืองจากยังไม่มี Mathode main ให้เราพิมพ์
public static void main (String [] args){
}
[Java OOP]Class และ Object คืออะไร
วันนี้มารู้จัก Class และ Object กัน ซึ่งในหัวข้อนี้มันจะเกี่ยวข้องกับเรื่อง Object-oriented programming โดยเรามาฝึกมองสิ่งที่ต่างๆเป็นวัตถุ ก่อนจะเข้าเรื่องผมขอบอกเลยว่าถ้าเข้าใจเรื่องนี้จะสามารถนำความรู้ไปประยุกต์ใช้ได้อย่างมากมายและอาจจะช่วยให้เขียนโปรแกรมได้ง่ายขึ้นอีกด้วยในบ้างกรณี
class คือ คุณลักษณะ หรือคุณสมบัติของวัตถุใดวัตถุหนึ่ง หรื่อจะง่ายๆคือเป็นตัวกำหนดคุณสมบัติได้ถูกสร้างขึ้น จะขอยกตัวอย่าง class Dog สุนัขก็จะมีคุณสมบัติ เช่น ชื่อ พันธฺุ์ และอื่นขึ้นอยู่กับคุณสมบัติของสิ่งที่เราสร้าง
หลักการเขียน class จะมีองค์ประกอบอยู่ 3 ส่วนด้วยกัน
สรุป Class และ Object
class คือ คุณลักษณะ หรือคุณสมบัติของวัตถุใดวัตถุหนึ่ง หรื่อจะง่ายๆคือเป็นตัวกำหนดคุณสมบัติได้ถูกสร้างขึ้น จะขอยกตัวอย่าง class Dog สุนัขก็จะมีคุณสมบัติ เช่น ชื่อ พันธฺุ์ และอื่นขึ้นอยู่กับคุณสมบัติของสิ่งที่เราสร้าง
หลักการเขียน class จะมีองค์ประกอบอยู่ 3 ส่วนด้วยกัน
- คุณสมบัติ(Field) คือ ตัวแปรที่เราจะสร้างให้กับคุณสมบัติ
- คอนทรักเจอร์(Constructor) คือ เป็นกำหนดการรูปแบบการเรียกใช้ Class
- เมทธอต(Method) คือ ฟังชั่นก์ หรือ เหตุการณ์ เช่น การตั้งชื่อให้กับสนัข การกำหนดสายพันธุ์ หรือ จะใส่เหตุการณ์ต่างๆก็ได้เช่น การกิน นอน เดินเล่น เห่า เป็นต้น
ให้เรานึกถึงความเป็นจริงในชีวิตของเราว่าสนัขควรมีคุณสมบัติอะไรบ้าง ในที่นี่จะให้สุนัขมีคุณสมบัติ คือ มีชื่อ มีสายพันธฺุ์ มีเมทธอต คือ ตั้งชื่อสุนัขได้ กำหนดสายพันธฺุ์ได้ และสามารถเรียกดู ชื่อ กับ สายพันธุ์ ได้ด้วย
/* * @author http://javaagkasit.blogspot.com */ public class Dog { //กำหนดคุณสมบัติ(Field) String Name; String Breed; //คอนทรักเจอร์(Constructor) Dog(){ } // เมทธอต สำหรับ กำหนดชื่อสุนัข public void setName(String name){ Name = name; } // เมทธอต สำหรับ กำหนดสายพันธุ์ public void setBreed(String breed){ Breed = breed; } // เมทธอต สำหรับไว้ให้เรียกดูชื่อสุนัข public String getName(){ return Name; } // เมทธอต สำหรับไว้ให้เรียกดูสายพันธุ์สุนัข public String getBreed(){ return Breed; } }เมื่อสร้างคลาสเสร็จ เรามาลองเรียกใช้งานคลาส Dog เราจะได้ทราบว่า Object มันคืออะไรกันแน่
/** *class สำหรับ ทดสอบ class Dog * @author http://javaagkasit.blogspot.com */ public class TestDog { public static void main(String [] args){ Dog d = new Dog(); //สุนักตัวที่ 1 d.setName("มี่มี้"); // ตั้วชื่อว่า มี่มี้ d.setBreed("ชิวาวา"); // สุนักพันธุ์ ชิวาวา Dog d2 = new Dog(); //สุนักตัวที่ 2 d2.setName("ก้าน"); // ตั้วชื่อว่า ก้าน d2.setBreed("บางแก้ว"); // หมาพันธุ์ บางแก้ว System.out.println("สุนักตัวที่ 1"); System.out.println(" ชื่อ :"+d.getName()); System.out.println("พันธุ์ :"+d.getBreed()); System.out.println("สุนักตัวที่ 2"); System.out.println(" ชื่อ :"+d2.getName()); System.out.println("พันธุ์ :"+d2.getBreed()); } }
เวลาเราจะเรียกใช้ class Dog ก็จะทำการ Dog d = new Dog(); ตัว d นั้นล่ะเค้าเรียก Object ซึ่งออปเจกนี้จะมีคุณสมบัติเหมือนกับที่เรากำหนดไว้ใน class Dog ทุกประการ ในหนึ่งออปเราจะมองให้เป็นวัตถุอย่าง ซึ่ง ออปเจก d ที่เราได้ new เราจะมองเป็นสนุกหนึ่งต้ว
Dog d = new Dog(); //สุนักตัวที่ 1 d.setName("มี่มี้"); // ตั้วชื่อว่า มี่มี้ d.setBreed("ชิวาวา"); // สุนักพันธุ์ ชิวาวา
เป็นการสร้าง ออปเจก สุนัข มาหนึ่งตัว แล้วก็ตั้งชื่อให้มัน โดยการ d.setName("มี่มี้"); แล้วก็ระบุสายพันธุ์ให้มันโดยการ d.setBreed("ชิวาวา"); จะเห็นว่าการที่จะเรียกใช้เมทธอตใน class Dog ได้โดยการใช้ "." พอเรากำหนดชื่อ สายพันธุ์ อยากจะแสดงรายของสุนัขตัวนี้( ออปเจก d)ก็ทำได้ไดย
System.out.println("สุนักตัวที่ 1"); System.out.println(" ชื่อ :"+d.getName()); System.out.println("พันธุ์ :"+d.getBreed());
ผลการรันโปรแกรม
สรุป Class และ Object
Class เป็นการกำหนดคุณสมบัติของวัตถุสิ่งใดสิ่งหนึ่ง และObject ก็เป็นการเรียกใช้ Class นั้นๆโดยที่ object นั้นๆจะมีคุณสมบัติเหมือนกับ class ที่เรียกใช้ทุกประการ
เรื่องที่ควรศึกษาเพิ่มเติม - การใช้งาน Constructor
[Java]การใช้ while loop
คำสั่ง while loop เป็นคำสั่งสำหรับวนลูปอีกแบบจะมีเงื่อนไขการทำงานอยู่ว่า ถ้าเงื่อนไขเป็นจริงทำงานต่อไปเรื่อยๆและจะออกจากลูปเมื่อเงื่อนไขเป็นเท็จ
/**
* โปรแกรมนับเลข 1 - 10
* @author http://javaagkasit.blogspot.com
*/
public class whileloop {
public static void main(String[] args) {
int count = 1 ;
while (true) {
if(count <= 10){
System.out.println(count++);
}else{
break;
}
}
}
}
จากโค้ดด้านบนเป็นโปรแกรมนับเลข 1 ถึง 10 การทำงานก็คือว่า ในลูป while จะวนไปเรื่อยๆภายใน{}ของ while ถ้า count น้อยกว่าหรือเท่า 10 ก็จะปริํนค่า count ออกมาพร้อมทั้งเพิ่มค่า count ขึ้นที่ละหนึ่ง เมื่อใดที่ค่า count มีค่าไม่ได้อยู่ในเงื่อนไข ก็จะออกจากลูป while
ในการใช้คำสั้งวนใดๆก็ตาม จะมี 2 คำสั้งที่เกี่ยวข้อ คือ break กับ continue การใช้งานก็ง่ายนิดเดียว break คือ ออกจากลูป ส่วน continue คือทำงานต่อไป ซึ่งการใช้งานจริงส่วนใหญ่ก็เป็น break ซะมากกว่า continue
ศึกษาเพิ่มได้ที่
- การใช้ if else http://javaagkasit.blogspot.com/2012/08/if-else.html
- การสร้างโปรเจกใน NetBeans IDEhttp://javaagkasit.blogspot.com/2012/09/netbeans-ide.html
- Class และ object คืออะไร
[Java]การใช้ for-each
นอกเหนือจากการใช้ For loop แบบมี ค่าเริ่ม;เงื่อนไข;เพิ่มค่า ยังมีการวนลูปอีกแบบหนึ่งในภาษา Java คือ for - each loop โดยมีรูปแบบคำสั่งดังนี้
for(declaration : expression) {
statement
}
- declaration : เป็นการประกาศตัวแปรทั่วไป เช่น String color
- expression : จะเป็นอาร์เรย์ (array) หรือ Object
- statement : อาจจะเป็น การคำนวน การแสดงค่า(print)
แล้วมันต่างจาก for ธรรมดาอย่างไร ข้อดีของ for-each คือกรณีที่เราต้องการโชว์ข้อมูลใน Array ทั้งหมด for -each จะทำได้ง่ายกว่า อาจจะมองภาพยังไม่ออกลองดูตัวอย่างโค้ดด้านล่าง
/*
* การใช้งาน foreach
* @author http://javaagkasit.blogspot.com/
*/
public class foreach {
public static void main(String [] args){
String [] colors = {"Red","Blue","Pink","Yellow","Orange"};
//for ธรรมดา
for(int i =0 ; i< colors.length ;i++){
System.out.println(colors[i]);
}
//for -each
for(String c : colors){
System.out.println(c);
}
}
}
จากโค้ดด้านบน จะเห็นได้ว่าการใช้ for-each จะทำได้ง่ายและเร็วกว่าการใช้ for ธรรมดา แต่ในทางกลับกันในความสะดวกสะบายของ for - each ยังมีข้อเสียอยู่ ในกรณี ถ้าเราต้องการแสดงเฉพาะตำแหน่งเราต้องการโชว์ เช่น โชว์เฉพาะตำแหน่ง colors[0] จะทำไม่ได้
เนื่้อหาที่เกี่ยวข้อง
- การใช้ for http://javaagkasit.blogspot.com/2012/08/for.html
- การใช้ switch casehttp://javaagkasit.blogspot.com/2012/08/switch-case.html
- การใช้ if else http://javaagkasit.blogspot.com/2012/08/if-else.html
- การใช้ if else if http://javaagkasit.blogspot.com/2012/08/if-else-if.html
[JAVA] Inception Watch step by step
วันนี้เราจะมาทำโจทย์ Inception Watch แบบ step by step
โจทย์ Inception Watch สามารถดาวโหลดได้ที่ลิงค์ http://goo.gl/48Zvudจากบทความเดิมที่ผมเคยเขียนไว้ ACM InceptionWatchQ JAVA วิธีทำ คือ ให้คำนวณกลับจากชั้นสุดท้ายมายังชั้นแรก ในชั้นสุดท้าย (level n) จะคำนวณเวลาของ Tsk ที่ชั้นนั้นได้โดยตรง ส่วนชั้น n-1 ต้องเอาเวลาทั้งหมด(elapsed time) ของชั้น n หารด้วย 12 แล้วบวกกับ Tnext ของชั้นนั้น ก็จะได้ Tsk ของชั้น n-1
อ่านแล้วคงรู้งงๆมาลองคำนวน เพื่อจะช่วยให้เห็นภาพมากขึ้น ซึ่งมองภาพการเขียนโปรแกรมของเราได้ชัดเจนมากยิ่งขึ้นด้วย
1.การวิเคราะห์โจทย์และลองคำนวณผลลัพธ์ด้วยมือก่อนเขียนโปรแกรม
1.1 แปลงเวลาทั้งหมดให้เป็นหน่วยวินาทีทั้งหมดของทุกๆชั้น
โดยอ้างอิงจากโจทย์ตัวอย่างต่อไปนี้
1 48 m
2 6 h
3 2 d
4 24 d
-1
หน่วยเวลาทีควรรู้นะครับ
1 นาที(m) = 60 วินาที
1 ชั่วโมง(h) = 3600 วินาที ->ได้จาก 60*60
1 วัน(d) = 86400 วินาที ->ได้จาก 24*60*60
1 ปี(y) = 31536000 วินาที ->ได้จาก 365*24*60*60
ผลจากการแปลงให้อยู่ในหน่วย วินาที ก็จะได้ตัวเลขดังนี้
0 0
1 2880
2 21600
3 172800
4 2073600
1.2 การคำนวน inception watch โดยใช้สูตร
sum = sum / 12 +incept[i - 1].getNumSecond();
โดยกำหนดให้
sum คือ ตัวแปรสำหรับเก็บผลลัพธ์
Incept[i - 1].getNum() คือ จำนวนเวลาในหน่วยวินาที ในชั้นรองจากชั้นปัจจุบันที่เราอยู่
i คือ ชั้นปัจจุบันที่เราอยู่
getNumSecond () คือ เป็นฟังก์ชันก์สำหรับการดึงจำนวนเวลาในหน่วยวินาทีของชั้น i -1
Incept คือ เป็น object ที่เก็บลำดับชั้นจำนวนเวลาในวินาที
วิธีทำ
เริ่มจากชั้นที่ 5ค่า ณ ปัจจุบัน sum = 0 , Incept[i - 1].getNum() = 2073600, i = 5
แทนค่า sum = 0/ 12 + 2073600
sum = 2073600;
ชั้นที่ 4
ค่า ณ ปัจจุบัน sum = 2073600 , Incept[i - 1].getNum() = 172800 , i = 4
แทนค่า sum = 2073600 / 12 + 172800
sum = 345600
ชั้นที่ 3
ค่า ณ ปัจจุบัน sum = 345600 , Incept[i - 1].getNum() = 21600 , i = 3
แทนค่า sum = 345600 / 12 + 21600
sum = 50400
ชั้นที่ 2
ค่า ณ ปัจจุบัน sum = 50400 , Incept[i - 1].getNum() = 2880 , i = 2
แทนค่า sum = 50400 / 12 + 2880
sum = 7080
ชั้นที่ 1
ค่า ณ ปัจจุบัน sum = 7080 , Incept[i - 1].getNum() = 0 , i = 1
แทนค่า sum = 7080 / 12 + 0
sum = 590
เป็นอันเสร็จการคำนวน แล้วเราจะมาแสดงค่ายังไงล่ะ เราก็เรียงจากด้านล่างไปด้านหน้าก็จบ
590
7080
50400
345600
2073600
ส่วนการทำให้ได้ตัวเลขแสดง 10 หลักอ่านลงไปด้านล่างของบทความก็จะเจอครับ
[Java] ACM CommonPermutationQ
The Problem
Given two strings a and b, print the longest string x of letters such that there is apermutation of x that is a subsequence of a and there is a permutation of x that is a
subsequence of b.
Sanple Input / Output
source code
import java.util.Scanner; import java.util.Arrays; /** * * @author http://www.javaagkasit.blogspot.com/ */ public class CommonPermutation { int[] d = new int[1000]; static String strtemp; public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); CommonPermutation cp = new CommonPermutation(); while (true) { String[] a = (sc.nextLine()).split(""); String[] b = (sc.nextLine()).split(""); if (a.length <= 1000 | b.length <= 1000) { int c = 0; char[] out = new char[a.length]; for (int i = 1; i < a.length; i++) { for (int j = 1; j < b.length; j++) { if (cp.check(j) == false) { //not in store index if (a[i].equals(b[j])) { //if chalacter s1[i] == s2[j] out[c++] = b[j].charAt(0);//then store output cp.store(j); //then store index break; //then stop Search } } else { continue; } } } cp.printout(out, c);//print output cp.clearArr(); //clear arrays store index System.out.println(); } } } public boolean check(int i) { boolean c = true; int m = Arrays.binarySearch(d, i); if (m < 0) { c = false; } return c; } public void printout(char[] s, int c) { char[] ans = new char[c]; for (int i = 0; i < ans.length; i++) { ans[i] = s[i]; } Arrays.sort(ans); System.out.print(ans); } public void store(int p) { int c = 0; d[c++] = p; Arrays.sort(d); } public void clearArr() { for (int i = 0; i < d.length; i++) { d[i] = 0; } } }
Download source code here !!!
[Java]คำสั่งวนลูป การใช้ for
การใช้งานคำสั่ง For มี 2 แบบ
แบบที่ 1
/** * * @author http://javaagkasit.blogspot.com */ public class basic_For { public static void main(String [] args){ String [] item = {"For_1 = for","For_2 = For-each Loop"}; for(int i = 0 ; i < item.length;i++){ System.out.println(item[i]); } } } |
แบบที่ 2
/** * * @author http://javaagkasit.blogspot.com */ public class basic_For2 { public static void main(String [] args){ String [] item = {"For_1 = for","For_2 = For-each Loop"}; for(String s : item){ System.out.println(s); } } } |
Output.
output ทั้ง 2 แบบเหมือนกันทุกประการ ถ้าจะถามว่าทำไมถึงมี 2 แบบ เขียนโปรแกรมบ่อยๆก็จะเข้าใจเอง
การทำงานของคำสั่ง For Loop
Sentex:
แบบที่ 1for(initialization ; Boolean_expression ; update) { //Statements } |
แบบที่ 2
for (type var : arr) { //Statements } |
Explained by flow control.
[Java]การใช้ switch case
I have the source code.
/** ตัวอย่างการใช้งาน switch case * ตัวอย่างนี้ เป็นการแปลงตัวเลขเป็นตัวอักษร โดยนำ switch case มาใช้งาน * * @author http://javaagkasit.blogspot.com/ */ public class switchCase { public static void main(String [] args){ for(int i = 0 ; i < 10 ; i++){ System.out.println(revertNumberToString(i));//Show Number String } } //Mathode revert Number to String. public static String revertNumberToString(int i){ switch(i){ case 0 : return "zero"; //if i == 0 then return "zero" case 1 : return "one"; //if i == 1 then return "one" case 2 : return "two"; //if i == 2 then return "two" case 3 : return "tree"; //if i == 3 then return "tree" case 4 : return "four"; //if i == 4 then return "four" case 5 : return "five"; //if i == 5 then return "five" case 6 : return "six"; // . case 7 : return "seven"; // . case 8 : return "eigth"; // . case 9 : return "nine"; //if i == 9 then return "nine" default : return"ten"; //others in condition then == "ten" } } } |
สาเหตุที่ไม่มีคำสัง break เหมือน switch case แบบที่เราเคยเห็นทั่วไป คือ ในลักษณะการทำงานนี้ทำครั้งเดียวอยู่แล้วไม่จำเป็นต้อง ใช้คำสั่ง break
Explained by this.
Output.
[JAVA] ACM Reverse and Add
The Problem
เป็นการนำตัวเลขมาสลับ(Reverse)แล้วบวกกับค่าเดิม และกระทำเช่นนั้นไปเรื่อยๆจนกว่าผลลัพธ์จะเป็น palindrome ก็คือตัวเลขที่เรียงจากซ้ายไปขวา เรียงขวาไปซ้ายเป็นเลขเดียวกัน สังเกตุจากรูปด้านล่าง ผลลัพธ์ 9339 เรียงซ้ายไปขวา เรียงขวาไปซ้าย ก็ ได้ตัวเลขเดียวกัน
Sample input / output
I have a Java code.
import java.util.Scanner; /** * @author http://javaagkasit.blogspot.com/ */ public class ReverseAndAdd { static long MAX = (long) 4294967295.0;//ค่ามากสุด private String sum ; // เช่น 195 private long sumba; //ถ้า sum เป็น 195 ,sumba ก็จะเป็น 951 public static void main(String[] args) { Scanner input = new Scanner(System.in); ReverseAndAdd rev = new ReverseAndAdd(); long sum2 = 0 ,re ; //re ไว้ตัวเลขที่กลับตำแหน่งแล้ว String sum = ""; //เก็บตัวเลขที่อ่านมาจากไฟล์ try{ do{ sum = input.nextLine(); //อ่านข้อมูลมาที่ละบรรทัด int count = 0; while(true){//ทำไปเรื่อย sum2 = Long.parseLong(sum); re = rev.Reverse(sum); if(sum2 == re) break;//ออกจากการวนลูป (เจอ) else if((count == 1000)|(sum2 > MAX)) { System.out.println("not palindrome foun"); break; //ออกจากการวนลูป(ไม่เจอ) }else {//เก็บผลลัพธ์ล่าสุด sum = rev.ans(sum2, re); count++; } } rev.print(count, sum2,sum);//โชว์คำตอบออกทาง output }while(!"0".equals(sum)); }catch(Exception e){ e.getMessage(); System.out.println("Input errors.!!!\nTry put, 195 "); } } // เมทอต สำหรับสลับตำแหน่งตัวเลข เช่น 159 ก็จะสลับเป็น 951 public long Reverse(String sum){ StringBuffer sb = new StringBuffer(sum); sb.reverse(); sumba = Long.parseLong(sb.toString()); return sumba; } //เอา sum + sumba public String ans(long sum,long sumba){ sum += sumba; //sum = sum +sumba String an = String.valueOf(sum); return an; } //ปริ๊นคำตอบออก output public void print(int count,long sum,String sums){ if((count == 1000)|(sum >= MAX)|(sums.equals("0"))) ; else System.out.println(count+" "+sum); } }
[JAVA] ACM PrimaryArthmeticQ
Sample Input
123 456 555 555 123 594 0 0 |
Sample Output
No carry operation. 3 carry operations. 1 carry operation. |
I have a java code.
/** * * @author http://javaagkasit.blogspot.com/ */ import java.util.Scanner; public class PrimaryArthmeticQ { static int ten =10,zero = 0,one =1; private int ans = zero, carry = zero, totalcarry = zero; public static void main(String[] args)throws Exception{ Scanner sc = new Scanner(System.in); PrimaryArthmeticQ PAQ =new PrimaryArthmeticQ(); try{ while(true){ String inputS= sc.nextLine(); if(!inputS.equals("0 0")){ String[] input =inputS.split(" "); PAQ.process(input[zero], input[one]); PAQ.print(); }else{ System.out.print(""); break; } } }catch(Exception e){ System.out.println(e.getClass()); System.out.println("Re-enter.!!!"); } } public void process(String s1,String s2){ String ss1 = reverseStr(s1);//ตัวตั่ง String ss2 = reverseStr(s2);//ต้วบวก int last = lengthLoop(ss1,ss2);//จำหลักของตัวเลข int op=zero,op2=zero; for(int i =zero ; i < last ;i++){ if( i < ss1.length()) op = Integer.parseInt(ss1.charAt(i)+"");else op = zero; if( i < ss2.length()) op2 = Integer.parseInt(ss2.charAt(i)+"");else op2 = zero; add(op,op2);//ตัวตั่งกับ ต้วบวกบวกกัน } this.carry = zero;//clear carry =0 } public void print(){ if(totalcarry == one) System.out.println(totalcarry+" "+"carry operation."); else if(totalcarry == zero) System.out.println("No carry operation."); else System.out.println(totalcarry+" "+"carry operations."); this.totalcarry = zero;//clear totalcarry =0 } private void add(int op,int op2){ ans = op + op2 +carry; Ccarray(); } private void Ccarray(){ if(ans >= ten){ this.carry = one; totalcarry++; }else this.carry = zero; } private String reverseStr(String st){ StringBuffer str = new StringBuffer(st); str.reverse(); String ss = str.toString(); return ss; } private int lengthLoop(String s1,String s2){ int last=zero; if(s1.length() > s2.length()){ last=s1.length(); }else{ last=s2.length(); } return last; } } |
[Java basic] การใช้ if else if
ตัวอย่าง การใช้งาน if else if
/** * * @author http://javaagkasit.blogspot.com/ */ public class ifelseif { public static void main(String [] args){ int score = 60; if(score <= 49){ System.out.println("gate F"); }else if (score <= 59 ){ System.out.println("gate D"); }else if(score <= 69){ System.out.println("gate C"); }else if(score <= 79){ System.out.println("gate B"); }else if(score <= 100){ System.out.println("gate A"); }else{ System.out.println("enter score"); } } } |
output
[Java ] การใช้ if else
หนังสือจาวาฟรี Free Java Ebooks
หนังสือ Java ฟรี ภาษาไทย
- เริ่มต้นการเขียนโปรแกรมด้วย Java http://sci.feu.ac.th/faa/Java.intro/IntroToJava.html
- จาวาสำหรับผู้เริ่มต้น http://dekisugi.net/wp-content/uploads/2009/05/java2.pdf
- โครงสร้างข้อมูลและอัลกอริทึมด้วย (Java) http://sci.feu.ac.th/faa/dsa/dsa.html
- สำหรับคนที่ชอบอ่านโค้ด http://downloads.se-ed.com/ เป็นโค้ดที่มากับหนังสือที่ขาย ของ se-ed book
- อ่านแล้วไม่เข้าใจก็ฟังเอา http://www.javathailand.com/ ฟังแล้วเข้าใจลองดู
- Free Java Ebooks http://www.mkyong.com/featured/top-5-free-java-ebooks/ [มี 5 เล่ม]
[c#] Set QoS Bandwidth Reserve Setting เพื่อเพิ่ม bandwidth ในการท่องเน็ตให้เร็วขึ้น
Aagkasit Tontan
23:38:00
Set QoS Bandwidth Reserve Setting
เพื่อเพิ่ม bandwidth ในการท่องเน็ตให้เร็วขึ้น
public void NonBestEffortLimit()
{ Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ Windows\Psched", "NonBestEffortLimit", 1, RegistryValueKind.DWord); } |
use Bandwidth default (Bandwidth == 20)
public void reNonBestEffortLimit()
{ Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ Windows\Psched", "NonBestEffortLimit", 20, RegistryValueKind.DWord); } |
อธิบายโค้ดอย่างละเอียด MinimumSwapQ JAVA
อธิบายโค้ดอย่างละเอียด MinimumSwapQ JAVA
ลำดับขั้นตอนการเขียน
- รับค่าข้อมูลทางคีร์บอร์ดแล้วนำค่ามาแปลง Character พร้อมกับจัดเก็บข้อมูลใส่ Array
- เก็บข้อมูลใส่ Array ได้แล้ว จากนั้นก็ ทำการเรียงข้อมูลจากน้อยไปมาก
- ซึ่งในขั้นตอนที่ 2 เราต้อง มีตัว Counter ไว้นับจำนวนครั้งที่สลับที่ของข้อมูล - พอวนรอบจนครับก็แสดงค่าผลลัทธ์ออก Output
import java.util.Scanner; /** * @author http://javaagkasit.blogspot.com/ */ public class MinimumSwapQ { private static int counter = 0;// ตัวแปร counter ไว้นับจำนวนครั้งที่สลับที่ของข้อมูล private static String input ; public static void main(String[] args){ Scanner sn =new Scanner(System.in); try{ while(!(input = sn.nextLine()).equals("000")){ char [] charecter = charArr(input); int current = 0, last = charecter.length-1; int walker, smallest; while(current < last) { smallest = current; walker = current + 1; //วนหาอักษรที่เล็กที่สุด ในข้อมูลที่เหลือ while(walker <= last) { if(charecter[smallest] > charecter[walker]) smallest = walker; walker++; }//เจอแล้วก็สลับตำแหน่งกัน swap(charecter, current, smallest); current++; } print();// แสดงจำนวนที่สลับ } }catch(Exception e){ System.out.println(e.getClass()); System.out.println("Re-enter.!!!"); } } //เอา input มาแปลงเป็น char และเก็บข้อใส่ array static char[] charArr(String input){ char [] charecter = new char[input.length()]; for(int i=0 ;i< input.length();i++){ charecter[i] = (char) input.codePointAt(i); } return charecter; } // เมทอดสำหรับ สำหรับ สลับตำแหน่ง static char[] swap(char[] arr, int current, int smallest) { if(arr[current] > arr[smallest]) counter++; char temp = arr[current]; arr[current] = arr[smallest]; arr[smallest] = temp; return arr; } // เมทอดสำหรับ สำหรับ แสดงผล output static void print(){ System.out.println(counter); counter = 0; } } |
การทำงานหลักๆของโปรแกรม
try{
while(!(input = sn.nextLine()).equals("000")){ //1. รับค่าข้อมูลทางคีร์บอร์ด char [] charecter = charArr(input);//1 แล้วนำค่ามาแปลง Character พร้อมกับจัดเก็บข้อมูลใส่ Array int current = 0, last = charecter.length-1; int walker, smallest; //2.เก็บข้อมูลใส่ Array ได้แล้ว จากนั้นก็ ทำการเรียงข้อมูลจากน้อยไปมาก while(current < last) { smallest = current; walker = current + 1; //วนหาอักษรที่เล็กที่สุด ในข้อมูลที่เหลือ while(walker <= last) { if(charecter[smallest] > charecter[walker]) smallest = walker; walker++; }//เจอแล้วก็สลับตำแหน่งกัน swap(charecter, current, smallest); current++; } // 3.พอวนรอบจนครับก็แสดงค่าผลลัทธ์ออก Output print(); } }catch(Exception e){ System.out.println(e.getClass()); System.out.println("Re-enter.!!!"); } } |
- รับค่าข้อมูลทางคีร์บอร์ดแล้วนำค่ามาแปลง Character พร้อมกับจัดเก็บข้อมูลใส่ Array
while(!(input = sn.nextLine()).equals("000")){ char [] charecter = charArr(input); |
char [] charecter = charArr(input); คือ การนำเอา input ที่เข้ามาแปลงเป็น Character พร้อมกับจัดเก็บข้อมูลใส่ Array ส่วน charArr() เป็นเมทอต สำหรับนำค่าแปลง input ให้เป็น Character แล้วก็ รีเทิน ค่า Character อาร์เรย์ กลับคืนมา คลิกเพื่อดูเมทอต charArr()
2. เก็บข้อมูลใส่ Array ได้แล้ว จากนั้นก็ ทำการเรียงข้อมูลจากน้อยไปมาก
- Counter ไว้นับจำนวนครั้งที่สลับที่ของข้อมูล คลิกเพื่่อดู
3. การแสดงผลลัทธ์ออก Output จะใช้ เมทอต print()
// เมทอดสำหรับ สำหรับ แสดงผล output
static void print(){ System.out.println(counter); counter = 0; //เคีล๋ยค่า couter ทุกครั้งที่มีการ print ผลลัพธ์ } |
ผมก็ขอจบแค่นี้ครับ ถ้าสงสัยก็ หรือ แนะนำ การเขียน บทความ ก็คอมเม้นสอบถาม - แนะนำได้ครับ
อัลกอริทึม MinimumSwapQ
อัลกอริทึม MinimumSwapQ
วิธีที่ผมคิดในการเรียงข้อมูลให้สลับที่ได้น้อยครั้งที่สุด
รอบที่ 1 ตำแหน่งที่เลือกคือ index 0 (เลข 3) แล้วก็ให้ไปวนหาในข้อมูลในตำแหน่งที่เหลือคือ 1,2,3(เลข 4,2,1 ตามลำดับ) ปรากฎว่า ข้อมูลที่เล็กที่สุด คือ เลข 1 แล้วนำเลข 3 กับ 1 เปรียบเทียบกัน ปรากฎว่า เลข 1 เล็กว่า 3 นำเลข 3 กับ เลข 1 สลับตำแหน่งกัน (ถ้าข้อมูลที่ค้นหาเจอขนาดใหญ่กว่า ก็ไม่ต้องสลับตำแหน่งกัน) สลับตำแหน่งกันเรียบร้อยก็ เลื่อน ตำแหน่งที่เลือก ไปข้างหน้า 1 ตำแหน่ง และตำแหน่งที่เลือกคือ index 0 ก็จะกลายเป็น ตำแหน่งทีเรียงเสร็จแล้ว (ตำแหน่งทีเรียงเสร็จแล้วเราจะไม่ไปยุ่งกับมันอีก)
รอบที่ 2 ตำแหน่งที่เลือกคือ index 1 (เลข 4) แล้วก็ให้ไปวนหาในข้อมูลในตำแหน่งที่เหลือคือ 2,3(เลข 2,3 ตามลำดับ) ปรากฎว่า ข้อมูลที่เล็กที่สุด คือ เลข 2 แล้วนำเลข 4 กับ 2 เปรียบเทียบกัน ปรากฎว่า เลข 2 เล็กว่า 4 นำเลข 4 กับ เลข 2 สลับตำแหน่งกัน สลับตำแหน่งกันเรียบร้อยก็ เลื่อน ตำแหน่งที่เลือก ไปข้างหน้า 1 ตำแหน่ง และตำแหน่งที่เลือกคือ index 1 ก็จะกลายเป็น ตำแหน่งทีเรียงเสร็จแล้ว
รอบที่ 3 ตำแหน่งที่เลือกคือ index 2 (เลข 4) แล้วก็ให้ไปวนหาในข้อมูลในตำแหน่งที่เหลือคือ 3 (เลข 3 ตามลำดับ) ปรากฎว่า ข้อมูลที่เล็กที่สุด คือ เลข 3 แล้วนำเลข 4 กับ 3 เปรียบเทียบกัน ปรากฎว่า เลข 3 เล็กว่า 4 นำเลข 4 กับ เลข 3 สลับตำแหน่งกัน สลับตำแหน่งกันเรียบร้อยก็ เลื่อน ตำแหน่งที่เลือก ไปข้างหน้า 1 ตำแหน่ง และตำแหน่งที่เลือกคือ index 2 ก็จะกลายเป็น ตำแหน่งทีเรียงเสร็จแล้ว
รอบที่ 4 ตำแหน่งที่เลือกคือ index 3 (เลข 4) ก็จะไม่ต้องทำอะไร ก็เอาเลข 4 เป็นข้อมูลที่ใหญ่ที่สุดเลย
ก็เสร็จสิ้นการเรียงข้อมูล
จากแนวคิดผมก็นำมาเขียนโค้ด
char [] charecter = charArr(input);
int current = 0, last = charecter.length-1; int walker, smallest; // while(current < last) { smallest = current; walker = current + 1; //วนหาอักษรที่เล็กที่สุด ในข้อมูลที่เหลือ while(walker <= last) { if(charecter[smallest] > charecter[walker]) smallest = walker; walker++; }//เจอแล้วก็สลับตำแหน่งกัน swap(charecter, current, smallest);//คือ เมทอต ไว้สลับตำแหน่งข้อมูล current++; } } |
current คือ ตัวแปรทำหน้าที่ เก็บตำแหน่ง(index)ที่เราเลือก
last คือ ตัวแปรทำหน้าที่ เก็บตำแหน่ง(index)สุดท้ายของข้อมูล
wallker คือ ตัวแปรทำหน้าที่สำหรับ วนหาค่าที่เล็กที่สุดใน ข้อมูลที่เหลืออยู่
smallest คือ ตัวแปรทำหน้าที่เก็บตำแหน่งข้อมูลที่เล็กสุด
swap คือ เมทอต ไว้สลับตำแหน่งข้อมูล
สำหรับการ อธิบาย อัลกอริทึม MinimumSwapQ ตามแนวคิดผม ก็จบแค่นี้ ครับ ถ้าไม่เข้าใจ ส่วนไหน คอมเม้น ถามได้นะครับ เอาไว้เจอกันใน บทความต่อไปคับ
สำหรับการ อธิบาย อัลกอริทึม MinimumSwapQ ตามแนวคิดผม ก็จบแค่นี้ ครับ ถ้าไม่เข้าใจ ส่วนไหน คอมเม้น ถามได้นะครับ เอาไว้เจอกันใน บทความต่อไปคับ
Subscribe to:
Posts
(
Atom
)
No comments :
Post a Comment