#5 JAVA_배열, 2차원 배열, 문자열 메소드

정진형·2021년 11월 12일
0
post-thumbnail

Java 1.8, Eclipse Photon, Window10

  1. 배열
  • 같은 자료형의 여러 변수를 일렬로 나열해 놓은 공간
  • 여러 값들을 하나의 이름과 순번으로 관리하기 위해서
  • 규칙송이 없는 값들에 규칙성을 부여하기 위해서

1-1. 배열의 선언

자료형[] 배열명 = {1,2,3, ...);
자료형[] 배열명 = new 자료형[칸수];

1-2. 배열의 사용

배열명[index] =;			//저장공간에 값을 넣어준다
System.out.println(배열명[index]);	//안에 있는 값을 사용한다

1-3. 배열의 인덱스 번호

  • 실제 값들이 저장되어 있는 공간이 할당되면 그 공간은 이름이 존재하지 않고 주소값만 존재한다
  • 따라서 시작 주소값을 배열명 변수가 가지고 있고, 내부적인 주소연산을 통해 다음 주소값으로 이동한다
  • 시작 주소에서 이동한 횟수(연산된 정수)가 인덴스 번호(방번호)가 되고 첫번째 방은 배열명이 갖고있는 주소값에서 0번 옯겨야 하므로 인덱스 번호는 0부터 시작한다

1-4. 배열의 길이

  • 배열명.length
  1. 2차원 배열
  • 배열 안에 배열이 있는 형태
  • 1차원배열(자료형[])이 2차원배열(자료형[][])안에 여러개 존재하는 형태로 1차원배열은 열 2차원 배열은 행이다
  • 자료형[행][열]

2-1. 2차원 배열 선언

자료형 [][] 배열명 = {
	{1,2, ...},
    	{3,4, ...},
        ...
};

자료형[][] 배열명 = new 자료형[행수][열수]	//열 수는 생략 가능

2-2. 2차원 배열의 형태

  • 정방배열 : 각 행마다 칸수(열의 개수)가 모두 같은 배열
    사각형 형태
  • 비정방배열 : 각 행마다 칸수(열의 개수)가 다른 배열
//정방배열
[][]    [][][]    [][][][]    [][][][][]
[][]    [][][]    [][][][]    [][][][][]
	[][][]		      [][][][][]
    
//비정방배열
[]    [][]    [][][][]    [][][]
[][]  []      [][][]      [][][][][]
      []      [][][][][]  [][]
  1. 2중 for문(nested for문)
  • for문 안에 for문이 있는 형태
  • 바깥쪽에 있는 i for문은 다음 반복으로 넘어가기 위해서 안쪽에 있는 수행할 문장들을 모두 마쳐야 한다
  • 그 후 다음 반복으로 넘어가게 되고 그 때 수행할 문장은 다시 j for문 처음부터 사직하는것이 된다
  • 따라서 가장 안쪽에 있는 문장은 (i for문 반복횟수)*(j for문 반복횟수)만큼 수행한다
for(int i = 0; i < args.length; i++) {
	for(itn j = 0; j < args.length; j++){
    		실행할 문장
    }
}

//j for문의 반복이 모두 실행된 후 i for문 반복을 실행한다
i	j
0	0 1 2
1	0 1 2
2
  1. 문자열 메소드
null : 널값(비어있다, 주소값의 초기값)

String msg = "Hello Java";

//"문자열".charAt(index) 문자열에서 각 문자 꺼내오기(char타입)
//문자열도 배열로 이루어져있어 첫번째 글자의 인덱스는 0이다
System.out.println(msg.charAt(0));

//문자열도 누적 연산이 가능하다
msg += "w";
System.out.println(msg);

//"문자열".length() 문자열의 길이(int타입)
System.out.println(msg.length());

//"문자열1".split("문자열2") 문자열1 을 문자열 2 기준으로 나누기(String[]타입)
String[] result = msg.split(" ");
System.out.println(result[1]);
String msg2 = "Hello.Java!";
System.out.println(msg2.split("[.]")[0]);

//"문자열1".replace("문자열2", "문자열3) 문자열1의 문자열2를 문자열3으로 교체(String 타입)
System.out.println(msg.replace("Hello", "Hell"));
System.out.println(msg);
msg= msg.replace("Hello", "Hell");
System.out.println(msg);
  1. 배열, 2차원 배열의 활용
