JAVA - 인수로서의 배열, 2중배열, tokenizer
- 인수로서의 배열
⇒ 메소드의 호출시 배열의 원소나 배열 전체가 인수로써 사용될 수 있다. 배열은 객체임으로 인수로 전달될 때는 배열의 참조변수가 인수가 된다. 다른 객체의 경우와 마찬가지로 참조전달 호출이 된다.
⇒ 피호출 메소드는 참조변수의 값은 바꿀 수 없지만, (값 전달 호출) 배열 객체의 값은 참조변수를 통해서 변경할 수 있다.
→ 배열의 원소가 인수일 경우에는 배열이 기본 자료형이면 값 전달 호출이 되고,
→ 배열의 원소가 객체일 경우에는 참조전달 호출이 된다.
public class SendPremitiveElement
{
public static void main(String[] args)
{
int[] list = {1, 3, 5, 7, 9};
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 = {1, 3, 5, 7, 9};
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]에 저장된다.
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차원 배열의 색인은 두 개의 대괄호로 나타낸다.
class TwoDemenstionalArray
{
public static void main(String[] args)
{
Matrix horse = new Matrix();
horse.print();
}
}
class Matrix
{
int[][] matrix = {{15, 16, 17, 18},
{23, 24, 25},
{37},
{41, 42, 43, 44, 45}};
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 내의 문자로 정의하고, 다음 토큰을 검색한다.
⇒ 예제
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");
}
}
}
'내장형 하드웨어 > JAVA' 카테고리의 다른 글
JAVA - 예외의 전파(Exception propagation), Throwable class, 그래픽(Graphics) (0) | 2011.12.22 |
---|---|
JAVA - 예외처리(Exception) (0) | 2011.12.21 |
JAVA - String 클래스의 메소드, 배열 (0) | 2011.12.14 |
JAVA - 인터프리터, (0) | 2011.12.05 |
JAVA - 윈도우 생성 2번째 (0) | 2011.08.09 |