다차원 배열

값들이 행과 열로서 구성된 배열을 2차원 배열이라고 함

2차원 배열은 수학의 행렬을 떠올리면 되는데, 가로 인덱스와 세로 인덱스 사용

자바는 2차원배열을 중첩 배열 방식으로 구현

int[][] scores = new int[2][3];

위에 코드는 아래 이미지처럼 메모리에 3개의 배열 객체를 생성

scores.length // 2(배열 A의 길이)
scores[0].length // 3(배열 B의 길이)
scores[1].length // 3(배열 C의 길이)

아래는 계단식 구조

scores.length // 2(배열 A의 길이)
scores[0].length // 2(배열 B의 길이)
scores[1].length // 3(배열 C의 길이)

 

계단식 배열에서 주의할 점은 배열의 정확한 길이를 알고 인덱스를 사용해야 함

위에 사진처럼 배열B의 길이는 0, 1이고 배열C의 길이는 0, 1, 2이기 때문에

scores[0][2]는 에러를 발생

만약 그룹화된 값 목록을 가지고 있다면 다음과 같이 중괄호{ } 안에 다시 중괄호를 사용

값 목록을 나열함 ( 밑에 참고 )

배열 생성
int[][] scores = { {95, 80}, {92, 96} };

읽는 법
int score = scores[0][0]; // 95
int score = scores[1][1]; // 96

 

 

배열 복사

배열은 한 번 생성하면 크기를 변경할 수 없음

더 많은 저장공간이 필요하다면 더 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야함

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src 매개값은 원본 배열, srcPos는 원본 배열에서 복사할 항목의 시작 인덱스

dest 매개값은 새 배열, destPos는 새 배열에서 붙여넣을 시작 인덱스, length는 복사 할 개수

 

아래와 같은 상황이 발생한다면, 복사되지 않은 항목은 배열의 타입 기본 초기값이 그대로 유지

int의 경우 0, String의 경우 null

 

참조 타입 배열이 복사되면 복사되는 값이 객체의 번지이므로

새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일

 

package sec03.exam02;

public class ArrayCopy {

	public static void main(String[] args) {
		// 배열 복사
		
		int[] oldIntArray = {1, 2, 3};
		int[] newIntArray = new int[5];
		
		System.arraycopy(oldIntArray, 0, newIntArray, 0, 
							oldIntArray.length);
		
		for(int i=0; i<oldIntArray.length; i++) {
		newIntArray[i] = oldIntArray[i];	
		
		
		}
		
		for(int i=0; i<newIntArray.length; i++) {
			
		System.out.print(newIntArray[i] + ", ");;	
		}

	}

}

 

 

향상된 for문

자바는 배열이나 컬렉션을 좀 더 쉽게 처리하기 위해 향상된 for문을 제공

이는 반복 실행을 하기 위해 루프 카운터 변수와 증감식을 사용하지 않음

for문의 괄호 ()에는 배열에서 꺼낸 항목을 저장할 변수 선언과 콜론(:) 그리고 배열을 나란히 작성

배열 및 컬렉션 항목의 개수만큼 반복하고, 자동적으로 for문을 빠져나감

package sec03.exam03;

public class ForEx1 {

	public static void main(String[] args) {
		// 향상된 for문
		String[] arr2 = {"가", "나", "다"};
		for(String ss : arr2) {// // 배열을 변수에 저장 ( 인덱스는 모름 )
			System.out.println(ss);
		}
		
		int sum = 0;
		int[] arr1 = {1,2,3,4,5};
		for(int aa : arr1) {// 배열을 변수에 저장 ( 인덱스는 모름 )
			sum += aa;
			System.out.println(aa);
		}
		System.out.println("합계:" + sum);
		
		
	}

}

 

열거 타입

열거타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입

이클립스에서 NEW -> Enum으로 생성 

package sec03.exam04;

public enum Week {
	//열거 타입 Enum2
월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 일요일
}
package sec03.exam04;

public enum Enumreult {
	//열거 타입 Enum 1
SUCCESS, FAIL_ID, FAIL_PASSWORD
}
package sec03.exam04;

import java.util.Calendar;

public class EnumEx {

