coding/[2021.08.02~2022.01.24] 수업복습

[수업 5일차] 2021.08.06, 배열, 보조제어문, 가변배열

꽃무늬라떼 2021. 8. 6. 17:58
  • 04_Control-Ex34

 

 * 3. 기타(보조 제어문)
 * 		- break 명령어
 * 		- 현재의 제어문을 빠져 나가는 명령어.
 * 		- 보통은 switch~case 문과 반복문에서 사용됨.
 *  	- 반복문에서는 if문 블럭을 제외한 첫번째 블럭에서 빠져나가는 명령어.
package sist;


/*
 * 3. 기타(보조 제어문)
 * 		- break 명령어
 * 		- 현재의 제어문을 빠져 나가는 명령어.
 * 		- 보통은 switch~case 문과 반복문에서 사용됨.
 *  	- 반복문에서는 if문 블럭을 제외한 첫번째 블럭에서 빠져나가는 명령어.
 */

public class Ex34 {

	public static void main(String[] args) {
		
		// 반복문에서 break 명령어 예제
		for(int i=1; i<=100; i++) {
			
			if(i >50) {  //51이 되었을때
				break;
				
			}
			
			System.out.println("i >>> " +i);
		}
	}

}

 

 


  • 04_Control-Ex35

 

package sist;

// 1~100까지의 합을 구하는데 합이 200이 되는 
// 순간까지만 합을 구하여 화면에 출력해 보세요.


public class Ex35 {

	public static void main(String[] args) {
		
		int sum = 0, su;//합을 구하는 변수
		
		for(su = 1; su<100; su++) {
			sum = sum + su;
			if(sum >= 200) {
				break;
				
			}
			
		}//for문 end
System.out.println("sum >>> " + sum);
System.out.println("su >>> " +su);
	}

}

 

for(int su = 1; su<100; su++) {
sum = sum + su;
if(sum >= 200) {
break;

}

}//for문 end
System.out.println("sum >>> " + sum);
System.out.println("su >>> " +su));------x

 

for문에서 선언한 변수는 for문에서만 사용가능하기때문에 오류로 뜬다(지역변수)

 


  • 04_Control-Ex36
 * 3. 기타(보조 제어문)
 * 		- continue 명령어.
 * 		- 반복문에서만 사용하는 명령어.
 * 		- 반복문을 탈출하는 것이 아니라, 다음 증감식으로 가는 명령어.

 

package sist;

/*
 * 3. 기타(보조 제어문)
 * 		- continue 명령어.
 * 		- 반복문에서만 사용하는 명령어.
 * 		- 반복문을 탈출하는 것이 아니라, 다음 증감식으로 가는 명령어.
 */

public class Ex36 {

	public static void main(String[] args) {
		
		for(int i=1; i<=10; i++) {
			
			if(i%2 == 1) {  //홀수인 경우
				continue;
				
			}
			
			System.out.println("i >>> " + i);
		}
		
		System.out.println();
		
		int sum = 0;					//짝수의 합만 누적시키는 로직
		
		for(int i=1; i<=100; i++) {
			
			if(i%2 == 1) { //홀수인 경우
				continue;
			}
			
			sum = sum + i;
			
		}
		System.out.println("sum >> " + sum);

	}

}

 

홀수인 경우는 출력이 안되고 증감식으로 가는 코드 짝수값만 출력이 되는 반복문

 

 

 


  • 05_Array-Ex01

배열                                                                                      

* 배열(Array)?
 * - 하나의 이름으로 동일한 자료형의 데이터를 여러 개 
 *   연속적으로 저장할 수 있는 메모리 공간을 할당 받는 것을 말함.
 * - 변수는 하나의 값만을 저장하지만, 배열을 여러개의 갓을 
 *   저장할 수 있음. - 같은 자료형의 데이터들이 순차적으로 저장됨.
 * - 배열은 선언과 동시에 저장할 수 있는 자료형의 타입이 결정됨.
 *   만약 다른 자료형의 데이터를 저장하려면 타입 불일치 컴파일 오류가 발생함.
 * - 배열의 방의 이름은 0 이라는 인덱스부터 시작함.
 * - 배열의 단점 : 배열은 한 번 크기가 정해지면 크기를 늘리거나 줄일 수 없음.
 * 
 * 
 * 
 * [배열을 사용하는 방법]
 * - 1단계 : 배열 선언(자료형[] 배열명(배열이름), 자료형 배열명[])
 * - 2단계 : 배열 메모리 생성( 메모리 할달: 배열명 = new 자료형[배열의 크기])
 * - 3단계 : 배열 초기화(할당된 메모리 영역에 데이터를 저장)
 * - 4단계 : 배열을 이용(데이터 처리 - 연산, 출력 등등)
 * 
 * 
 * 
 * [배열을 생성하는 방법 - 2가지]
 * 1. new 키워드를 사용하여 배열 생성.
 * 2. 배열의 초기값을 이용하여여 배열 생성.
