package com.test;
public class Array {
public static void main(String[] args) {
//배열, Array
// - 같은 자료형의 변수를 여러개 모아높은 집합
// - 하나의 변수명을 가지고 여러개의 공간 접근
//자료형[] 배열명 = new 자료형[길이];
//m1();
//m2();
//m3();
//m4();
//m5();
//m6();
m7();
}
private static void m7() {
//ex] 2차원 배열(별찍기 문제와 유사)
int[][] nums = new int[5][5];
//값입력(문제 풀 때는 이곳을 수정)
int n = 1;
for (int i=0; i<0; i++) {
for (int j=0; j<5; j++) {
nums[i][j] = n;
n++;
}
}
/* 역순
for (int i=4; i>=0; i--) {
for (int j=4; j>=5; j--) {
nums[i][j] = n;
n++;
}
}*/
/*
for (int i=0; i<=5; i++) {
for (int j=0; j<=5; j++) {
nums[j][i] = n;
n++;
}
}*/
//값출력(건드리지x)
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
System.out.printf("%4d", nums[i][j]);
}
System.out.println(n);
}
}
private static void m6() {
//다차원 배열
//Ex] 2차원 배열 -> 2중 for문 사용
int[][] nums = new int[2][3];
//층,호수
nums[0][0] = 100;
nums[0][1] = 200;
nums[0][2] = 300;
nums[1][0] = 400;
nums[1][1] = 500;
nums[1][2] = 600;
//i,j열
//탐색해보기
for (int i=0; i<2; i++) {
for (int j=0; j<3; j++) {
System.out.printf("nums[%d][%d] = %d\n"
,i
,j
,nums[i][j]);
}
}
//참고 : 배열만들때
int[] ns = new int[3]; //o, 권장
int ns2[] = new int[3];//x
}
private static void m5() {
//배열 초기화
// - 특성 : 방을 만든 직후 초기화를 하지 않아도 자동으로 초기화가 된다
// - 규칙 : 정수형 -> 0
// 실수형 -> 0.0,
// 문자형 -> \0(null문자)
// 논리형 -> false
// 참조형 -> null
//Ex]
int[] nums = new int[5];
System.out.println(nums[0]); //초기화 안한 상태에서 출력해도 0이 들어있따.
//초기화 리스트
int[] nums2 = new int[5];
nums2[0] = 5;
nums2[1] = 7;
nums2[2] = 2;
nums2[3] = 3;
nums2[4] = 8; //쓰기 너무 많음., -> 초기화한다
int[] nums3 = new int[] { 5, 7, 2, 3, 8 }; //줄이자
int[] nums4 = { 5, 7, 2, 3, 8 }; //더줄인 표현
String[] names = {"홍길동", "아무게", "하하하"}; //줄이기 예제
}
private static void m4() {
//항상된 for문
// - foreach문
// - 용도 : 배열이나 컬렉션을 대상으로만 사용(탐색)
// - 목적 : 읽기전용(수정 작업 불가능), 무조건 첫번째 방부터 마지막 방까지 순서대롤 접근
// - 속도가 빠름
//Ex]
String[] names = new String[5];
names[0] = "홍길동";
names[1] = "아무게";
names[2] = "하하하";
names[3] = "호호호";
names[4] = "호호호";
// 1. for문(일괄 탐색이 아닐 경우에 사용)
for (int i=0; i<names.length; i++) {
//System.out.println(names[i]);
names[i] += "씨"; //수정 작업 가능
}
//2. 향상된 for문
//요소변수 : 배열
for (String name : names) { //알아서 0~4번 방의 이름을 불러오고 끝나면 빠져나온다
System.out.println(name);
//name += "님"; //수정 작업x
}
//수정작업 했을 시 추가되는.,
for (String name : names) {
System.out.println(name);
}
}
private static void m3() {
//각 자료형별로 배열 선언
//Ex]
int[] list1 = new int[3];
list1[0] = 100;
System.out.println(list1[0]);
//실수타입로 만들어달라
double[] list2 = new double[3];
list2[0] = 3.14;
System.out.println(list2[0]);
//캐릭터 배열로.,
char[] list3 = new char[3]; //문자열
list3[0] = 'A';
System.out.println(list3[0]);
//boolean형 배열로.,
boolean[] list4 = new boolean[3];
list4[0] = true;
System.out.println(list4[0]);
//문자형 배열로.,
String[] list5 = new String[3];
list5[0] = "홍길동";
System.out.println(list5[0]);
}
private static void m2() {
//배열은 길이를 한번 결정하면 절대 수정 불가능한 불편함
// - 방을 늘리거나 줄이는 것이 불가능(미리 예측해야.,)
//Ex]
int[] nums = new int[3];
nums[0] = 10;
nums[1] = 20;
nums[2] = 30;
//nums[3] = 40; //4번째 방을 만들어도 컴파일은 된다.,
//배열 탐색(원하는 방을 일괄 접근) 루트돌며.,
int[] nums2 = new int[100];
for (int i =0; i<nums2.length; i++) {
nums2[i] = i*i;
}
for (int i=0; i<nums2.length; i++) {
System.out.printf("nums2[%d] = %d\n", i, nums2[i]);
}
}
private static void m1() {
//ask] 학생 300명의 국어점수 -> 총점, 평균
int kor1 = 90;
int kor2 = 80;
int kor3 = 70; //출력까지 작성하고 이제 해줄것..1. 변수 297개 만들고
//총점
int total = kor1 + kor2 + kor3; //2. 297번 +
//평균
double avg = total / 3.0; //3. 3.0->300.0
//출력
System.out.printf("총점 : %d점, 평균 : %.1f\n", total, avg);
//배열선언으로 바꾸기
//2. 베열 선언(변수 선언) -> 메모리에 공간을 할당받겠다.
int n;
int[] kors = new int[3]; //new int[300]
//배열첨자(index) -> 상수 or 변수
kors[0] = 95; //0번째 방
kors[1] = 85;
kors[2] = 100; //다 작성한 후에 297개를 더 만들긴 해야함., -> 해결 : for문의 i<값을 수정해주면(300) 가능. 일괄처리기능!
//추가] 안헷갈리게 구분
System.out.println("홍길동".length());
System.out.println(kors.length); //방의 갯수(길이)
//total = kors[0] + kor[1] + kor [2]; //case1
total = 0;
//에러]ArrayIndexOutOfBoundsException
for (int i=0; i<4; i++) { //case2
total += kors[i];
}
avg = total/ (double)kors.length;
System.out.printf("총점 : %d점, 평균 : %.1f\n", total, avg);
}
}