//배열
//10, 42, 31, 29, 77
//	   index 0  1   2   3.  4
int[] arData = {10, 42, 31, 29, 77};

//배열의 인덱스 번호를 부여하지 않으면 배열의 주소값이 나온다
System.out.println(arData);
//배열의 인덱스는 0번부터 시작한다
System.out.println(arData[0]);
System.out.println(arData[1]);
System.out.println(arData[2]);
System.out.println(arData[3]);
System.out.println(arData[4]);

for(int i = 0; i < 5; i++) {
	System.out.println(arData[i]);
}

//ArrayIndexOutOfBounds
//배열의 선언 범위보다 넘어가면 오류가 발생한다
System.out.println(arData[7]);

//배열의 값은 바로 입력받아서 넣어줄 수 있다
Scanner sc = new Scanner(System.in);
int[] arData2 = {sc.nextInt(), sc.nextInt(), sc.nextInt()};

for(int i = 0; i < 3; i++) {
	System.out.println(arData2[i]);
}

int[] arData2 = new int[5];

arData2[0] = sc.nextInt();
arData2[1] = sc.nextInt();
arData2[2] = sc.nextInt();
arData2[3] = sc.nextInt();
arData2[4] = sc.nextInt();

//배열은 보통 반복문으로 실행한다
for(int i = 0; i < 5; i++) {
	arData2[i] = sc.nextInt();
}

for(int i = 0; i < 5; i++) {
	System.out.println(arData2[i]);
}

//2차원 배열
int[][] arrData= {
	{10, 20, 30},
    	{40, 50, 60}
};

//for문으로 표현 가능하지만 활용하기 어렵다
for(int i = 0; 9 < 6; i++) {
	//0 1 2 3 4 5
    System.out.println(arData2[i/3][i%3]);
}

//for문이 헷갈린다면 하드코딩으로 코딩을하고 규칙성을 찾으면 쉽다
System.out.println(arData2[0][0]);
System.out.println(arData2[0][1]);
System.out.println(arData2[0][2]);

System.out.println(arData2[1][0]);
System.out.println(arData2[1][1]);
System.out.println(arData2[1][2]);

//위에 표현을 반복문으로 표현
for(int j = 0; j < 3; j++) {
    System.out.println(arrData[0][j]);
}
for(int j = 0; j < 3; j++) {
    System.out.println(arrData[1][j]);
}

//2차원 배열은 2중 표현으로 표현한다
for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 3; j++) {
    	System.out.println(arrData[i][j]);
    }
}

int[][] arrData2 = {
	{10, 20, 30, 40},
   	{50, 60, 70, 80},
    	{90, 100, 110, 120},
    	{130, 140, 150, 160}
};

for(int i = 0; i < 4; i++) {
    for(int j = 0; j < 4; j++) {
    	System.out.println(arrData[i][j]);
    }
}

//비정방 배열 만들기(0행 3칸/ 1행 5칸/ 2행 2칸)
//비정방 배열은 우선 행의 크기만 정해주어 선언을 하고
//각 행마다 열수를 다시 각각 선언해준다
int[][] arrData3 = new int[3][];
arrData[0] = new int[3];
arrData[1] = new int[5];
arrData[2] = new int[2];

int cnt =1;

arrData3[0][0] = cnt++;
arrData3[0][1] = cnt++;
arrData3[0][2] = cnt++;

arrData3[1][0] = cnt++;
arrData3[1][1] = cnt++;
arrData3[1][2] = cnt++;
arrData3[1][3] = cnt++;
arrData3[1][4] = cnt++;

arrData3[2][0] = cnt++;
arrData3[2][1] = cnt++;

for(int j = 0; j < 3; j++){
	arrData3[0][j] = cnt++;
}
for(int j = 0; j < 5; j++){
	arrData3[1][j] = cnt++;
}
for(int j = 0; j < 2; j++){
	arrData3[1][j] = cnt++;
}

//arrData3.length -> arrData3이 가지고있는 방의 개수 -> 행의 개수
for(int j = 0; j < ; j++){
	//0 1 2
    	//arrData3[i].length -> arrData3의 i번 방(행)이 가지고 있는 방의 개수 -> 열
	for(int j = 0; j < ; j++){
		arrData3[1][j] = cnt++;
	}
}

for(int j = 0; j < ; j++){
	for(int j = 0; j < ; j++){
		System.out.println(arrData3[i][j]);
	}
}

0개의 댓글