본문 바로가기

IT코딩공부!

#6 day5복습, array(1,2차원 배열 공부)

[0] day5복습

/**
* 	Date : 2023.03.28
	Author : funling
	Description : day5복습
*/
package Java0328;

public class _00_review {

		public static void main(String[] args) {
			/*
			 while문
			 for문 - while문 차이
			 반복횟루를 정한 for문
			 while문은 조건에 따라 반복횟수가 달라진다
			 
			 while문 - do-while문의 차이
			 while문 : 반복문을 실행하기 전에 조건문을 검사
			 조건이 맞지 않으면 반복을 실행하지 않을수도 있다.
			 do-while문 : 반복문을 실행하고 나서 조건문을 검사
			 반드시 한번은 반복문을 실행한다.
			 
			 배열(array) : []
			  : 같은 타입의 데이터를 하나의 변수에 저장하는 구조
			  : 총점, 평균 구하는 예제, 코인예제
			  
			  
			 배열의 크기(length)
			 배열이름.length >> int타입의 값(숫자)을 구할 수 있다.
			 */
			
			int[] nums = {10, 20, 30, 40};
			
			for(int i =0; i <nums.length; i++) {
				System.out.println("num["+ i+ "] : "+nums[i]);
			}
		}
}

//출력

반복문으로 결과값 확인하기


[1] array 배열 예제 [1]

/**
 * Date : 2023.03.28
 	Author : funling
 	Description : array 배열 예제 [1]
 */
package Java0328;

import java.util.Scanner;

public class _01_arrExample1 {

	public static void main(String[] args) {
		// Q. 3개의 정수를 입력받아서 가장 큰 수를 찾기!
		// 크기가 3인 배열 arrInt를 만들어서 구하기
		
		
		Scanner sc = new Scanner(System.in);
		
		int[] arrInt = new int[3];
		
		int max = 0;
		
		System.out.print("숫자 "+ arrInt.length+"개 입력 : ");
		
		
		for(int i=0; i<arrInt.length; i++) {
			arrInt[i] = sc.nextInt(); // arrInt[0] <= 10
									  // arrInt[1] <= 5
									  // arrInt[2] <= 20	
			if(arrInt[i] > max) {
				max = arrInt[i];
			}	
		}
		System.out.println("가장큰수는 : "+max+"입니다");
		
	}

}

//출력


[2] 배열을 이용한 성적서 만들기 (중요!) 다시한번 보기

// Q. 성적서 만들기 TEST.

// 배열을 사용한 성적입력 프로그램 만들기

// while문, switch문 사용

 

// switch

// 1. 학생수 : 몇명의 학생 성적을 처리할지

// 2. 점수입력 : 학생수만큼 점수를 입력하기

// 3. 점수출력 : 학생수만큼 점수를 출력하기

// 4. 점수분석 : 총점, 평균, 최고점수를 받은 학생

// 5. 종료 : 프로그램 종료

// default : "잘못 입력했습니다" 출력

/**
 * Date : 2023.03.28
 	Author : funling
 	Description : 배열을 이용한 성적서 만들기
 */
package Java0328;

import java.util.Scanner;

public class _02_arrExample2 {

