Java SE/Array 01

Array 01

Soul-Learner 2008. 5. 20. 10:26

class Array01
{
 public static void main(String[] args)
 {
  int[] record; // 배열변수 생성
  record = new int[25]; // 메모리 할당

  // 배열의 초기화
  for(int i=0;i<record.length;i++) {
   record[i] = i;
  }

  // call by reference
  change(record);
  System.out.println(record[5]); // 100

  // 배열을 출력하는 전용메소드
  printArray(record);

  // 문자배열을 선언하고 초기화, 원소출력의 예
  char[] ca = new char[26];
  char c = 'A';
  for(int i=0;i<ca.length;i++) {
   ca[i] = c++;
  }
  for(int i=0;i<ca.length;i++) {
   System.out.print(ca[i]);
  }
  System.out.println("---끝");

  // String배열을 선언하고 초기화, 출력하는 예
  String[] member = new String[5];
  member[0] = "홍길동";
  member[1] = "정윤재";
  member[2] = "문현절";
  member[3] = "윤지선";
 
  // 위에서 배열의 원소를 초기화할 때 불편했던 점을 생각하게 하고 좀더 편리한 방법을 소개한다.
  // 위 사람들의 전화번호를 저장할 수 있는 String 배열을 생성, 초기화한다.
  String[] phone = {"010-645-654", "016-4532-6789", "010-678-654", "016-765-587"};

  // 위의 String 배열 2개를 이용하여 특정인의 전화번호를 출력하는 프로그램을 작성해 보세요.
  String key = "정윤재";
  for(int i=0;i<member.length;i++) {
   if(member[i]==key) System.out.println(key+"님의 전화번호: "+ phone[i]);
  }

  // 위의 배열 2개를 이용하는 검색전용 메소드를 작성하고 실행해 본다.
  // 메소드는 사람이름을 파라미터로 받아서 배열에서 전화번호를 검색한 후에 검색된 전화번호를 리턴하는 기능을 갖게한다.
  // main() 메소드에서 선언된 배열을 하위 메소드로 전달하여 검색을 해야 한다.
  String pn = search(member, phone, key) ;
  System.out.println("검색된 전화번호==> "+pn);

  // 전화번호에 010 이 포함된 사람들의 명단을 리턴하는 메소드를 작성하고 실행 및 결과를 출력해 보세요.
  String[] names = search02(member, phone, "010");
  System.out.println("전화번호가 010 인 사람들의 명단");
  for(int i=0;i<names.length;i++) {
   System.out.print(names[i] + "\t");
  }
  System.out.println();

  // 큰 수부터 정렬하기(버블정렬 알고리듬 이용)
  // java.util.Random 클래스를 이용하여 100이하의 수 중에서 10개의 난수를 추출하여 배열에 저장한 후에
  // 그 배열의 원소들을 작은 순으로 정열해 본다.
  int[] sorted = bubbleSort();
  for(int i=0;i<sorted.length;i++) {
   System.out.print(sorted[i]+"\t");
  }
  System.out.println();

  // 중복되지않는 10개의 임의의 수를 배열에 저장하여 리턴하는 메소드의 예
  System.out.println("중복되지않는 10개의 임의의 수 추출");
  int[] rn = randomNum();
  for(int i=0;i<rn.length;i++) {
   System.out.print(rn[i]+"\t");
  }
 } // end of main()

 // 하위 메소드에서 참조를 이용하여 main안에서 선언된 내용을 변경하는 예(call by reference)
 static void change(int[] record) {
  record[5] = 100;
 }

 // 배열의 원소를 출력하는 예
 static void printArray(int[] record) {
  for(int i=0;i<record.length;i++) {
   System.out.println(record[i]);
  }
 }

 // 배열에서 검색하여 결과를 리턴하는 메소드
 static String search(String[] name, String[] phone, String key) {
  for(int i=0;i<name.length;i++) {
   if(name[i] == key) return phone[i];
  }
  return null;
 }

 // 전화번호가 010 으로 된 사람들의 명단을 배열로 리턴하는 메소드를 생성하고 리턴하는 메소드
 static String[] search02(String[] name, String[] phone, String num) {
  int count = 0;
  for(int i=0;i<phone.length;i++) {
   if(phone[i].indexOf(num)!= -1) count++; // 검색된 수만 확인한다.
  }
  // 검색된 수만큼의 배열공간을 확보한다.
  String[] found = new String[count];
  int idx = 0;
  for(int i=0;i<phone.length;i++) {
   if(phone[i].indexOf(num)!= -1) found[idx++] = name[i]; // 검색된 사람들의 이름을 배열에 저장한다
  }
  return found; // 배열을 리턴한다
 }

 // 임의의수 10개를 추출하여 배열에 저장하고 배열의 원소를 버블정렬하여 정렬된 배열을 리턴하는 메소드
 static int[] bubbleSort() {
  java.util.Random rd = new java.util.Random();
  int[] ia = new int[10];

  // 임의의 100이하의 수를 10개 추출한다.
  for(int i=0;i<10;i++) {
   ia[i] = rd.nextInt(100);
  }
 
  //버블정렬 알고리듬을 구현한다
  int j = 1;
  int temp = 0;
  for(int i=0;i<ia.length;i++) {
   j = i+1;
   for(;j<ia.length;j++) {
    if(ia[i] > ia[j]) {
     temp = ia[i];
     ia[i] = ia[j];
     ia[j] = temp;
    }
   }// end of inner for()
  }// end of outer for()
  return ia;
 }

 // 중복되지않는 10개의 수를 배열에 저장하여 리턴하는 메소드
 static int[] randomNum() {
  java.util.Random rd = new java.util.Random();
  int[] ia = new int[10];
  int idx = 0; // 배열에 원소가 추가될 때마다 증가하는 인덱스
  int temp = 0;
  boolean exist = false;
  while(idx<10) {
   exist = false;
   temp = rd.nextInt(100);
   for(int i=0;i<=idx;i++) {
    if(temp==ia[i]) {
     System.out.println("중복된 수 발견");
     exist = true;
     break;
    }
   } // end of for()
   if(!exist) ia[idx++] = temp;
  }// end of while()
  return ia;
 }

}