มาใช้ Array เก็บข้อมูลคนละชนิดกัน ในภาษา Java

 

มาใช้ Array เก็บข้อมูลคนละชนิดกัน ในภาษา Java

 

        มาเขียนถึงเรื่อง Array ในภาษา Java อีกครั้ง โดยทั่วไปการใช้ array เก็บข้อมูลนั้น ลักษณะของข้อมูลที่เก็บจะต้องเป็นชนิดเดียวกัน แต่ถ้าปัญหาต้องการเก็บข้อมูลคนละชนิดกัน ทำอย่างไร ดูปัญหาก่อน ว่าบังคับให้ใช้ array ตัวเดียวกันไหมถ้าไม่ทำง่าย ๆ ก็เก็บ ข้อมูลแต่ละชนิดไว้ใน array แต่ละตัว

ตัวอย่างแรกแบบง่าย ๆ ก่อน สมมุติปัญหา ต้องการอ่านชื่อ นศ. และคะแนนสอบของแต่ละคน  สมมุติมี นศ. 2 คน แต่ละคนสอบ 2 วิชา ใช้ array แบบ 1 มิติ

 

import java.util.Scanner;

 

class prac03

{

static final int MAX_N=2;

static final int MAX_S=2;

  public static void main(String[] args)

  {

  String name[] = new String[MAX_N];

  int sj1[] =new int[MAX_S];

  int sj2[] =new int[MAX_S];

          readName(name);

          readSj(sj1,sj2);

          System.out.printf("%10s%10s%10sn","Name","Subject1", Subject2");

          for(int i=0;i<name.length;i++){

                    System.out.printf("%10s%10d%10dn",name[i], sj1[i],sj2[i]);

          }//end for

  } //end main

 

static void readName(String n[])

{

Scanner input = new Scanner( System.in );

 

          for(int i=0;i<n.length;i++){

                    System.out.printf( "Enter Student # %d's name: ",i ); // prompt

                    n[i] = input.nextLine(); // read

          }//end for

}//end method

 

static void readSj(int s1[],int s2[])

{

Scanner input = new Scanner( System.in );

 

  for(int i=0;i<s1.length;i++){

           System.out.printf( "Enter Subject 1's student #%d score: ", i );

          s1[i] = input.nextInt(); // read

           System.out.printf( "Enter Subject 2's student #%d score: ", i);

          s2[i] = input.nextInt(); // read

  }//end for

}//end method

 

} //end class

 

ผลการวิ่ง (Run) โปรแกรม

 

Enter Student # 0's name: aa

Enter Student # 1's name: bb

Enter Subject 1's student #0 score: 11

Enter Subject 2's student #0 score: 22

Enter Subject 1's student #1 score: 33

Enter Subject 2's student #1 score: 44

      Name  Subject1  Subject2

        aa        11        22

        bb        33        44

        จะเห็นว่าไม่ยุ่งยาก ลองสมมุติใหม่ สมมุติว่ามี นศ. 3 คน แต่ละคนสอบ 2 วิชา ใช้ array แบบ 1 มิติ (จากเดิม 2 คน เป็น 3 คน)

 

import java.util.Scanner;

 

class prac03_2

{

static final int MAX_N=3;

static final int MAX_S=2;

public static void main(String[] args)

{

String name[] = new String[MAX_N];

int st0sj[] =new int[MAX_S];

int st1sj[] =new int[MAX_S];

int st2sj[] =new int[MAX_S];

            readName(name);

            readSj(st0sj,st1sj,st2sj);

 

            System.out.printf("%10s%10s%10sn","Name","Subject1","Subject2");

 

            System.out.printf("%10s",name[0]);

            System.out.printf("%10d",st0sj[0]);

            System.out.printf("%10dn",st0sj[1]);

 

            System.out.printf("%10s",name[1]);

            System.out.printf("%10d",st1sj[0]);

            System.out.printf("%10dn",st1sj[1]);

 

            System.out.printf("%10s",name[2]);

            System.out.printf("%10d",st2sj[0]);

            System.out.printf("%10dn",st2sj[1]);

 

} //end main

 

static void readName(String n[])

{

Scanner input = new Scanner( System.in );

 

  for(int i=0;i<n.length;i++){

             System.out.printf( "Enter Student # %d's name: ",i ); // prompt

                        n[i] = input.nextLine(); // read

  }//end for

}//end method

 

static void readSj(int s0[], int s1[], int s2[])

{

Scanner input = new Scanner( System.in );

 

  for(int i=0;i<s0.length;i++){

             System.out.printf( "Enter student #0 Subject %d's score: ",i ); // prompt

                        s0[i] = input.nextInt(); // read

             System.out.printf( "Enter student #1 Subject %d's score: ",i ); // prompt

                        s1[i] = input.nextInt(); // read

             System.out.printf( "Enter student #2 Subject %d's score: ",i ); // prompt

                        s2[i] = input.nextInt(); // read

 

  }//end for

}//end method

 

} //end class

 

 

ผลการวิ่ง (Run) โปรแกรม

 

Enter Student # 0's name: aa

Enter Student # 1's name: bb

Enter Student # 2's name: cc

Enter student #0 Subject 0's score: 11

Enter student #1 Subject 0's score: 22

Enter student #2 Subject 0's score: 33

Enter student #0 Subject 1's score: 44

Enter student #1 Subject 1's score: 55

Enter student #2 Subject 1's score: 66

