[Study #05] 배열

    반응형

     

     

    01. 배열이란?

    • 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해놓은 자료구조
    • 객체는 기본적으로 속성과 메서드를 가지고 있지만 객체 중 배열은 유일하게 속성만 가지고 있음

    • 인덱스는 0부터 시작
    • 배열은 같은 타입의 데이터만 저장할 수 있음
    • 한 번 생성된 배열은 길이를 늘이거나 줄일 수 없음
    • 배열은 하나의 이름으로 불려지고 R타입처럼 관리 됨

     

    02. 배열 형식

     

    [ 기본 형식 ] 데이터 타입[] 변수명 = new 데이터 타입[인덱스 값];

    int[] arr01 = new int[10]; //int 타입의 10개 배열 선언
    double[] arr02 = new double[5];//double 타입의 5개 배열 선언
    String[] arr03 = new String[3];//String 타입의 3개 배열 선언
    //char는 문자열이 아닌 한 글자만 저장하는 명령어
    
    System.out.println(arr01);//값 : [I@3d012ddd
    //뜻 : [는 배열, I는 int, 3d012ddd는 객체의 주소
    //그대로 출력하면 [위치, index, 번지]의 값이 출력
    
    System.out.println(arr01[0]);//값 : 0
    //arr01의 0번지에 저장된 값 출력
    
    //변수선언
    arr01[0] = 100; //해당 위치에 100을 저장하라는 뜻
    arr01[1] = 10;
    arr01[2] = 50;
    
    arr03[0] = "홍길동";
    arr03[1] = "금길동";
    arr03[2] = "이길동";

     

     

    [ 활용 ]

    public class Array {
        public static void main(String[] args) {
    
        // 생성
        int[] arr01 = new int[10];
    
        // 값 입력 (역순으로 채워넣기)
        for (int i = 9; i >= 0 ; i--)
            arr01[i] = 10 - i;
    
        //출력
        System.out.println(Arrays.toString(arr01));
    
        //생성과 값 입력을 동시에
        int[] arr02 = new int[] {10, 9, 8, 7, 6};//길이를 마음대로 조절 불가
        int[] arr03 = {5, 4, 3, 2, 1};
    
        }
    }

     

    03. 배열의 길이

    • 배열에 저장할 수 있는 전체 항목의 개수를 말함
    • 코드에서 배열의 길이를 얻으려면 배열 객체의 length를 이용하면 됨
      (ex. 배열 변수.length;)

     

    [ 기본 ] 

    //int[10] 1~10까지 입력하기
    int[] arr01 = new int[10]
    for (int i = 0; i < arr01.length; i++) {//0~9
    	arr01[i] = i + 1;
    }
    
     //배열 전체 출력
    System.out.println(Arrays.toString(arr01));//toString -> 배열을 스트링으로 변경
    //배열은 인덱스만 바꿔서 원하는 값 입력할 수 있음
    
    int[] intArray = { 10, 20, 30 ];//int타입의 배열 생성
    System.out.println(arr03.length);//int 타입으로 길이 출력 : 3
    
    //배열 출력
    for (int i = 0; i < arr03.length; i++) {
        System.out.println(arr03[i]);
        //arr03배열값 출력
        //10 20 30

     

    04. 배열의 초기값

    • 객체는 객체 생성과 동시에 초기값을 가짐
    • 정수 = 0, 실수 = 0.0, 객체 = null, char = 0 (아스키 코드 특수문자로 화면엔 나오지 않음)
      boolean = false

    [ 예시 ] 

    int[] test01 = new int[3];
    System.out.println(Arrays.toString(test01));//[0, 0, 0]
    
    byte[] test02 = new byte[3];
    System.out.println(Arrays.toString(test02));//[0, 0, 0]
    
    long[] test03 = new long[3];
    System.out.println(Arrays.toString(test03));//[0, 0, 0]
    
    short[] test04 = new short[3];
    System.out.println(Arrays.toString(test04));//[0, 0, 0]
    
    float[] test05 = new float[3];
    System.out.println(Arrays.toString(test05));//[0.0, 0.0, 0.0]
    
    char[] test06 = new char[3];
    System.out.println(Arrays.toString(test06));//[ , , ]
    
    boolean[] test07 = new boolean[3];
    System.out.println(Arrays.toString(test07));//[false, false, false]
    
    String[] test08 = new String[3];
    System.out.println(Arrays.toString(test08));//[null, null, null]
    
    Scanner[] test09 = new Scanner[3];//R타입은 다 null로 뜸
    System.out.println(Arrays.toString(test09));//[null, null, null]
    
    Object[] test10 = new Object[3];
    System.out.println(Arrays.toString(test10));//[null, null, null]

     

     

    05. printf 활용

     

     

    ' printf ' 활용 

    %d = 정수     %c = 문자     %f = 실수    %s = 문자열    %b = boolean

    %o = 8진수    %x = 16진수    \n = 줄바꿈     \t = tab키

     
    //% 쓸 때는 무조건 printf 써야함
    String name = "홍길동";
    System.out.printf("제이름은 %s입니다.\n", name);
    
    double pi = 3.14;
    System.out.printf("파이는 %f입니다.\n", pi);
    System.out.printf("파이는 %.2f입니다.\n", pi);
    //.2는 소수점 아래 둘째자리까지 보여줘 라는 뜻
    
    int money = 5000;
    System.out.printf("제 용돈은 %d원입니다.\n", money);
    System.out.printf("제 용돈은 %,d원입니다.\n", money);
    //,붙여주면 5,000원으로 출력
    
    System.out.printf("제 용돈은 %10d원입니다.\n", money);
    /10칸을 만들고 값을 적는다는 뜻
    
    System.out.printf("제 이름은 %7s입니다.\n", name);
    //폭을 만들 수 있음
    System.out.printf("제 이름은 %7s입니다.\n", "가나다라");
    
    char ch = 65;
    System.out.printf("제 이름은 %c입니다.\n", ch);
    
    System.out.printf("제 이름은 %10d입니다.\n", 1000);//오른쪽정렬
    System.out.printf("제 이름은 %-10d입니다.\n", 1000);//왼쪽정렬
    System.out.printf("제 이름은 %010d입니다.\n", 1000);//빈 공간을 0으로 채움

     

     

    06. 배열 활용 예제

     

    [ Q1. 구구단 2단 출력하는 프로그램 작성 ]

    // 방법 1)
    for (int i = 1; i < 10; i++) {
        System.out.println("2 x " + i + " = " + (2 * i));
    }
    
    // 방법 2)
    for (int i = 1; i < 10; i++) {
        System.out.printf("2 X %d = %d\n", i, (2 * i));
        // %d == 정수              첫번째 d자리  두번째 d자리

     

    [ Q2. 2단부터 9단까지 for문으로 출력 ]

    // 방법 1)
    for (int i = 2; i < 10; i++) {
        for (int j = 1; j < 10; j++) {
            System.out.printf("%d x %d = %d\n", i, j, i * j);
        }
        System.out.println("");
    }
    
    // 방법 2)
    for (int i = 2; i < 10; i++) {
        for (int j = 1; j < 10; j++) {
            System.out.printf("%d x %d = %d\n", j, i, i * j);
        }
        System.out.println("");
    }
    
    // 방법 3) 옆으로 출력
    for (int i = 1; i < 10; i++) {
        for (int j = 2; j < 10; j++) {
            System.out.printf("%d x %d = %d\t", j, i, i * j);
        }                                //n대신 t를 넣음 
        System.out.println("");
    }

     

    [ Q3. 알파벳 A - Z까지 저장하는 배열 만들기 ]

    public class Test03 {
    	public static void main(String[] args) {
    
    		char[] cha01 = new char[26];
    
    		for (int i = 65; i <= 90; i++) {
    			cha01[i - 65] = (char) i;
    
    		System.out.println(cha01[i-65]);
    		}
    	}
    }

     

    [ Q4. 문자 암호화 하기 ]

    package jun08;
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Test04 {
    	public static void main(String[] args) {
        
    		Scanner sc = new Scanner(System.in);
    		String input;
    
    		System.out.println("암호화 할 문장을 입력하세요.");
    		System.out.print("입력 : ");
    
    		input = sc.nextLine();// 입력받을 때까지 기다림
    		input = input.toUpperCase();// 입력받은 문장 모두 대문자화
    		// input.toLowerCase(); 입력받은 문장 모두 소문자화
    
    		// 문자열을 배열화하기
    		// System.out.println(input);
    		// String to char
    
    		char[] chInput = input.toCharArray();
    		// input에 넣은 것을 하나하나 쪼개서 배열로 만들기 
    		// (스트링을 char배열로 만들기)
    
    		System.out.println(Arrays.toString(chInput));//입력한 문장 배열로 출력
    
    		int z = 0;
    		for (int i = 0; i < chInput.length; i++) {
    			if ( ((char) (chInput[i] + 3)) > 90) {
    				z = (chInput[i] + 3) - 26;
    				System.out.println( (char) z);
    			} else {
    				System.out.println((char) (chInput[i] + 3));
    			}
    		}
    		sc.close();
    	}
    }

     

    [ Q5. String 자르기 ]

    package jun08;
    
    public class Test05 {
    	public static void main(String[] args) {
    		
    		String word = "Hello";
    		//             01234  charAt은 n번째 있는 것을 char화 시키는 것임
    		System.out.println(word.length());//word가 가지고 있는 길이 = 5
    		
    		for (int i = 0; i < word.length(); i++) {
    			System.out.print( (char) (word.charAt(i) + 3 ) );//Khoor (3글자 밀기)
    		}
    		
    		// string 2번부터 뒤까지 출력
    		System.out.println( word.substring(2));// llo
    		// string 0번부터 2번 앞까지 출력
    		System.out.println( word.substring(0,2));// He
    		
    		String name01 = "가나다라마법사";
    		System.out.println( name01.substring (4,7) );// 마법사
    		
    		String name = "가나다라마법사";
    		String shortName = name.substring (4,name.length());
    		System.out.println( shortName );// 마법사
    	}
    }

     

    [ Q6. 1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수 작성하기 ]

    package jun08;
    
    public class Test06 {
    	public static void main(String[] args) {
        
    		int[] map = {1, 3, 4, 8, 13, 17, 20};
    		int fir = 1;// 시작 숫자
    		int sec = 3;// 끝 숫자
    		int temp = map[1] - map[0];// 두 수의 차이
    
    		for (int i = 0; i < map.length - 1; i++) {
    			// System.out.print(map[i] +", "+map[i + 1] + " : ");
    			// System.out.println(map[ i + 1 ] - map[i]);//뒷 수 - 앞 수
    			//                      i + 1까지 가게 하려고
    			
    			if( (map[ i + 1 ] - map[i]) < temp ) {
    				temp = map[ i + 1 ] - map[i];
    				fir = map[i];
    				sec = map[i + 1];
    			}
    		}
            
    		System.out.print("두 거리의 차가 가장 작은 숫자는 ");
    		System.out.print(fir + ", " + sec);
    	}
    }

     

     

    참고자료
    신용권, '혼자 공부하는 자바'

     

    반응형

    댓글