	public static void main(String[] args) {
    
		Scanner sc = new Scanner(System.in);
		boolean run = true;
		int menu;
		
		// 학생수를 입력받기 위한 변수
		int stuNum = 0;
		
		// 점수를입력 받기 위한 배열(빈 배열)
		int[] scores = null;
		
		while(run) {
			System.out.println("=================================================");
			System.out.println("1.학생수 | 2.점수입력 | 3.점수출력 | 4.점수분석 | 5.종료");
			System.out.println("=================================================");
			System.out.print("선택 : ");
			menu = sc.nextInt();
			
		switch(menu) {
		case 1:  // 1. 학생수 : 몇명의 학생 성적을 처리할지
			System.out.println(" 학생 수 : ");
			stuNum = sc.nextInt();
			break;
		case 2: // 2. 점수입력 : 학생수만큼 점수를 입력하기
			scores = new int[stuNum];
			
			// 점수를 입력하기 위한 배열의 크기만큼 반복문 실행
			// scores.length(배열의 크기) == stuNum(학생수)
			for(int i=0; i<scores.length; i++) {
				System.out.println((i+1)+"번 학생 점수 : ");
				scores[i] = sc.nextInt();
			}
			break;
		case 3: // 3. 점수출력 : 학생수만큼 점수를 출력하기
			for(int i=0; i<scores.length; i++) {
				System.out.println((i+1)+"번 학생 점수출력 : "+scores[i]);
			}
			break;
		case 4: // 4. 점수분석 : 총점, 평균, 최고점수를 받은 학생
			int sum = 0;
			double avg = 0;
			int max = 0;
			int idx = 0;
			
			for(int i=0; i<scores.length; i++) {
				//총점
				sum += scores[i];		
				//최고점수
				if(scores[i] > max) {
					max = scores[i];
				}				
				// 최고점수 받은 학생
				if(max==scores[i]) {
					idx = i+ 1;
				}
			}
			
			System.out.println("합계 : " + sum);
			
			//평균
			avg = (double)sum / scores.length;
			// 소숫점 한자리까지 반올림
			avg = Math.round(avg * 100) / 100.0;
			System.out.println("평균 : "+ avg);
			System.out.println("최고점수 : "+ max +"점(" + idx+"번 학생)");
			
			break;
		case 5: // 5. 종료 : 프로그램 종료
			run = false;
			System.out.println("프로그램 종료 ");
			break;
		default: // default : "잘못 입력했습니다" 출력
			System.out.println("잘못 입력했습니다.");
			break;
		}
	}
  }	
}

//출력

문장과 while문과 switch문 구별해서 잘 다듬기


[3] 2차원 배열 [][]  기본개념 암기!_(복습!!)

/**
 * Date : 2023.03.28
 	Author : funling
 	Description : 2차원 배열
 */
package Java0328;

public class _03_2array {

	public static void main(String[] args) {
		// 2차원 배열
		// 타입[][] 배열이름 = new 타입[i][j];
		// i : 행의 갯수, j : 열의 갯수
		
		int[][] numbers = {
							{0, 1, 2},
							{3, 4, 5}	
						  };
		
		// i = > 2, j = > 3  행과열은 작게!
		for( int i=0 ; i<2 ; i++) /*i<numbers.length*/{
			for( int j=0 ; j<3 ; j++)  /*j<numbers[i]*/ {
				System.out.println("number["+i+"]["+j+"] : "+numbers[i][j]);
			} 
		} 
		
		System.out.println("numbers[2][3]의 2차원 배열크기");
		System.out.println("numbers.length(i크기) :" + numbers.length);
		System.out.println("numbers.length(i크기) :" + numbers[0].length);
		System.out.println("numbers.length(j크기) :" + numbers[0].length);
	}
}

//출력

2차원의 크기값을 알아보았다.(행렬과 비슷한 개념을 가지고 있다)


[4] 2차원 배열 [][]  구구단!

/**
 * Date : 2023.03.28
 	Author : funling
 	Description : 2차원 배열 구구단
 */
package Java0328;

public class _04_multiTable {

	public static void main(String[] args) {
		/*
		 2차원 배열을 활용한 구구단 만들기!
		 2단부터 9단까지
		 */
		
//		int[][] multi = new int[10][10];
		// i = 0 ~ 9
		// j = 0 ~ 9
		
//		for(int i=2; i<multi.length; i++) {
//				System.out.println(i +"단");
//			for(int j=1; j<multi[i].length; j++) {
//				System.out.println(i + "x" + j + "=" + i*j);
//			}
//			System.out.println();
//		}
	
		int[][] multi = new int[8][9];
		
		
		for(int i=0; i<multi.length; i++) {
			System.out.println("===" + (i+2) + "단 ===");
			
			for(int j=0; j<multi[i].length; j++) {
				System.out.println((i+2) +"x"+(j+1)+ "="+(i+2)*(j+1));
			}
		}

	}

}

