오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_12 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_12

chan_96 2022. 1. 4. 19:13
728x90

이중 for문 실행 순서

for(int i=1; i<=2;i++) {
	for(int j=1; j<=i;j++) {
		System.out.println();
	}
}
//  1_int i=1 , 2_ i<=2, 3_i++, 4_int j=1, 5_j<=i, 6_j++, 7_System.out.println()

 

1-2-4-5-7-6-5-3-2-4-5-7-6-5-7-6-5-3-2

 

 

예제 3 (77*1) + (76*2) + (75*3) +... + (1*77)을 계산하여 결과를 출력
더보기

이중 for문 사용 시 코드 매우 복잡!(단순 for문사용)

예제 4 for문을 사용하여 A~Z까지 출력
더보기

A의 아스키코드 - 65
Z의 아스키코드 - 90

강제 형변환
변수 자료형 char로 선언

 


배열

:동일한 자료형의 데이터연속된 공간에 저장하기 위한 자료구조(순차적으로 데이터들이 저장)

> 반복문을 이용하여 처리하기에 적합한 자료구조

 

:인덱스에 대응하는 데이터들로 이루어진 자료구조

> 한 번에 많은 메모리 공간 선언 가능

 

:인덱스는 0부터 시작

> 인덱스는 배열 시작 위치로부터의 상대적인 위치

 

배열 생성

new int[5];  
new 자료형 [배열의 크기]

배열 레퍼런스 변수 선언
레퍼런스 변수(참조 변수) => 메모리 상에 생성된 인스턴스와 메서드를 가리키는 데 사용되는 변수
Ex) int [] arr = new int [5];
자료형 [ ] 변수 이름


배열 생성 시 값을 알고 있는 경우
int[] arr = {4, 2, 5, 7, 10};
float[] arr2 = {0.4f, 0.22f, 0.35f, 7f, 10.23f};​


배열의 얕은 복사

0 출력 new int[5];
int[] arr2 = arr1;
System.out.println("intArray 참조값 : " + intArray); //[I@1175e2db 출력
System.out.println("myArray 참조값 : " + myArray); // 위와 같이 [I@1175e2db 출력
System.out.println(intArray[0]); // 0출력 배열값을 저장하지않았기 때문에 0출력

arr1[1] = 2;
System.out.println(arr1[1]); // => 2 출력

arr2[1] = 6;
System.out.println(arr2[1]); // => 6 출력

 

1. 배열 생성
2. 배열 레퍼런스 변수 선언 (배열의 참조값을 가짐)
char[] c = new char[3]; // 메모리 공간상에 연속적인 3칸 공간 할당​


3. 배열에 값 할당(각 인덱스에 접근)

c[0] = 'a';
c[1] = 'b';
c[2] = 'c';​

 

4. 배열 생성과 동시에 값 할당
int[] i = {1, 5, 7, 3, 10}; // 자동으로 연속적인 5칸 공간 할당
// 배열의 크기 변경 불가능!​

5. 배열 크기 출력(length 필드(속성) 활용)
System.out.println("i 배열 크기 : " + i.length); // 5출력
System.out.println(i); // i배열의 주소값 출력 ex)[I@7de26db8

 

 

배열 선언 및 생성 시 주의사항

1. 레퍼런스 변수 선언 시 배열의 크기를 지정할 수 없다.
2. 반드시 배열이 생성된 후 접근할 수 있다.
3. 각 원소에 접근 시 [ ] 사이에 인덱스를 적어 접근한다.
4. 배열의 인덱스는 0부터 시작한다.

 

배열의 크기

- 레퍼런스 변수 선언 시 결정되지 않음

- 배열 생성 시 결정되며 바꿀 수 없음

- 배열의 length라는 필드(속성)에 저장

int[] intArray = new int[8];
System.out.println("intArray의 크기는 " + intArray.length + "입니다.);

 

올바른 배열 선언 문장을 찾으세요
//1번
int[] = new float(3); // X 변수이름과 자료형 불일치
//2번
int[] avg = new avg[2]; // X 자료형 avg int로 변경
//3번
int[3] avg = {10, 5, 4}; // X int[] 에 크기지정 안됨
//4번
int avg[] = new int[]; // X 크기지정을 안해줌
//5번
int[] avg = new int(4); // X 자료형크기는 대괄호에 작성
//6번
int avg[] = new int[3]; // O
//7번
int[] avg = {10, 5, 4, 6}; // O
//8번
int avg[3] = {8, 9, 5}; // X avg[]안에 크기지정 안됨​
실습 문제
1차원 정수형 배열을 선언한 후 임의의 값으로 초기화합니다. 배열의 값 중 홀수인 값이 몇 개인지 출력하는 프로그램을 작성 (배열의 길이 10)

실습예제 1-2 {45,37,95,103,5,12,17,28,56,29} 배열에 있는 정수중에서 3의 배수만 출력
실습예제 1-3 arr배열 안의 모든 값을 더하고, 총합과 평균을 출력
arr = {10,20,30,40,50,60,70,80,90}

 

실습예제 1-4 arr 배열의 요소에서 최대값과 최소값을 구해보자 / arr = {23,45,95,17,6,89};
실습 예제 1-5 총 5개의 점수를 입력받고 출력, 입력한 점수 중 최고 점수와 최저 점수를 출력 후 점수의 총합과 평균을 출력
더보기

배열을 통해 입력받기!
*min의 값은 배열의 값을 입력받고 난 후에 선언해야 min에 값이 대입된다!
만약 min이 배열의 값을 입력받기 전에 선언이 되었다면 값은 int min = score[0] =>은 0이다!!!

실습 예제 5칸짜리 정수형 배열을 만들고 각각 임의 값으로 초기화(1~10까지)
단, 배열에 중복된 값은 제거하고 배열에 들어있는 값을 출력!

 

실습 예제 로그인 프로그램 만들기!
-아이디와 비밀번호의 크기가 3인 배열 생성!
-회원가입이 3번이 넘으면 프로그램 종료!
더보기

코드!

Scanner sc = new Scanner(System.in);
int menu = 0;

//1.   회원가입/로그인/종료 메뉴 출력 후 사용자가 선택
//2.   종료 선택하기 전까지 계속해서 메뉴 선택, 종료 선택 프로그램 종료
//3.   회원가입 기능
//3-1. 사용자가 아이디/비밀번호 입력 -> 기억(저장) 3명까지 가입가능
// 변수 / 배열(자료 개수, 개수 2개이상) -> 자료 저장, 관리가 용이함

String[] id_arr = new String[3]; //아이디 저장 배열
int[] pw_arr = new int[3]; // 비밀번호 저장 배열
int cnt = 0; // 회원가입한 사람의 수를 카운팅

while(true) {
	System.out.print("[1]회원가입 [2]로그인 [3]종료 >> ");
	menu = sc.nextInt(); //사용자가 메뉴 선택
	
	if(menu == 1) {
		// System.out.println("회원가입");
		System.out.print("아이디 : ");
		String id = sc.next();
		System.out.print("비밀번호 : ");
		int pw = sc.nextInt();
		
		id_arr[cnt] = id;
		pw_arr[cnt] = pw;
		
		cnt++; //두번째 회원가입하는 사람은 각 배열의 1번 인덱스에 저장
		
	}else if(menu == 2) {
		// System.out.println("로그인");
		System.out.print("아이디 : ");
		String id = sc.next();
		System.out.print("비밀번호 : ");
		int pw = sc.nextInt();
		//입력값 - 배열에 저장된 값 비교
		
		int i = 0; // 로그인 실패를 알 수 있는 변수(3이되면 -> 실패)
		for(i = 0;i < id_arr.length;i++) {
			if(id_arr[i]!=null) {
				if(id_arr[i].equals(id) && pw_arr[i] == pw) {
					System.out.println("로그인 성공");
					break;
				}
			}
		} // end of for
		
		if(i==3) {
			System.out.println("로그인 실패");
		}
		
	}else if(menu == 3) {
		System.out.println("종료");
		break;
	}else {
		System.out.println("1,2,3 중에 입력해주세요");
	}

	
	
}// end of while

 

728x90
Comments