package sist;

/*
 * 배열(Array)?
 * - 하나의 이름으로 동일한 자료형의 데이터를 여러 개 
 *   연속적으로 저장할 수 있는 메모리 공간을 할당 받는 것을 말함.
 * - 변수는 하나의 값만을 저장하지만, 배열을 여러개의 갓을 
 *   저장할 수 있음. - 같은 자료형의 데이터들이 순차적으로 저장됨.
 * - 배열은 선언과 동시에 저장할 수 있는 자료형의 타입이 결정됨.
 *   만약 다른 자료형의 데이터를 저장하려면 타입 불일치 컴파일 오류가 발생함.
 * - 배열의 방의 이름은 0 이라는 인덱스부터 시작함.
 * - 배열의 단점 : 배열은 한 번 크기가 정해지면 크기를 늘리거나 줄일 수 없음.
 * 
 * 
 * 
 * [배열을 사용하는 방법]
 * - 1단계 : 배열 선언(자료형[] 배열명(배열이름), 자료형 배열명[])
 * - 2단계 : 배열 메모리 생성( 메모리 할달: 배열명 = new 자료형[배열의 크기])
 * - 3단계 : 배열 초기화(할당된 메모리 영역에 데이터를 저장)
 * - 4단계 : 배열을 이용(데이터 처리 - 연산, 출력 등등)
 * 
 * 
 * 
 * [배열을 생성하는 방법 - 2가지]
 * 1. new 키워드를 사용하여 배열 생성.
 * 2. 배열의 초기값을 이용하여여 배열 생성.
 */

public class Ex01 {

	public static void main(String[] args) {
		
		// 1단계 : 배열 선언(형식 : 자료형[] 배열명(배열이름), 자료형 배열명[])
		//int[] score;
		
		// 2단계 : 배열 메모리 생성( 메모리 할달: 배열명 = new 자료형[배열의 크기])
		//score = new int[3];
		
		//1단계 + 2단계 : 배열 선언 및 배열 메모리 생성
		int[] score = new int[5];
		
		
		System.out.println(score);
		
		//3단계 : 배열 초기화(할당된 메모리 영역에 데이터를 저장)
		score[0] = 10;
		score[1] = 20;
		score[2] = 30;		//130
		score[3] = 40;		//90
		score[4] = 50;
		
		//4단계 : 배열을 이용(데이터 처리 -연산, 출력 등등)
		
		score[2] += 100;    // score[2] = score[2] + 100;
		score[3] += 50;		// score[3] = score[3] + 50;
		
		
		System.out.println("score[0] >>> " + score[0]);
		System.out.println("score[1] >>> " + score[1]);
		System.out.println("score[2] >>> " + score[2]);
		System.out.println("score[3] >>> " + score[3]);
		System.out.println("score[4] >>> " + score[4]);
		
		//반복문을 이용하여 배열을 출력해 보자.
		for(int i=0; i<5; i++) {
			System.out.println("score["+i+"] >>>" + score[i]);

		}
		
	}

}

 

여러개를 저장하는데 몇개를 저장할지 지정을 해야지 공간이 만들어짐

 

초기화가안됐다

 

 


  • 05_Array-Ex02
package sist;

import java.util.Scanner;

// 내가 여행을 가고 싶은 5개 나라를 
// 키보드로 입력을 받아서 배열에 저장해 보자. 

public class Ex02 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		String[] nations = new String[5];
		
		/*
	
		 * 
		 * System.out.println("첫번째 나라 입력 : ");
		 * 
		 * nations[0] = sc.next(); 
		 * 
		 * System.out.println("두번째 나라 입력 : ");
		 * 
		 * nations[1] = sc.next(); 
		 * 
		 * System.out.println("세번째 나라 입력 : ");
		 * 
		 * nations[2] = sc.next();
		 * 
		 * System.out.println("네번째 나라 입력 : ");
		 * 
		 * nations[3] = sc.next(); 
		 * 
		 * System.out.println("다섯번째 나라 입력 : ");
		 * 
		 * nations[4] = sc.next();
		 */	
	
		
		//반복문으로 5개 나라 입력해 보자.
		for(int i=0; i<5; i++) {
			System.out.println((i+1) + "번째 나라 입력 : ");
			nations[i] = sc.next();
		}
		
		//배열에 저장된 5개의 나라를 화면에 출력해 보자.
		for(int i=0; i<5; i++) {
			System.out.println((i+1) + "번째 가고 싶은 나라>>> " + nations[i]);
			
		
		sc.close();
	
	}
	}
}

 

 

 