	public static void main(String[] args) {
		// 열거타입 1
		Week today;
		
		today = Week.수요일;
		System.out.println(today);

		int WEDNEDAY = 4;
		System.out.println(WEDNEDAY);
		
		Calendar calendar = Calendar.getInstance();
		int week = calendar.get(Calendar.DAY_OF_WEEK);
		System.out.println(week);
		
		switch (week) {
		case 1:
			today = Week.일요일;
			break;
		case 2:
			today = Week.월요일;
			break;
		case 3:
			today = Week.화요일;
			break;
		case 4:
			today = Week.수요일;
			break;
		case 5:
			today = Week.목요일;
			break;
		case 6:
			today = Week.금요일;
			break;
		case 7:
			today = Week.토요일;
			break;

		}
		System.out.println("오늘은: " + today);
		
		if(today == Week.일요일) {
			System.out.println("일요일에 쉽니다.");
		}else {
			System.out.println("자바 공부");
		}
		
		
	}

}

 

 

객체 지향 프로그래밍

객체지향 프로그래밍(OOP: Object - Oriented Programming)

객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고

있으면서 식별 가능한 것을 말함

 

 

객체의 상호작용

객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용(메소드)하면서 동작 

이때 객체가 다른 객체의 기능을 이용하는 것이 메소드 호출

 

객체와 클래스

설계도 : 클래스, 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 함

클래스 선언 규칙

1. 하나 이상의 문자

2. 첫 글자에는 숫자가 올 수 없음

3. '$', '_'외의 특수문자는 사용 불가

4. 자바 키워드는 사용 불가

package sec01.exam01;
//설계도 ( 클래스 )
public class Student { // 설계도
	String name = "홍길동"; // 멤버 필드
	
	void printName() {		  // 메서드
		System.out.println(name);
	}
}
package sec01.exam01;

public class StudEx {

	public static void main(String[] args) {
		// 인스턴스
		Student student = null; // 클래스 변수 선언
		
		System.out.println(student);
		student = new Student(); // 객체 생성
		System.out.println(student.name); // name 속성(변수)
		student.name = "이순신"; // name 속성 변경
		System.out.println(student.name); 
		
		student.printName(); // 메서드 호출

	}

}

 

실습

배열 문제 풀이

package sec03.exam02;

import java.util.Iterator;

public class ArrayEx001 {
	public static void main(String[] args) {
		
		//문제 풀이
		
		// 4번 문제
//		int max = 0;
//		int [] array = {1,5,3,8,2};
//		
//		for (int i = 1; i < array.length; i++) {
//			if(array[i] > max) {
//				max = array[i];
//			}
//		}
//		System.out.println("max:" + max);

		//5번 문제
		int[][] array = {
				{95, 86},
				{83, 92, 96},
				{78, 83, 93, 87, 88}
		};
		int sum = 0;
		double avg = 0.0;
		
		int cnt = 0;
		
		for(int i = 0; i < array.length; i++) {
			for(int k=0; k <array[i].length; k++) {
				sum += array[i][k];
				cnt++; //0~10 만듬
			}
				
		}
		avg = sum / (double) cnt;
		
		System.out.println(sum);
		System.out.println(avg);
	}

}

 

다차원 배열 생성

package sec03.exam02;

import java.util.function.BiConsumer;

public class ArrayInArray01 {

	public static void main(String[] args) {
		// 다차원 배열
		
//		int[][] score = {{95,80}, 
//						 {92, 96, 100}, 
//						 {65}};
		int[][] score = new int[3][];
		score[0] = new int[2];
		score[1] = new int[3];
		score[2] = new int[1];
		
		score[0][0] = 95;
		score[0][1] = 80;
		score[1][0] = 92;
		score[1][1] = 96;
		score[1][2] = 100;
		score[2][0] = 65;
		
		int sum = 0;
		for(int i = 0; i < score.length; i++) {
			for (int j=0; j <score[i].length; j++) {
				for(int k=0; k<score[j].length; k++) {
					System.out.println(score[i][j]);
					
			
				}
				
			}
		}
		
	}

}

 

다차원 배열 가로, 세로 총점 

package sec03.exam02;

public class ArrayInArray02 {

	public static void main(String[] args) {
		
		// 다차원 배열 가로 세로 총점
		int[][] score = new int[3][];
		score[0] = new int[4];
		score[1] = new int[4];
		score[2] = new int[4];
		
		score[0][0] = 100;
		score[0][1] = 20;
		score[0][2] = 50;
		score[0][3] = 80;
		
		score[1][0] = 100;
		score[1][1] = 100;
		score[1][2] = 80;
		score[1][3] = 60;
		
		score[2][0] = 100;
		score[2][1] = 95;
		score[2][2] = 90;
		score[2][3] = 100;
		
		
		int korTot = 0;
		int mathTot = 0;
		int engTot = 0;
		int useTot = 0;
		for(int i = 0; i < score.length; i++) { // 행
			int sum = 0; // 초기화 위치에 따라 배열 값 틀려짐
			korTot += score[i][0];
			mathTot += score[i][1];
			engTot += score[i][2];
			useTot += score[i][3];
			for (int j=0; j <score[i].length; j++) { // 열
			int sum2 = 0;
					System.out.print(score[i][j]+", ");
				sum += score[i][j];
				
			}
			System.out.print("총점: " + sum);
			System.out.println();
			
		}
		System.out.println(korTot +"," + mathTot + ","+ engTot + "," + useTot);

	}

}

 

