Java basic | Java OOP | โครงสร้างข้อมูล | โจทย์ ACM



อธิบายโค้ดอย่างละเอียด MinimumSwapQ JAVA


อธิบายโค้ดอย่างละเอียด MinimumSwapQ JAVA

ลำดับขั้นตอนการเขียน
  1. รับค่าข้อมูลทางคีร์บอร์ดแล้วนำค่ามาแปลง Character พร้อมกับจัดเก็บข้อมูลใส่ Array
  2. เก็บข้อมูลใส่ Array ได้แล้ว จากนั้นก็ ทำการเรียงข้อมูลจากน้อยไปมาก
    - ซึ่งในขั้นตอนที่ 2 เราต้อง มีตัว Counter ไว้นับจำนวนครั้งที่สลับที่ของข้อมูล
  3. พอวนรอบจนครับก็แสดงค่าผลลัทธ์ออก 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);//แล้วนำค่ามาแปลง 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.!!!");
            }

}



  1. รับค่าข้อมูลทางคีร์บอร์ดแล้วนำค่ามาแปลง Character พร้อมกับจัดเก็บข้อมูลใส่ Array

                while(!(input = sn.nextLine()).equals("000")){                                                                        
                    char [] charecter = charArr(input);

       while(!(input = sn.nextLine()).equals("000")) หมายความว่า ถ้า input ที่เข้ามา ไม่เป็น 000 ให้วนลูปไปเรื่อยๆ แต่ถ้าเป็น 000 ก็จบการวนลูป
        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  ผลลัพธ์        
          }
 


 ผมก็ขอจบแค่นี้ครับ ถ้าสงสัยก็ หรือ แนะนำ การเขียน บทความ ก็คอมเม้นสอบถาม - แนะนำได้ครับ 

share