อธิบายโค้ดอย่างละเอียด 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 ผลลัพธ์ } |
ผมก็ขอจบแค่นี้ครับ ถ้าสงสัยก็ หรือ แนะนำ การเขียน บทความ ก็คอมเม้นสอบถาม - แนะนำได้ครับ