티스토리 뷰
자료형
-기본 자료형(8) : byte, short, int, long, float, double, char, boolean
-참조 자료형(∞) : String, 배열, 열거, 클래스/인터페이스
참조형 변수는
선언할 때 크기를 알 수 없음. 데이터를 대입하기 전까진.
참조형 변수 크기는 무조건 4byte. 왜냐하면 참조형 변수는 배열의 값이 있는 주소를 갖기 때문에.
int[] a;
a = new int[10];
String str;
위 3개의 크기는 전부 4 byte. 주소값.
package test0126;
public class ArrayTest01 {
static void sum(int[] a, int[] b) { // 배열의 주소값 가져옴
for(int i=0; i<a.length; i++) {
a[i] += b[i]; // a[i] = a[i] + b[i];
System.out.print(a[i]+" ");
}
}//static void sum
public static void main(String[] args) { //각 배열 선언 및 초기화
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] b = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
// 두 개를 더하거나 빼는 메소드
sum(a, b);
System.out.println();
for(int i=0; i<a.length; i++) {
System.out.print(a[i]+" ");
}
} //public
}
1. 배열
연속된 공간에 데이터 저장. 같은 형의 데이터가 여러 개 있을 때 한번에 처리하기 위해 배열 사용.
동일한 자료형만 묶어서 저장 가능. 생성 시 크기를 지정하면 이후 크기 변경 불가.
(1) 선언
자료형[] 변수명; //Java 방식
자료형 변수명 []; //C 방식
(2) 메모리
class 영역 static 영역 final 영역 Method 영역 |
stack | Heap |
변수 공간이 만들어지는 곳 실제 배열 값이 들어있는 주소 저장. |
동적 메모리 실제 배열 값 저장되는 공간. |
2. 1차원 배열
(1) 배열 객체 생성
int[] a = new int[n];
└배열 객체 생성할 때 크기를 설정해야 함.
└Stack 영역 : 배열변수 a 공간 할당. 실제 배열 객체가 저장된 공간의 첫번째 주소(indext[0]) 저장.
└Heap 영역 : 실제 배열값을 저장할 수 있는 공간 할당.
Stack | Heap |
배열변수 a 실제 배열 객체가 저장되는 주소 저장. a[0] |
a[ ] = { ... } |
-new : heap 메모리에 넣어라
-index 번호는 a가 가리키는 곳으로부터 얼마나 떨어져 있는가. a[0], a[1], a[2], …, a[n-1]
(2) 배열 객체 생성과 값 대입
*stack 메모리는 초기값을 부여하지 않으면 출력 불가능.
*heap 메모리는 초기값을 부여하지 않으면 default값(숫자는 0, boolean은 false, 참조 자료형은 null)
-type_1 : 배열 객체 생성 + 값 대입
int[] a = new int[3];
a[0]=3; // stack 영역은 초기화해주지 않으면 값 안 들어감.
a[1]=4;
a[2]=5;
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
-type_2 : 초기값 세팅. 배열 길이(크기 생략)
//int[] b = new int[3] {10, 20, 30}; // 오류 : 배열크기와 초기값 모두 입력
int[] b = new int[] {10, 20, 30};
System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(b[2]);
-type_3 : 선언 시 반드시 값 입력
int[] c = {5, 6, 7};
System.out.println(c[0]);
System.out.println(c[1]);
System.out.println(c[2]);
-type_4 : 참조 자료형 변수 복사
배열 값이 있는 위치(번지) 복사(*기본 자료형의 변수 복사는 '값'을 복사)
int[] a = {5,3,6};
int[] d; //지역변수 선언만 한 상태. 값 초기화 안 되면 오류. 읽기 불가
//d = new int[3]; // 값 초기화1
d = a; // 값 초기화2. a와 같은 배열을 가리킴. 배열의 주소를 가리키는 변수. 참조변수.
d[0] = 100;
a[1] = 50;
System.out.println(d[0]); //100
System.out.println(d[1]); //50
System.out.println(d[2]); //6
-type_5 : 반복문
for문을 이용해 데이터 입력
_예제) 1 ~ 100까지 데이터를 가진 배열 선언과 데이터 입력
int[] a = new int[100]; //선언
for(int i=0; i<a.length; i++){ //i는 인덱스
a[i] = i+1; // 배열 값
System.out.printf("a[%d] = %d", i, a[i]);
}
_예제) 0~99까지 수 10개를 랜덤하게 뽑아 배열값으로 입력
int[] score = int[10];
for(int i=0; i<score.length; i++){
score[i] = (int)(Math.random()*100);
System.out.printf("a[%d] = %d\n", i, score[i]);
}
└Math.random() : 0.0 이상 ~ 1.0 미만 사이의 실수 값을 랜덤으로 반환하는 함수
└(int)(Math.random) : 랜덤 값을 정수 자료형을 변환
_예제) 배열 객체 요소 중 유효한 것만 출력하기
배열 값이 있는 것만 출력한다는 뜻
double[] data1 = new double[5];
int size = 0;
data[0] = 10.0; size++;
data[1] = 20.0; size++;
data[2] = 30.0; size++;
for(int i=0; i<size; i++) {
System.out.println(data[i]);
}
_예제) 알파벳 A ~ Z까지 저장 후 정수 값(아스키 코드값)으로 출력
char[] apb = new char[26];
char ch = 'A'; // 알파벳
for(int i=0; i<apb.length; i++, ch++) {
apb[i] = ch;
System.out.print("apb["+i+"] = "+apb[i]+" ");
System.out.println((int)apb[i]);
}
3. 2차원 배열
1차원 배열을 여러 개 모아놓은 것(묶어놓은 것). 메모리 데이터를 1차원으로만 저장 가능.
2차원 데이터를 저장하기 위해서는 1차원(행 단위)로 나누어 저장(1차원 배열을 원소로 가지는 1차원 배열)
(1) 정방행렬 대입
-정방행렬 : 가로 및 세로 방향으로 정렬된 배열
-type_1 : 배열 객체 생성 및 값 대입
int[][] a = new int[2][2];
a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;
a[1][1] = 4;
-type_2 : 배열 객체의 행 성분(1차원 배열)만 생성
int[][] a = new int[2][];
a[0] = new int[3]; //1행에 열 3개인 배열
a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
a[1] = new int[3]; //2행에 열 3개인 배열
a[1][0] = 4; a[1][1] = 5; a[1][2] = 6;
-type_3 : 값 대입
int[][] a = new int[][]{{1, 2, 3}, {4, 5, 6]};
int[][] b = {{9, 8, 7}, {6, 5, 4}};
int[][] c = new int[][] {{1, 2, 3},{4, 5, 6}};
for(int i=0; i<c.length; i++ ) {//행(인덱스)의 크기만큼
for(int j=0; j<c[i].length; j++) { //열의 크기만큼
System.out.print(c[i][j]+" ");
}
System.out.println();
}
_예제) 2차원 배열에 데이터 입력
int[][] a = new int[2][3];
int value=1;
for(int i=0; i<a.length; i++ ) {//행(인덱스)의 크기보다
for(int j=0; j<a[i].length; j++) { //열의 크기보다
a[i][j] = value++;
System.out.print(a[i][j]+" ");
}
System.out.println();
}
(2) 비정방행렬
행마다 열의 개수가 다름
-type_1 : 2차원 배열 객체의 행 성분(1차원 배열)만 생성 → 각 행에 열 성분(1차원 배열) 생성
//1
int[][] a = new int[2][];
a[0] = new int[2];
a[0][0] = 1; a[0][1] = 2;
a[1] = new int[3];
a[1][0]=4; a[1][1] = 3; a[1][2]=5;
//2
int[][] b = new int[2][];
b[0] = new int[] {1, 2, 3};
b[1] = new int[] {4, 5, 6, 7};
-type_2 : 대입 값만 입력
//1
int[][] c = {{1, 2}, {3, 4, 5}, {7, 8, 9, 10}};
//2
int[][] d = new int[][]{{1, 2, 3}, {4}, {5, 6, 7, 8, 9}};
-type_3 : for문 이용해 입력
정방행렬이 아닐 경우 주로 사용. 1차원 크기가 각각 다를 때
int[][] b = new int[3][];
b[0] = new int[7];
b[1] = new int[3];
b[2] = new int[4];
int value=1;
for(int i=0; i<b.length; i++ ) {//행(인덱스)의 크기만큼
for(int j=0; j<b[i].length; j++) { //열의 크기만큼
b[i][j] = value++;
System.out.print(b[i][j]+" ");
}
System.out.println();
}
3. 행렬의 곱셈
2차원 배열. (A행렬의 열 == B행렬의 행)이어야 곱셈을 할 수 있음.
1 2 3 4 5 6 |
1 2 3 4 5 6 |
A x B = (1행1열 : 1*1 + 2*3 + 3*5 / 1행2열 : 1*2 + 1*4 + 1*6)
(2행 1열 : 4*1 + 4*3 + 4*5 / 2행 2열 : 4*2 + 4*4 + 4*6)
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] b = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
// 두 개를 더하거나 빼는 메소드
sum(a, b);
System.out.println();
for(int i=0; i<a.length; i++) {
System.out.print(a[i]+" ");
}
_예제) 입력받은 두 행렬을 곱하여 출력
Scanner sc7 = new Scanner(System.in);
int[][] mtx1 = new int[3][3];
int[][] mtx2 = new int[3][3];
System.out.println("첫번째 행렬의 값, 총 9개 입력");
for(int i=0; i<mtx1.length; i++) {
for(int j=0; j<mtx1.length; j++) {
mtx1[i][j] = sc7.nextInt();
System.out.print(mtx1[i][j]+" ");
}
System.out.println();
}
System.out.println("두번째 행렬의 값, 총 9개 입력");
for(int i=0; i<mtx2.length; i++) {
for(int j=0; j<mtx2.length; j++) {
mtx2[i][j] = sc7.nextInt();
System.out.print(mtx2[i][j]+" ");
}
System.out.println();
}
System.out.println();
System.out.println("두 행렬의 곱셈");
for(int i=0; i<mtx1.length; i++) {
for(int j=0; j<mtx2.length; j++) {
System.out.print(mtx1[i][j]*mtx2[j][i]+ " ");
}
System.out.println();
}
4. 배열 : main() 메소드 매개변수
프로젝트 시작점 : 메인 메소드(메인 함수)
public | static | void | (String[] args) | { } |
-public : 어디서든 부를 수 있다.
-static : 객체를 만들지 않아도 이 메소드를 쓸 수 있다.
-void : 함수를 종료한 뒤에 리턴 값이 없다.
-String[]
-args : 메인 함수에 들어갈 때 처음 넣어주는 매개변수. argument
(이클립스에서 하는 방법)
run > run configurations > Arguments > Program arguments : Hello Java 1.8 > apply > run
처음 프로그램 실행될 때 전달하는 문자열(String)
package test0125;
public class MainMethodTest {
public static void main(String[] args) { //메인함수
}
}
'수업 > └Java' 카테고리의 다른 글
[CH06_1]클래스 기본 문법 (0) | 2022.01.31 |
---|---|
[CH05_2]참조 자료형 : String (0) | 2022.01.31 |
[CH04_02]제어문 : 반복문 (0) | 2022.01.30 |
[CH04_1]조건문 실습 예제_책 (0) | 2022.01.30 |
[CH04_01]제어문 : 조건문 (0) | 2022.01.30 |
- Total
- Today
- Yesterday
- html base tag
- html layout
- css
- initialized
- input type 종류
- html input type
- empty-cell
- improt
- 스크립태그
- html atrribute
- typeof
- html pre
- 외부구성요소
- A%B
- JavaScript
- ScriptTag
- BAEKJOON
- text formatting
- border-spacing
- 변수
- 입력양식
- html a tag
- CascadingStyleSheet
- caption-side
- selcetor
- html
- 기본선택자
- 미디어 태그
- Java
- scanner
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |