오늘 배운 내용
01. 배열
01. 배열
실습080 ~ 088
가변 배열(동적 배열):
자바의 배열은 한 번 자리가 정해지면 늘리거나 줄일 수 없다.
하지만 가변배열을 사용하면 기존 배열의 포인터를 끊고,
새로운 영역에 다시 자리를 만든 후 포인터를 연결한다.
참고: 배열
https://wikidocs.net/206
실습080
반복문의 반복 횟수가 배열 길이보다 크면 런타임 에러 발생.
/*=============[ 2/14 화 ]================
배열 기본 실습 1
--------------------------------------
임의의 정수로 구성된 배열의 숫자 데이터 중
짝수만 출력하고, 3의 배수만 출력한다.
임의 정수: 4 7 9 1 3 2 5 6 8
실행 예)
배열 요소 전체 출력
4 7 9 1 3 2 5 6 8
짝수 선택적 출력
4 2 6 8
3의 배수 선택적 출력
9 3 6
=========================================*/
public class Test080
{
public static void main(String[] args)
{
int[] arr = {4, 7, 9, 1, 3, 2, 5, 6, 8};
System.out.println("배열 요소 전체 출력");
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ");
System.out.println();
System.out.println("짝수 선택적 출력");
for (int i = 0; i < arr.length; i++)
{
if (arr[i] % 2 == 0 && arr[i] % 3 != 0)
System.out.print(arr[i] + " ");
}System.out.println();
System.out.println("3의 배수 선택적 출력");
for (int i = 0; i < arr.length; i++)
{
if (arr[i] % 3 == 0)
System.out.print(arr[i] + " ");
}System.out.println();
}
}
// 반복문의 반복 횟수가 배열보다 길면 더 가져올 게 없어서 런타임 에러.
/*
배열 요소 전체 출력
4 7 9 1 3 2 5 6 8
짝수 선택적 출력
4 2 8
3의 배수 선택적 출력
9 3 6
계속하려면 아무 키나 누르십시오 . . .
*/
실습081
대문자 A-Z 출력하기 . 알파벳과 아스키코드.
/*
char 자료형을 요소로 가지는 배열을 만들고
대문자를 모두 담은 후 출력한다.
배열을 만들어 채우는 구문과 출력 구문은 분리한다.
실행 예)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
*대문자 A~ Z == 65 ~80
*/
char a = 65;
char[] alpa = new char[26];
for (int i = 0; i < alpa.length; i++)
{
alpa[i] = a ;
a++;
}
for (int j = 0; j < alpa.length; j++)
{
System.out.print(alpa[j] + " ");
}System.out.println();
코드가 길고 복잡하다고 무조건 나쁜 건 아니다!
+) 변수 2개로 구성하는 방법
실습082
인원수 사용자 입력 받기 (유효성 검사)
-> 인원 수만큼 이름, 전화번호 입력 받기
-> 받은 값을 이름 배열, 전화번호 배열로 따로 출력 .
코드블록(082)
import java.util.Scanner;
public class Test082
{
public static void main(String[] args)
{
int n = 0; // 학생 수
String[] name = new String[10]; // 이름
String[] tels = new String[10]; // 번호
Scanner sc = new Scanner(System.in);
do
{
System.out.print("입력 처리할 학생수 입력(명, 1~10): ");
n = sc.nextInt();
}
while (0 >= n || n > 10);
for (int i = 0; i < n ; i++) // 학생 수 만큼 이름, 번호 입력받기
{
System.out.printf("이름 전화번호 입력[%d] (공백 구분): ", i+1);
name[i] = sc.next();
tels[i] = sc.next();
}
System.out.print("\n학생 수:" + n);
System.out.println("\n==== 이름 목록 ====");
for (int i = 0; i < n; i++ )
System.out.println(name[i]);
System.out.println("\n==== 전화 번호 목록 ====");
for (int i = 0; i < n; i++ )
System.out.println(tels[i]);
System.out.println();
}
}
실습083 (과제)
정수를 임의의 개수만큼 사용자 입력 받고 그 중 최대값을 출력한다.
조건: 입력값을 배열로 담아 처리한다.
코드블록(083)
import java.util.Scanner;
public class Test083
{
public static void main(String[] args)
{
/* ====== ① 주요 변수 선언 ====== */
Scanner sc = new Scanner(System.in);
System.out.print("입력할 데이터의 개수: ");
int n = sc.nextInt(); //데이터 개수
int[] arr = new int[n]; // 입력값 길이의 배열 생성
int num; // 데이터 담을 변수
int max = 0; // 최대값 담을 변수
/* ====== ② 배열 값 담기 ====== */
for (int i = 0; i < n; i++)
{
if (i == 0) // 첫 루프만 실행
System.out.print("데이터 입력(공백 구분): ");
num = sc.nextInt();
arr[i] = num;
}
/* ======== ③ 최대값 연산 ======== */
for (int i = 1; i < n; i++)
{
max = arr[0]; // 최대값 판별 임시 변수
// 배열의 0번째 값으로 초기화
if (arr[i] > max) // 1번 인덱스부터 현재 최대값과 비교
max = arr[i];
}
/* ========== ④ 결과 출력 ========== */
System.out.printf("\n>> 가장 큰 수: %d\n", max);
}
}
/* --------------------- 실행 결과 ---------------------------
입력할 데이터의 개수: 12
데이터 입력(공백 구분): 76 85 22 54 64 91 21 78 32 11 88 20
>> 가장 큰 수: 76
계속하려면 아무 키나 누르십시오 . .
-------------------------------------------------------------*/
실습084(과제)
학생 수를 사용자 입력받고 그 만큼 점수(int)를 입력받는다.
전체 학생 점수의 합, 평균, 편차를 출력한다.
/*=================[ 2/14 화 ]==================
배열 기본 실습 5 (과제 10)
- 배열의 선언과 초기화
------------------------------------------------
* 편차 (deviation):
평균보다 크거나 작은 정도를 나타내는 값으로,
평균 또는 중앙값에서 대상값을 뺀 값.
================================================*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Test084
{
public static void main(String[] args) throws IOException
{
/* ====== ① 주요 변수 선언 ====== */
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("학생 수 입력: ");
int n = Integer.parseInt(br.readLine()); // 학생 수 입력값
double score = 0, sum = 0, avg = 0, dev = 0; // 점수, 합계, 평균, 편차
double[][] result = new double[n][2]; // (학생수 * 2)의 배열 생성
//실수기반 연산을 위해 모든 변수 double로 선언
/* ====== ② 배열 값 담기 ====== */
for (int i = 0; i < n; i++) //학생 수 만큼 점수 묻고 담는 루프
{
System.out.printf("%d번 학생의 점수: ", i + 1);
score = Double.parseDouble(br.readLine());
result[i][0] = score; // i번째 학생 점수를 배열에 저장
// result[i][1] // ** 점수별 편차는 먼저 연산 필요
}
/* ======== ③ 연산 (합계, 평균, 편차) ======== */
for (int i = 0; i < n; i++)
sum += result[i][0]; // 합계
avg = (sum / n); // 평균
for (int i = 0; i < n; i++) // 편차 계산 및 배열 담기
{
dev = avg - result[i][0] ; // 평균 - 점수
result[i][1] = dev; // **점수별 편차 저장
}
/* ============= ④ 결과 출력 ============= */
System.out.printf(">> 합: %.0f\n>> 평균: %.1f\n>> 편차:\n", sum, avg);
for (int i = 0; i < n; i++) // 배열 출력 (점수 , 편차)
{
System.out.printf("%.0f : ", result[i][0]); //
System.out.printf("%.1f\n", result[i][1]);
}
}
}
/*실행 결과-------------------------------
학생 수 입력: 5
1번 학생의 점수: 90
2번 학생의 점수: 82
3번 학생의 점수: 64
4번 학생의 점수: 36
5번 학생의 점수: 98
>> 합: 370
>> 평균: 74.0
>> 편차:
90 : -16.0
82 : -8.0
64 : 10.0
36 : 38.0
98 : -24.0
계속하려면 아무 키나 누르십시오 . . .
----------------------------------------*/
실습085 다차원배열
// 상략
/* === 배열 선언, 초기화 === */
// 방법 ① arr1
int[][] arr1 = new int[3][3];
arr1[0][0] = 1;
arr1[0][1] = 2;
arr1[0][2] = 3;
// ...중략...
arr1[2][2] = 9;
// 방법 ② arr2
int[][]arr2 = {{1,2,3},{4,5,6},{7,8,9}};
// 방법 ③ arr3
int[][]arr3 = new int[3][3];
int n = 1;
for (int i = 0; i < arr3.length; i++) //웅~ 0,1,2 !
{
for (int j = 0; j < arr3[i].length; j++) //숑숑! 0,1,2 !
{ //System.out.println("i:" + i + ", j:" + j);
arr3[i][j] = n;
n++;
}
}
/* === arr3 배열의 전체 요소 출력 === */
for (int i = 0; i < arr3.length; i++) //웅~ 0,1,2 !
{
for (int j = 0; j < arr3[i].length; j++) //숑숑! 0,1,2 !
{
System.out.printf("%2d", arr3[i][j]);
}
System.out.println();
} //하략
실습086 다차원배열
실습 코드블록(086)
public static void main(String[] args)
{
/* === 선언, 초기화 === */
int n = 1;
int[][] arr1 = new int[5][5];
for (int i = 0; i < arr1.length ; i++)
{
for (int j = 0; j < arr1[i].length; j++)
{
arr1[i][j] = n;
n++;
}
}
/* === 전체 요소 출력 === */
for (int i = 0; i < arr1.length ; i++)
{
for (int j = 0; j < arr1[i].length; j++)
System.out.printf("%3d",arr1[i][j]);
System.out.println();
}
}
실습087 다차원배열
public static void main(String[] args)
{
int[][] arr = new int[5][5]; // 배열 생성
for (int i = 0; i < arr.length; i++) // 값 할당
{
int n = 1 + i; // n 선언 및 초기화
for (int j = 0; j < arr[i].length; j++)
{
arr[i][j] = n;
n++;
}
}
for (int i = 0; i < arr.length ; i++) // 출력
{
for (int j = 0; j < arr[i].length; j++)
System.out.printf("%3d",arr[i][j]);
System.out.println();
}
실습088 다차원배열
/*=================[ 2/14 화 ]==================
배열 기본 실습 9
- 배열의 배열(2차원 배열)
------------------------------------------------
다차원 배열으로 다음과 같이 구성하고 출력한다.
단, 배열 구성, 출력 코드는 분리한다.
실행 예)
1 2 3 4 5
5 1 2 3 4 (0,1)부터 출력
4 5 1 2 3 (0,2)부터 출력
3 4 5 1 2 (0,3)부터 출력
2 3 4 5 1 (0,4)부터 출력
* 힌트 : 값이 아니라 인덱스를 활용
================================================*/
public static void main(String[] args)
{
int[][] arr = new int[5][5]; // 배열 생성
for (int i = 0; i < arr.length; i++) // 값 할당
{
for (int j = i, n = 1; n <= 5; n++) // j를 i로 하면 1씩 증가할 수 있다.
{
//System.out.print(i + "," + j + "[" + n + "]"); 좌표값 확인
arr[i][j] = n;
j++; // 인덱스 넘치는 순간 0으로 초기화 하기???
}
System.out.println();
}
/*================= 출력 =============*/
for (int i = 0; i < arr.length ; i++)
{
for (int j = 0; j < arr[i].length; j++)
System.out.printf("%3d",arr[i][j]);
System.out.println();
}
실습089 다차원배열
예시와 같은 배열 구현 후 출력
단, 배열 구성 코드와 출력 코드는 분리
실행 예)
1 8 9 16 17
2 7 10 15 18
3 6 11 14 19
4 5 12 13 20
public class Test089 // 강사님 코드
{
public static void main(String[] args)
{
int[][] arr=new int[4][5]; //이례적으로 웅웅 4번 숑숑 5번//i,j 자리 바꿔쓰기
int n=0;
for (int i = 0; i < 5; i++ )
{
for (int j = 0; j < 4; j++ )
{
n++;
if (i % 2 == 0)
{
arr[j][i]=n; //i가 짝수
}
else
{
arr[3-j][i] = n;//i가 홀수 1 3
}
}
}
for (int i=0; i<arr.length;i++ )
{
for (int j=0;j<arr[i].length ;j++ )
System.out.printf("%3d", arr[i][j]);
System.out.println();
}
}
}
오늘 느낀 점
89번 실습이 어려워서 시간 안에 못풀었다.
반복문을 중첩하거나조건식을 여러개 쓰거나.. 증가가 아니라 감소하게 하는 등..
가장 기본적인 식이 아니면 헷갈린다. 연습이 많이 필요할 것 같다.
'정리 노트 > 쌍용 KDT_(자바 Spring)' 카테고리의 다른 글
23.02.16(목): 배열의 복사, 접근 제어자, 정보 은닉, 캡슐화 (0) | 2023.06.28 |
---|---|
23.02.15(수): 2차원 배열, 난수 Random.nextInt() (0) | 2023.06.27 |
23.02.13(월): 생성자(Constructor), 초기화 블록, 메서드 오버로딩, 배열 (0) | 2023.06.07 |
23.02.10(금): 지역변수와 전역변수, 클래스와 인스턴스, null, classpath와 package (0) | 2023.05.30 |
23.02.09(목): 반복문 (별 찍기,break, continue), return, 메소드의 재귀 호출 (0) | 2023.03.26 |