본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]김동화-2011년12월15일 일일보고서

by 알 수 없는 사용자 2011. 12. 15.
728x90
반응형

- 인수로서의 배열

⇒ 메소드의 호출시 배열의 원소나 배열 전체가 인수로써 사용될 수 있다. 배열은 객체임으로 인수로 전달될 때는 배열의 참조변수가 인수가 된다. 다른 객체의 경우와 마찬가지로 참조전달 호출이 된다.

⇒ 피호출 메소드는 참조변수의 값은 바꿀 수 없지만, (값 전달 호출)   배열 객체의 값은 참조변수를 통해서 변경할 수 있다.

 → 배열의 원소가 인수일 경우에는   배열이 기본 자료형이면 값 전달 호출이 되고,   

 → 배열의 원소가 객체일 경우에는 참조전달 호출이 된다.


// 정수 배열의 원소를 메소드 호출의 인수로 넘겨주는 프로그램
public
 class SendPremitiveElement
{
  public static void main(String[] args)
  {
    int[] list = {13579};
    PremitiveElementPassing mouse = new PremitiveElementPassing();
    // 배열 자체가 객체이므로(배열 객체) 객체 참조 변수로 인자를 받아야 한다.
    // 
    printList("list at the beginning: ", list);
    mouse.multiplyTen(list[2]);
    printList("list at the end: ", list);
  }
  // 함수가 호출을 위해 static으로 되어 있다.
  // 객체 참조 변수로 배열을 인자로 받는다.
  public static void printList(String comment, int[] aList)
  {
    System.out.print(comment);
    for(int i=0; i<aList.length; ++i)
    {
      System.out.print("\t" + aList[i]);    
    }
    System.out.println();
  }
}
class PremitiveElementPassing
{
  public void multiplyTen(int number)
  {
    System.out.println("number at the beginning of multiplyTen : "  + number);
    number = number * 10;
    System.out.println("number at the end of multiplyTen : " + number);  
  }
}

⇒ 출력 결과



// 정수 배열을 메소드 호출의 인수로 넘겨서 배열의 원소값을 바꾸는 프로그램
class
 SendArrayReference
{
  public static void main(String[] args)
  {
    int[] list = {13579};
    ArrayPassing mouse = new ArrayPassing();
    printList("list at the beginning of main() : ", list);
    mouse.multiplyHundred(list);
    printList("list at the end of main() : ", list);
  }
  public static void printList(String comment, int[] aList)
  {
    System.out.print(comment);
    for(int i=0; i<aList.length; ++i)
    {
      System.out.print("\t" + aList[i]);
    }
    System.out.println();
  }
}
class ArrayPassing
{
  // 참조 전달
  public void multiplyHundred(int[] aList)
  {
    for(int i=0; i<aList.length; ++i)
    {
      aList[i] = aList[i] * 100;
    }
  }
}

⇒ 출력 결과



- main (String[] args) 메소드의 인수
 main() 메소드의 인수는 String 클래스의 배열이다.
프로그램 실행시 명령어 라인(command line)의 인수를 문자열 배열로 받아들인다 명령어 라인의 첫번째 인수는 args[0]에 저장되고, 두번째 인수는 args[1]에 저장된다.
// main 인자 테스트
import
 java.util.*;

class emb
{
  public static void main(String[] test)
  {
    System.out.println(test.length);      
    for(int i=0; i <test.length; ++i)
    {
      System.out.println("[" + i + "] : " + test[i]);
    }
  }
}



- 5.2.10 다차원 배열
⇒ 지금까지의 배열은 데이타를 일직선상으로 배치한 1차원적인 개념으로 보았다.
자바에서는 이 개념을 확장시켜 일반화한 다차원 배열을 지원한다.
2차원 배열은 배열의 각 원소 자체가 배열인 1차원 배열이다. 2차원 배열의 색인은 두 개의 대괄호로 나타낸다.

// 2차원 배열을 출력하는 프로그램
class
 TwoDemenstionalArray
{
  public static void main(String[] args)
  {
    Matrix horse = new Matrix();
    horse.print();
  }
}
class Matrix
{
  int[][] matrix = {{15161718},
      {232425},
      {37},
      {4142434445}};
  public void print()
  {
    System.out.println(matrix.length);    
    for(int row=0; row<matrix.length; ++row)
    {
      // 열(row)의 길이는 다를 수 있다.
      for(int column=0; column<matrix[row].length; column++)
      {
        System.out.print(matrix[row][column] + "\t");
      }
      System.out.println();
    }
  }
}

⇒ 출력 결과



- StringTokenizer 클래스






⇒ 
StringTokenizer 클래스는 문자열을 각 단어로 분리하는 메소드를 가지고 있다. (각 단어를 토큰:token)) ⇒ java.util 패키지에 정의되어 있으며, 문자열 내의 각 단어는 단락문자(delimiter character)로 분리된다. ⇒ 단락문자로는 공백문자(space character), 탭문자(tab character), 개행문자(new line character: '\n'),
캐리지 리턴(carriage return: '\r') 이 있다.
⇒ StringTokenizer (String string)
⇒ 
StringTokenizer (String string, String delimiter)
문자열 인수 delimiter 내에 있는 문자를 단락문자로 지정한다.
⇒ 
StringTokenizer (String string, String delimiter, boolean bool)
인수 bool이 ture이면 인수 delimiter 내의 문자도 토큰으로 반환한다.
⇒ 
int countTokens()
문자열 내의 토큰의 개수를 검사한다.
⇒ 
boolean hasMoreElements() boolean hasMoreTokens()
문자열내 토큰이 더 남아 있는지 검사한다.
⇒ 
Object nextElement() String nextToken()
문자열내 다음 토큰을 검색한다.
⇒ 
String nextToken (String delimiter)
새로운 단락문자를 delimiter 내의 문자로 정의하고, 다음 토큰을 검색한다.
⇒  예제

 // StringTokenizer 클래스의 객체를 다루는 예제 프로그램
import
 java.util.*;

public class MakingToken
{
  static String testString  = "This is a test string. You'll see the tokens.";

  public static void main(String[] args)
  {
    // 문자열 인수 delimiter가 없으므로 디폴트 값인 공백으로 단락 구분
    StringTokenizer stringA = new StringTokenizer(testString);
    // 인수 bool이 true이면 인수 delimiter 내의 문자도 토큰으로 반환
    // 개행문자, 캐리지리턴, 탭문자, 마침표, 공백문자, 외따옴표를 
    // 단락문자로 지정하고, 단락문자도 하나의 토큰으로 반환한다. 
    StringTokenizer stringB = new StringTokenizer(testString, "\n\r\t. \'"true);
    int i=0;
    System.out.println("List of token from stringA");
    // .hasMoreTokens() => 문자열 내에 토큰이 남아있는지 조사한다.
    while(stringA.hasMoreTokens())
    {
      if(0 == i%5)
      {
        System.out.println();
      }
      // .nextToken() => 다음 토큰을 검색한다.
      System.out.print(i++ + ">" + stringA.nextToken() + "\n");
    }
    i=0;
    System.out.println("\n\nList of token from stringB");
    while(stringB.hasMoreTokens())
    {
      if(0 == i%5)
      {
        System.out.println();
      }
      System.out.print(i++ + ">" + stringB.nextToken() + "\n");
    }
  }
}

⇒ 출력 결과


 
728x90