ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java :: 2차원 배열 및 메소드 설명
    IT/Java & JSP & FW 2011. 12. 14. 12:44
    2차원 배열
    -2차원 배열 선언
    자료형 배열명[][]
    자료형 []배열형[]
    자료형 [][]배열명

    -2차원 배열 메모리 생성하기
    배열명=new 자료형[행수][열수]

    -2차원 배열 초기화하기
    배열명[행][열]=값;

    -선언시 사용하는 []의 위치의 의미 (이해할 것)
    1. int []i, j, k; - 1차원, 변수, 변수
    2. int i[], k; - 1차원, 변수
    3. int []i[], j; - 2차원, 변수
    4. int i[][], j; - 2차원, 변수
    5. int []i[], j[]; - 2차원, 1차원

    예제1
    (day08_01.java)
    import java.io.*;
    public class day08_01 {
    	public static void main(String[] args) 
    	throws IOException{
    		
    		System.out.println("2차원 배열");
    		
    		//1. 선언하기
    		int arr[][];  // 하나를 쓰면 1차원 2개를 쓰면 2차원, 3차 4차 []을 계속 붙이면 됨.
    		
    		//2. 생성
    		arr=new int[3][2];  //3행의 2열이 됨.
    		
    		//3. 초기화
    		arr[0][0]=10;
    		arr[0][1]=20;
    		arr[0][0]=30;
    		arr[0][1]=40;
    		
    		for(int i=0;i<arr.length;i++){  // 2차원 배열은 다중 for문을 이용한다. 행과 열에 접근해야 하기 때문이다. 
    			for(int j=0;j<arr[i].length;j++){  //2차원 배열에서의 length 작동 원리를 이해할 것. 
    				System.out.print("arr["+arr[i][j]+"]\t");
    			}
    			System.out.println();
    		}
    		
    	}
    }
    

    예제2
    (day08_01.java)
    import java.io.*;
    public class day08_01 {
    	public static void main(String[] args) 
    	throws IOException{
    		
    		System.out.println("2차원 배열");
    		
    		//1. 선언하기
    		int arr[][];  // 하나를 쓰면 1차원 2개를 쓰면 2차원, 3차 4차 []을 계속 붙이면 됨.
    		
    		//2. 생성
    		arr=new int[5][5];  //3행의 2열이 됨.
    	 
    		// 2차원 배열을 이용하여 
    		// 10000
    		// 01000
    		// 00100
    		// 00010
    		// 00001
    		// 출력 시키기
    		for(int i=0;i<arr.length;i++){  // 2차원 배열은 다중 for문을 이용한다. 행과 열에 접근해야 하기 때문이다. 
    			for(int j=0;j<arr[i].length;j++){  //2차원 배열에서의 length 작동 원리를 이해할 것. 
    				if(i==j){
    					arr[i][j]=1;
    				}
    				System.out.print(arr[i][j]);
    			}
    			System.out.println();
    		}
    		 
    		// 배열의 원리와 구조를 이해하면 
    		// 열에 똑같은 값을 넣지 않아도 2차원 배열이 생성됨을 알 수 있다. 
    		int c[][]=new int[4][];
    		c[0]=new int[7];
    		c[1]=new int[4];
    		c[2]=new int[6];
    		c[3]=new int[3];
    		for(int i=0;i<c.length;i++){
    			for(int j=0;j<c[i].length;j++){
    				System.out.print(c[i][j]+" ");
    			}
    			System.out.println();
    		}
    	}
    }
    


    메소드 (Method)

    프로그램의 유연성을 위하여 반복되어 사용 되는 내용을 묶어서 특정 이름으로 관리하는 것.
    클레스에 종속이 되어 있어야 한다. (클레스 하단에 작성한다.)
    -형식

    public static void main(String[] args){

    }

    접근제한자[지정예약어] 반환타입 메소드명(매개변수들){
                 처리할 ............
                 내용들 ............

    메소드를 만들 땐 앞 글자는 소문자, 뒷 글자는 대문자를 쓴다.
    모두 소문자를 쓸 경우 변수로 인식, 앞 글자를 대문자로 쓸 경우 클래스로 인식하기 때문이다.
    모두 대문자로 적으면 상수로 인식할 가능성이 있다.

    -메소드 3가지
    call by name :: 이름을 불러서 쓸 수 있는 메소드
    call by value :: 원본의 값을 복사해서 쓰는 메소드 원본에 변형이 없다.
    call by reference :: 원본의 주소값을 복사해서 쓰는 메소드, 원본에 변형이 있다.

    예제
    (Methodtest.java)
    public class Methodtest {
    	
    	//call by name
    	//메소드 작성
    	//public - 아무나 접근 가능
    	//static - 메모리에 바로 올림
    	//void - 반환타입 없음
    	public static void xLine(){
    		System.out.println("--------------------------");
    	}
    	
    	//call by value
    	//반환형 int
    	public static int maxNum(int x, int y){
    		int max=x>y?x:y;
    		
    		//보조제어문
    		return max;  //max의 값을 넘길 수 있게 된다. 딱 1개의 값을 넘길 수 있다.
    	}
    	
    	//call by value
    	//기본 8가지 형을 넘기는 것 (값을 복사함)
    	public static void swapNum(int x, int y){
    		int temp;
    		temp=x;
    		x=y;
    		y=temp;
    	}
    	
    	//call by reference
    	//넘기는 값이 주소값이므로 실제 데이터를 변형시킨다.
    	public static void refTest(int temp[]){
    		temp[1]=1004;
    	}
    	
    	public static void main(String[] args) {
    		xLine();  //이름을 불러주면 xLine메소드의 내용을 출력한다.
    		System.out.println("이름: 홍길동");
    		xLine();
    		System.out.println("나이: 20살");
    		xLine();
    		System.out.println("거주지: 서울");
    		xLine();
    		//밑줄을 긋는 행위는 반복이 되므로 메소드를 만들어 편하게 사용할 수 있게끔 한다.
    		
    		int x=10;
    		int y=20;
    		
    		System.out.println("x="+x+"/y="+y);
    		swapNum(x,y);
    		System.out.println("x="+x+"/y="+y);  
    		//스왑을 했으나 변화가 없음을 볼 수 있다. 
    		//이유는 swapNum 에서 복사한 값을 가지고 있기 때문에 실제 값에 영향을 미치지 않는다.
    		//이렇게 기본 데이터를 복사해서 사용하는 메소드를 "call by value" 라 부른다.
    		
    		int z=maxNum(x,y);  //maxNum메소드에서 값을 처리한 다음 변수 z 에 값을 저장시킴
    		System.out.println("최대값은 "+z);
    		
    		int a[]={10,20,30,40,50};
    		for(int i=0;i<a.length;i++){
    			System.out.print(a[i]+" ");
    		}
    		System.out.println("\n--------------------------");
    		refTest(a);
    		for(int i=0;i<a.length;i++){
    			System.out.print(a[i]+" ");
    		}
    	}
    }
    


    메소드를 이용해 print 구문 간략화하기
    (print.java) 
    import java.io.*;
    public class print {
    	
    	public static void print(String str){
    		System.out.println(str);
    	}
    	
    	public static void main(String[] args)
    	throws IOException {
    		
    		print("3346323");
    		print("1");
    		print("209230923");
    		
    	}
    }
    


    메소드를 이용해서 사칙연산 프로그램 만들기
    (last.java)
    import java.io.*;
    public class last {
    	
    	//실제 사칙연산 메소드 부분.
    	public static int call(int x, int y,char c){
    		int result=0;
    		
    		switch(c){
    		case '*':result=x*y;break;
    		case '+':result=x+y;break;
    		case '-':result=x-y;break;
    		case '/':result=x/y;
    		}
    		
    		return result;
    	}
    	
    	public static void main(String[] args) 
    	throws IOException{
    		BufferedReader in=
    				new BufferedReader(new InputStreamReader(System.in));
    		
    		System.out.println("사칙연산 계산 프로그램");
    		System.out.print("첫 번째 수>");
    		int x=Integer.parseInt(in.readLine());
    		System.out.print("두 번째 수>");
    		int y=Integer.parseInt(in.readLine());
    		System.out.print("+ - / * 중 연산자 선택>");
    		char c=(char)in.read();  //연산자 받는 부분을 잘 보도록한다.
    		
    		System.out.println(x+"/"+y+"/"+c);
    		
    		int res=call(x,y,c);
    		
    		System.out.println("사칙연산 결과입니다.");
    		System.out.println(x+""+c+""+y+"="+res);
    	}
    }
    

Designed by Tistory.