//출력

2차원 배열로 2 ~ 9단 까지 만들어 보았다.


[5] 2차원 배열 [][]  단어 맞추기 게임! (복습!)

/**
 * Date : 2023.03.28
 	Author : funling
 	Description : 2차원 배열 단어 맞추기
 */
package Java0328;

import java.util.Scanner;

public class _05_wordGame {

	public static void main(String[] args) {
		/*
		 영단어 맞추기 게임
		 
		 String[][] word;
		 words[5][2];  
		 i는 문제수, 
		 j가 0일때 단어, j가 1일때 뜻
		 */
		
		
		/* 추가적인 문제
		 1. while, switch을 사용해서 프로그램 구성
		 2. 문제 갯수를 입력
		 3. 문제, 뜻, 예문 입력 ex) words[n][2] >> words[n][3]
		 4. 문제 갯수를 가지고 정답률 계산
		 */
		
		
//		String[][] words = {
//				{"chair", 	"의자"},
//				{"desk", 	"책상"},
//				{"water", 	"물"},
//				{"pencil", 	"연필"},
//				{"watch", 	"시계"}
//				
//		};
//		
//		Scanner sc = new Scanner(System.in);
//		int score = 0; 	//정답 갯수
//		
//		// 문제 갯수만큼 반복문 실행
//		for(int i = 0; i <words.length; i++) {
//			
//		System.out.println((i+1)+"번 문제. " + words[i][0]+ "의 뜻은? ");
//		 
//		 // 정답 입력
//		 String answer = sc.next();
//		 
//		 // 정답 확인 
//		 // answer == words[][]은 틀림 
//		 // String타입을 비교하기 위해 .equals() 사용한다.
//		 if(answer.equals(words[i][1])) {
//			 System.out.println("정답입니다!\n");
//			 score ++;		 
//		 } else {
//			 System.out.println("틀렸습니다. 정답은 " + words[i][1] + "입니다.\n");
//		 }
//	  }
//		System.out.println("맞춘 갯수는" + score +"개");
		
		Scanner sc = new Scanner(System.in);
		boolean run = true;
		int menu;
		int qNum = 0;		
		
		// 문제,뜻, 예문을 입력받기 위한 배열(빈 배열)
		String[][] words = null;
		
		// 정답 갯수
		int score = 0;
		
		
		while(run) {
			System.out.println("=================================================");
			System.out.println("1.문제수 | 2.문제출제 | 3.문제풀기 | 4.점수분석 | 5.종료");
			System.out.println("=================================================");
			System.out.print("선택 : ");
			menu = sc.nextInt();
		
			switch(menu) {		
			case 1:
				System.out.println(" 문제수 : ");
				qNum = sc.nextInt();
				break;
			case 2:		
				words = new String[qNum][3]; //배열초기화
				
				score =0; //정답갯수 초기화
				
				for(int i=0; i<words.length; i++) {
					System.out.println((i+1)+"번 단어 점수 : ");
					words[i][0] = sc.next();
					
					System.out.println((i+1)+"번 뜻 : ");
					words[i][1] = sc.next();
					
					sc.nextLine().trim();
					System.out.println((i+1)+"번 예문 : ");
					words[i][2] = sc.nextLine();
				}
				break;
			case 3:		
				for(int i = 0; i <words.length; i++) {
					System.out.print((i+1)+"번 문제. " + words[i][0]+ "의 뜻은? ");
					String answer = sc.next();
					
					if(answer.equals(words[i][1])) {
						 System.out.println("정답입니다!\n");
						 score ++;		 
					 } else {
						 System.out.println("틀렸습니다. 정답은 " + words[i][1] + "입니다.\n");
					 }
					System.out.println("(예문)" + words[i][2] +"\n");
				  }
			
				break;
			case 4:	
				System.out.println("맞춘 갯수는" + score +"개");
				double percent = ((double)score / words.length) * 100;
				System.out.println("정답률" + percent+"% 입니다");
				break;
			case 5:	
				run = false;
				System.out.println("맞춘 갯수는" + score +"개");
				break;
			default:
				System.out.println("종료");
				break;
			
			}
		}		
  
	 }
}