1. Scanner에 마우스 커서를 가져간다.

2. 지구모양을 클릭한다.

3. 스크롤을 내려서 Method Summary를 확인한다.

 

class에 따라서 Method(기능)의 크기가 다 다르기 때문에 new라는 메모리에 저장 (자료형의 크기가 규격화가 되지 않아서 new를 사용하는 것이다.)


  • 05_Array-Ex03
  • 반복문 사용
 * for문을 단축시킨 반복문 ==> 단축 for문(개선된 for문)          //index는 안나오고 요소에 대한 값만 출력할때 사용
		 * 
		 * 단축 for(개선된 for문)
		 * - java jdk 1.5버전부터 추가된 기능.
		 * - 주로 배열의 요소(원소, 값)을 처리(출력)할 때 사용함.
		 * 
		 * 		형식)
		 * 			for(자료형 변수명 : 베열명) {
		 * 				반복 실행문;
		 * 
		 * 
		 * 		실행방법)
		 * 		    - 배열의 첫번째 인덱스[0]에 있는 데이터를 좌변의 
		 * 			   변수명에 할당을 하여 출력을 해줌.
		 * 		   	   데이터의 수만큼 자동으로 반복하여 출력함.
		 * 
		 * 		주의)
		 * 			- 우변의 배열명의 자료형과 좌변의 변수명의 자료형은 
		 * 			    반드시 일치해야함.
		 *          - 만약 일치하지 않으면 error 발생.
		 *
package sist;

import java.util.Scanner;

// 내가 여행을 가고 싶은 5개 나라를 
// 키보드로 입력을 받아서 배열에 저장해 보자. 

public class Ex02 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		String[] nations = new String[5];
		
		/*
	
		 * 
		 * System.out.println("첫번째 나라 입력 : ");
		 * 
		 * nations[0] = sc.next(); 
		 * 
		 * System.out.println("두번째 나라 입력 : ");
		 * 
		 * nations[1] = sc.next(); 
		 * 
		 * System.out.println("세번째 나라 입력 : ");
		 * 
		 * nations[2] = sc.next();
		 * 
		 * System.out.println("네번째 나라 입력 : ");
		 * 
		 * nations[3] = sc.next(); 
		 * 
		 * System.out.println("다섯번째 나라 입력 : ");
		 * 
		 * nations[4] = sc.next();
		 */	
	
		
		//반복문으로 5개 나라 입력해 보자.
		for(int i=0; i<5; i++) {
			System.out.println((i+1) + "번째 나라 입력 : ");
			nations[i] = sc.next();
		}
		
		//배열에 저장된 5개의 나라를 화면에 출력해 보자.
		for(int i=0; i<5; i++) {
			System.out.println((i+1) + "번째 가고 싶은 나라>>> " + nations[i]);
			
		
		sc.close();
	
	}
	}
}

 

 

초록색 부분만 다르기 때문에 반복문으로 출력이 가능

 

객체마다 속성과 기능이 다르기 때문에 heap이라는 메모리에 데이터를 저장해야한다.

int 로 5개를 할당 받으면 20 byte를 할당 받음

 

*배열을 한번 만들면 늘리거나 삭제 할 수가 없기 때문에 신중하게 만들어야한다. 

 

 

변수: 하나의 데이터를 저장

배열; 여러개의 데이터를 저장

 

배열의 생성

 

타입[ ] 변수이름;

변수이름 = new 타입 [길이];

 

 


  • 05_Array-Ex04
package sist;

// 2. 배열의 초기값을 이용하여 배열 생성.


public class Ex04 {

	public static void main(String[] args) {
		
		//배열을 생성함과 동시에 초기값 설정
		int[] arr = {10, 20, 30, 40, 50};
		
		arr[4] += 50;   // arr[4] = 100
		
		for(int k : arr) {
			System.out.println("arr 배열의 값 >>> " + k);
		}
		

	}

}

  • 05_Array-Ex05
 * length 속성
 * - 배열의 크기(길이)를 알려주는 명령어
 * - 배열의 크기(길이)를 정수값으로 알려줌.
 *   형식) 배열명.length
 *   예 ) int size = arr.length;
package sist;     


import java.util.Scanner;

//다시 확인

/*
 * length 속성
 * - 배열의 크기(길이)를 알려주는 명령어
 * - 배열의 크기(길이)를 정수값으로 알려줌.
 *   형식) 배열명.length
 *   예 ) int size = arr.length;
 */