JSP 구구단 1 ( 단 입력하면 새로운 페이지에서 값 출력 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"> 
<title>Insert title here</title>
</head>
<body>
<form action="forTest.jsp" onsubmit="return checkForWhiteSpace()">
<h1>구구단 입력 하기</h1>
<a> 단 입력 : </a><input type="text" name="gugu" id="gugu" oninput="validateInput()" />
<input type="submit" value="확인" />
</form> 
<%=request.getParameter("gugu") %>

</body>
</html>

 

JSP 구구단 2 ( 단 입력하면 새로운 페이지에서 값 출력 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css.css">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<%
int num = Integer.parseInt(request.getParameter("gugu"));
for (int i=1; i<=9; i++){
//	out.println(i+"<br/>");
%>
	<h2><tr><td><%=i %></td><td><%=i*num %></td></tr></h2>
<%
}
%>
</table>
</body>
</html>

 

자바스크립트 알고리즘 1 ( JSP 환경 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
var a = [1,3,10,2,8];
var sum = 0;
for (var i=0; i < a.length; i++) {
	
	sum += a[i];
	
}
avg = sum / a.length;
console.log(sum);
console.log(avg);
</script>
</body>
</html>

 

자바스크립트 알고리즘 2 ( JSP 환경 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
var a = [1,3,10,2,8];
var max = a[0];
for (var i=0; i < a.length; i++) {
	if(max < a[i]){
		
		max = a[i];
	}
	
	
}
document.writeln(max);
</script>

</body>
</html>

 

자바스크립트 알고리즘 3( JSP 환경 )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<script type="text/javascript">
var a = [1,3,10,2,8];
var search = 2;
var findId = -1;

for (var i=0; i < a.length; i++) {
	if( search == a[i]){
		findId = i;
		break;
	}

	}
document.writeln("인덱스:",findId,"값",a[findId]);


</script>

</body>
</html>

 

for문 별찍기 ( 연습용 코드 ) for문 값만 바꿔서 연습

		for(int i=1; i<=4; i++) {
			for(int y=4; y>=1; y--) {
				if (i < y) {
					System.out.print(" ");
				}else {
					System.out.print("*");
				}

			}
			System.out.println();
		}

 

Sanner 활용 학생 수 학생들 점수(배열이용) 최고점수, 평균 점수

package p201;

import java.util.Scanner;

public class Prob1 {

	public static void main(String[] args) {
		boolean run = true;
		int studentNum = 0;
		int[] scores = null;
		Scanner scanner = new Scanner(System.in);
		
		while(run) {
			System.out.println("----------------------------------------------");
			System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
			System.out.println("----------------------------------------------");
			System.out.print("선택>");
			
			int selectNo = Integer.parseInt(scanner.nextLine());
			
			if (selectNo == 1) {
				System.out.print("학생수>");
				studentNum = Integer.parseInt(scanner.nextLine());
				scores = new int[studentNum];
			} else if(selectNo == 2) {
				
				for(int i=0; i < scores.length; i++){
				System.out.print("scores["+ i +"]");
				scores[i] = Integer.parseInt(scanner.nextLine());
			}
			}else if (selectNo == 3) {
				for(int i=0; i < scores.length; i++){
					System.out.println("scores["+ i +"]" + scores[i]);
			} 
 			
			}else if (selectNo == 4) {
				int sum = 0;
				int max = 0;
				double avg = 0;
				
				
				
				for(int i=0; i < scores.length; i++) {	
					sum += scores[i];
					
					if(scores[i]>max) {
						max = scores[i];			
					}
				}
				avg = (double)sum / scores.length;
				System.out.println("최고점수: " + max);
				System.out.println("평균점수: " + avg);
			}else if(selectNo == 5) {
				run = false;
			}
				
				
		}
		System.out.println("프로그램 종료");
	}
				
}

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-26 9일차  (1) 2023.05.26
2023-05-25 8일차  (0) 2023.05.25
2023-05-23 6일차  (0) 2023.05.23
2023-05-22 5일차  (0) 2023.05.22
2023-05-19 4일차  (0) 2023.05.19

+ Recent posts