// 문제 확인 그다음 코딩 진행해보기!!  자세히 보아야 한다!


[6] 자바는 객체지향 프로그래밍 이다!!

[1] 자바는 객체지향 프로그래밍이다.

- OOP(Object - Oriented - Programming)

- 프로그래밍 하기 위해서 단위(객체)로 잘게 나뉘서 코딩

- 다시 이것들 조립해서 복잡한 프로그램을 만드는 것

 

(1) 절차지향 : 순서대로 진행되는 프로그램

ex) 급식소에서 줄을 서서 밥을 먹는 것

ex) 맞춤옷 : 원하는 형태로 만들어서 입는 것

 

(2) 객체지향 : 객체(클래스)라는 작은 단위로 프로그래밍 하는 것

ex) 부페에세 내가 원하는 음식을 가져와서 먹는 것

ex) 기성옷 : 내몸에 맞는 것을 골라 입는 것

단점 : 불필요한 메모리가 생길수 있음

 

 

[2] 객체 모델링(Object Modeling)

- 현실 세계의 객체를 소프트웨어 객체로 설계하는 것

 

 

[3] 클래스와 객체

(1) 클래스(설계도) : 샌드위치 레시피, 스마트폰 설계도

 

(2) 객체(실제로 존재하는 물건이나 개념) : 샌드위치, 스마트폰

- 다른 것과 식별이 가능한 것

- 자신만의 고유한 특성과 행동을 가지며, 다른 객체들과 상호작용 한다.

- 클래스에서 인스턴스(instance)라고 부른다.

[4] 객체의 특성 3가지

(1) 캡슐화(Encapsulation) : 정보은닉

(2) 상속(Inheritance) : 부모-자식

(3) 다형상(Polymorphism) : 상속에서 사용, 같은코드 - 다른 출력

 

public class _07_classElerment {

	/*
	 	클래스의 기본 구성
	 	(1) 필드
	 	(2) 생성자
	 	(3) 메소드
	 	
	 	(접근제한자) class 클래스이름(
	 				(1) 필드
	 				(2) 생성자
	 				(3) 메소드
	 				
	 				(모든 생략 가능)
	 		
	 */
	// 메인 함수(메소드)
	public static void main(String[] args) {
		// public : 접근제한자(public : 모두에게 공개)
		// static : 정적(객체를 생성하지 않고 사용가능)
		// void   : 데이터타입(return값 가지지 않는다)
		// main	  : 메소드 이름
		// (String[] args) : 매게변수 => ()안의 내용을 메소드에서 사용한다.
		
	}
	
	/*
	 [1] 필드(field) : 속성, 상태, 특성
	 	 - 명사형
	 	 - '멤버변수'라고 부르기도 한다.
	 	 - 값의 상태를 관리
	 	 - 데이터를 저장하는 공간
	 	 ex) int num = 3;
	 	 
	 [2] 생성사(Constructor)
	 	 - 객체를 만들때 따라야 하는 규칙 정의
	 	 - 객체생성을 도와주는 블록
	 	 - 생성자 이름은 클래스 이름 동일 작성
	 	 
	 [3] 메소드(method) : 동작, 행동, 기능
	 	 - 동사형
	 	 - 특정한기능을 정의한 블록
	 	 - 문자보내기 전화하기 동작하는것 메소드 블록에 넣어둔다
	 	 - 메소드가 호출되면 자신이 가지고 있는 기능을 수행
	 	 - 기능 수행이 끝나면 리턴값이 존재
	  
	 */
	// 생성자

 class 두렵당ㅎㅎ