public class Ex05 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
	
		int[] arr = new int[3];
		
		System.out.println("arr 배열의 크기(길이) >>> " + arr.length);
		
		for(int i=0; i<arr.length; i++) {
			System.out.print((i+1) + "번째 정수 입력 >>> ");
			arr[i] = sc.nextInt();
		}
		
		System.out.println();
		
		for(int i=0; i<arr.length; i++) {
			System.out.println("arr["+i+"] >>> " + arr[i]);
		}
		sc.close();
	}

}

  • 05_Array-Ex06
package sist;

import java.util.Scanner;

//키보드로 배열의 크기를 입력을 받아 보자. 

public class Ex06 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("배열의 크기를 입력하세요. : ");
		
		
		
		//int size = sc.nextInt();
		
		int[] arr = new int[sc.nextInt()];
		
		System.out.println("arr 배열 크기 >>> " + arr.length);

		
		for(int i=0; i<arr.length; i++) {
			System.out.print((i+1) + "번째 정수 입력 >>> ");
			arr[i] = sc.nextInt();
		}
		
		System.out.println();
		
		for(int i=0; i<arr.length; i++) {
			System.out.println("arr["+i+"] >>> " + arr[i]);
		}
		sc.close();
	}
		

	}

 

\

 

 

직접적으로 숫자나 데이터가 안보이고 무조건 키보드로 입력받게 하는게 좋은 코딩,

안보이게 입력하고 나만 알 수 있게.

숫자 데이터가 나와 있는 것은 0 뿐 고급진 코드

 

 

 

 

배열의 크기를 3이라고 나와있던 것을 

 

sc.nextInt로 받아준것

배열의 크기를 사이즈 변수로 잡는 것보다, sc.nextInt() 키보드로 입력받은 값을 배열의 변수에다가 넣어주기 사이즈 변수를 만들어주면 4바이트가 잡아먹히는데 없이 바로 입력되면 용량도 잡아 먹지 않는다. 

앞에서는 숫자가 들어가서 베열의 크기를 지정해 줬는데. 배열의 크기도 직접적으로 숫자나 데이터가 보이지 않고 무조건 키보드로 입력받게 하는게 좋은 코딩.(데이터가 보이면 좋은 코딩(X)) 

 

숫자 데이터가 나와있는것은 0 밖에 없기 때문에 좋은 코딩으로 고급진 코딩이다. 


  • 05_Array-Ex07
package sist;

import java.io.StreamCorruptedException;
import java.util.Scanner;

public class Ex07 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("문자열 배열의 크기를 입력하세요. : ");
		
		String[] str = new String[sc.nextInt()];
		
		//문자열 배열에 데이터를 저장해 보자. 
		for(int i=0; i<str.length; i++) {
			System.out.println((i+1) + "번째 문자열 입력 >>> ");
			str[i] = sc.next();
			
		}
		
		System.out.println();
		//문자열 배열에 저장된 데이터를 화면에 출력해 보자.
		for(int i=0; i<str.length; i++) {
			System.out.println("str["+i+"] >>> " + str[i]);
			
		}
		System.out.println();

		//문자열 배열에 저장된 문자열을 검색을 해보자.
		System.out.println("검색할 문자열을 입력하세요. : ");
		String search = sc.next();
		
		for(int i=0; i<str.length; i++) {
			if(search.equals(str[i])) {
				System.out.println("찾은 문자열 >>> " + str[i]);
				System.out.println("찾은 인덱스 >>> str["+i+"]");
				
			}
		}
		sc.close();
		
	}

}

Q. next가 아니고 nextInt()가 들어간 이유  ??

무조건 크기가 들어가기 때문에 무조건 숫자값이 들어가야함. 배열의 크기가 들어가야하기 때문이다. 

 

 


  • 05_Array-Ex08 ★★★★★★★★★★★★★★★★★★★★★★★★★★★

int[] arrCopy = arr;                                                             

package sist;

import java.util.Scanner;

public class Ex08 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("정수형 배열의 크기 입력 : ");
		
		int[] arr = new int[sc.nextInt()];
		
		
		// 상당히 중요한 개념이다.
		// 배열 이름은 heap 영역의 시작 주소값을 저장하고 있기 때문에
		// 아래 문장은 시작 주소값을 다른 배열의 배열명에 복사해 주는 명령문이다. 
		// 즉, 배열의 공유가 이루어지게 된다.
		
		int[] arrCopy = arr;
		
		System.out.println("arr 배열 주소 >>> " +arr);
		
		System.out.println("arrCopy 배열 주소 >>> " +arrCopy);
		
		
		//arr 배열에 키보드로 정수값을 배열의 크기만큼 입력해 보자.
		for(int i=0; i<arr.length; i++) {
			System.out.print((i+1) +"번째 정수 입력 >>> ");
			arr[i] = sc.nextInt();
		}
		
		for(int i=0; i<arrCopy.length; i++) {
			System.out.println("arrCopy["+i+"] >>>" +arrCopy[i]);
		}
		sc.close();
	}

}