      Name  Subject1  Subject2

        aa        11        44

        bb        22        55

        cc        33        66

 

สังเกตว่าเริ่มจะยุ่งยากแล้ว หลาย ๆ อย่างไม่ได้เป็นไปตามที่คิดเหมือนตัวอย่างแรก การอ่านค่าหรือการแสดงผลเริ่มสับสน และใช้ตัวแปรใน index ของ array ไม่ได้

        ลองเปลี่ยนรูปแบบข้อมูลใหม่โดยใช้ array 2 มิติมาช่วย

 

import java.util.Scanner;

class prac03_1

{

static final int STUDENT=3;

static final int SUBJECT=2;

public static void main(String[] args)

{

String name[] = new String[STUDENT];

int sj1[][] =new int[STUDENT][SUBJECT];

int i;

  readName(name);

  for(i=0;i<name.length;i++)

            readSj(sj1[i],i+1);

 

  System.out.printf("nn%10s%10s%10s","Name","Subject1","Subject2");

  System.out.println();

  for(i=0;i<name.length;i++){

            System.out.printf("%10s",name[i]);

            for(int j=0;j<sj1[i].length;j++){

                        System.out.printf("%10d",sj1[i][j]);

            }//end for j

            System.out.println();

  }//end for i

} //end main

 

static void readName(String n[])

{

Scanner input = new Scanner( System.in );

 

  for(int i=0;i<n.length;i++){

             System.out.printf( "Enter Student # %d's name: ",i+1 ); // prompt

                        n[i] = input.nextLine(); // read

  }//end for

}//end method

 

static void readSj(int s1[],int sjName)

{

Scanner input = new Scanner( System.in );

  for(int i=0;i<s1.length;i++){

          System.out.printf( "Enter student #%d Subject %d's  score: ",sjName,i+1 );

            s1[i] = input.nextInt(); // read

  }//end for

}//end method

 

} //end class

 

ผลการวิ่ง (Run) โปรแกรม

 

Enter Student # 1's name: aa

Enter Student # 2's name: bb

Enter Student # 3's name: cc

Enter student #1 Subject 1's  score: 11

Enter student #1 Subject 2's  score: 22

Enter student #2 Subject 1's  score: 33

Enter student #2 Subject 2's  score: 44

Enter student #3 Subject 1's  score: 55

Enter student #3 Subject 2's  score: 66

 

 

      Name  Subject1  Subject2

        aa        11        22

        bb        33        44

        cc        55        66

 

·        จะเห็นได้ว่าเมื่อใช้ array แบบ 2 มิติทำให้เขียนโปรแกรมและจัดการโปรแกรมได้ง่ายขึ้น

·        ให้ลองเปลี่ยนรูปแบบใหม่โดยใช้ object จะทำให้การใช้งานได้ง่ายกว่านี้

·        ถ้าปัญหาเปลี่ยนใหม่ ให้มีการเก็บ Section ของนศ. มีการเก็บชื่อสาขา …. เขียนและออกแบบโครงสร้างข้อมูลอย่างไร