중요!!!!!!!!!!!!!!

 

문제 빈칸으로 나옴


  • 05_Array-Ex09

내림차순으로 정렬

 

for(int i=0; i<score.length; i++) {
for(int j=i+1; j<score.length; j++) {
if(score[j] > score[i])    //내림차순이기때문에 가장 큰갓이 왼쪽
temp = score[i];
score[i] = score[j];
score[j] = temp;
}
}

package sist;

import java.util.Scanner;

public class Ex09 {

	// 정보처리 실기에 많이나옴
	
/*
 * 배열에 데이터를 저장.
 * - 내림차순으로 정렬할 예정.
 * 	  예) 19, 43, 6, 97, 65
 	 => 97, 65, 43, 19, 6
 */
	
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.println("정수형 배열의 크기 입력 : ");
		
		int[] score = new int[sc.nextInt()];
		
		for(int i=0; i<score.length; i++) {
			System.out.println((i+1) + "번째 정수 입력 >>> ");
			
			score[i] = sc.nextInt();
		}

		// 내림자순으로 정렬을 진행해 보자. 
		int temp = 0;
		
		for(int i=0; i<score.length; i++) {
			for(int j=i+1; j<score.length; j++) {
				if(score[j] > score[i])    //내림차순이기때문에 가장 큰갓이 왼쪽
					temp = score[i];
					score[i] = score[j];
					score[j] = temp;
			}
		}
		
	

	//내림차순으로 정렬된 배열을 화면에 출력해 보자.
	for(int i=0; i<score.length; i++) {
		System.out.print(score[i] + "\t");
		
	}
	System.out.println();
	
	sc.close();
	}
	
}

 


  • 05_Array-Ex10
 * 다차원 배열
 * - 1차원 배열이 여러개 묶여 있는 형태의 배열을 말함. 
 * - 행과 열의 개념이 적용이 됨.
package sist;

/*
 * 다차원 배열
 * - 1차원 배열이 여러개 묶여 있는 형태의 배열을 말함. 
 * - 행과 열의 개념이 적용이 됨.
 */

public class Ex10 {

	public static void main(String[] args) {
		
		// 1. 다차원 배열 선언 및 메모리 생성.
		int[][] arr = new int[3][4];  //3행4열 다차원 배열
		
		int count = 10;
		
		for(int i=0; i<arr.length; i++) {
			for(int j=0; j<arr[i].length; j++) {
				arr[i][j] = count;
				System.out.println("arr["+i+"]["+j+"] >>> " +arr[i][j]);
				
				count +=10;
			}
		}

	}

}

 


  • 05_Array-Ex11
 * 다차원 배열의 가변 배열
 * - java의 다차원 배열은 행마다 서로 다른 열을 가질 수 있다. 
 *   행의 크기를 먼저 결정을 하고, 열의 크기는 가변적으로 할당하는 배열.
 *   - 가변 배열 사용 이유 : 메모리 손실을 최소화 시켜주기 위함.
package sist;

/*
 * 다차원 배열의 가변 배열
 * - java의 다차원 배열은 행마다 서로 다른 열을 가질 수 있다. 
 *   행의 크기를 먼저 결정을 하고, 열의 크기는 가변적으로 할당하는 배열.
 *   - 가변 배열 사용 이유 : 메모리 손실을 최소화 시켜주기 위함.
 */

public class Ex11 {

	public static void main(String[] args) {
	
		// 1. 가차원 배열의 가변 배열 선언 및 메모리 생성
		int[][] arr = new int[4][];   // 행 : 4행, 열 : 미지정
		
		// 2. 가변 배열의 열 메모리 생성.
		arr[0] = new int[3];   //1행3열
		arr[1] = new int[2];   //2행2열
		arr[2] = new int[1];   //3행1열
		arr[3] = new int[4];   //4행4열
		
		
		// 3. 가변 배열에 초기값 할당.
		int count = 10;
		
		for(int i=0; i<arr.length; i++) {
			for(int j=0; j<arr[i].length; j++) {
				arr[i][j] = count;
				System.out.print(arr[i][j] + "\t");
				count += 10;
			}
			System.out.println();
		}

	}

}

가변 배열<< 거의 안나옴 , 게임 업체