본문 바로가기

Full Stack 교육 회고록

8/18 java - 배열, 이차원 배열

728x90
SMALL

.

 

import java.util.Scanner;

public class Ex06 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//실제 답을 저장하고 있는 배열
	    int[]answer= {1,4,3,2,1};
		//사용자가 입력한 답을 저장하는 배열
		int[] input = new int[5];
		
		for(int i =0; i<input.length; i++) {
			System.out.print(i+1 + "번답 >> ");
			input[i]=sc.nextInt();			
		}
		
		//input 배열에 있는 값 출력
		for(int i =0; i<input.length; i++) {
			System.out.print(input[i]+ " ");
		}
		
		int sum =0; //총합을 저장할 변수
		System.out.println();
		//답을 비교하는 반복문
		for(int i=0; i<input.length; i++) {
			if(answer[i]==input[i]) {
				System.out.print("o");
				sum+=20;
			}else {
				System.out.print("x");
			}
		}
		System.out.println("총합 : "+ sum);
	
	
	}

}

package 배열;

import java.util.Scanner;

public class ex08 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		String[] id_arr = new String[3];
		String[] pw_arr = new String[3];
		
		int cnt =0; // 현재 몇명이 가입했는지 저장할 변수
		
		while(true) {
			System.out.println("1.회원가입 2.로그인 3.종료");
			int menu =sc.nextInt();
			if(menu==1) {// 회원가입
				if(cnt<3) {
				System.out.print("id>> ");
				id_arr[cnt]= sc.next();
				System.out.print("pw>> ");
				pw_arr[cnt]=sc.next();
				cnt++;
				}else {
					System.out.println("더이상 가입할 수 없습니다");
				}
				
			}else if(menu==2) {//로그인
				System.out.print("id>> ");
				String id= sc.next();
				System.out.print("pw>> ");
				String pw = sc.next();
				
				boolean sw = false; // 로그인을 성공/시류ㅐ 저장할 변수 
				for(int i=0;i<cnt; i++) {
					if(id_arr[i].equals(id)&&pw_arr[i].equals(pw)) {
						System.out.println("로그인성공!");
						sw = true;
						break;
					}
				}
				if(sw==false) {
					System.out.println("로그인 실패!");
				}
				
			}else {//3
				System.out.println("프로그램 종료");
				break;
			}
		}

	}

}

 

이차원배열

배열의 요소로 1차원 배열을 가지는 배열

 

[이차원배열의 구조]

 5개의 열이 있고 한 열당 좌석 3개가 있는 영화관

[이차원배열의 생성]

[이차원배열의 생성]

int[][]seat = new int [5][3];

seat[0][0]=1;

>seat의 0번째 배열의 0번열에 값 할당

seat[3][2]=20;

>seat의 3번째 배열의 2번열에 값 할당

 

[이차원배열의 초기화]

int[][]intArray = {{0,1,2},{3,4,5},{6,7,8}};

char charArray[][]={{'a','b','c'}{'d','e','f'}};

double dobleArray[][]={{0.01, 0.02}, {0.03,0.04}};

package 이차원배열;

public class Ex01 {

	public static void main(String[] args) {
		
		int[][] arr; //2차원배열의 레퍼런스 배열의 참조값을 가지는 레퍼런스 변수
		arr = new int[3][5]; // 3행(레퍼런스 배열 길이) 5열(실제값이 들어가는 배열의 길이) 2차원 배열 생성
		
		arr[0][0]=1;
		arr[2][3]=3;
		
		int[][]arr2 = {{1,2,3},{2,3,4}};
		
		//배열 크기
		System.out.println(arr2.length); //레퍼런스 배열의 길이(행의 개수)
		System.out.println(arr2[0].length); // 실제값을 가지는 배열의 길이(열의 개수)

}
}

package Aug_seventeenth_reviw;

public class ex08 {

public static void main(String[] args) {
		
		int[][] arr; //2차원배열의 레퍼런스 배열의 참조값을 가지는 레퍼런스 변수
		
		int[][] arr3 = new int[5][5];
		
		int num =1;
		//값 입력
		for(int i=0;i<arr3.length;i++) {
			for(int j=0;j<arr3[i].length;j++) {
				arr3[i][j]= num++;
			}
			
		}
		
		//값 출력
		for(int i=0;i<arr3.length;i++) {
			for(int j=0;j<arr3[i].length;j++) {
				System.out.print(arr3[i][j]+"\t");
			}
			System.out.println();
	}

}
}

package Aug_seventeenth_reviw;

public class ex08 {

public static void main(String[] args) {
		
		int[][] arr; //2차원배열의 레퍼런스 배열의 참조값을 가지는 레퍼런스 변수
		
		int[][] arr3 = new int[4][6];
		
		int num =21;
		//값 입력
		for(int i=0;i<arr3.length;i++) {
			for(int j=0;j<arr3[i].length;j++) {
				arr3[i][j]= num++;
			}
			
		}
		
		//값 출력
		for(int i=0;i<arr3.length;i++) {
			for(int j=0;j<arr3[i].length;j++) {
				System.out.print(arr3[i][j]+"\t");
			}
			System.out.println();
	}

}
}

 

배열의 길이를 구할 수 있는 속성> length

seat.length ->2차원 배열의 행 개수 

seat[1].length -> 2차원 배열 1번째 행의 열 개수 

 

[비정방형 배열]

비정방형 배열? 각행의 열의 개수가 다른 배열

[비정방형 배열의 생성]

int[][]seat = new int[5][];

seat[0] = new int[1];

seat[1] = new int[2];

seat[2] = new int[3];

seat[3] = new int[1];

seat[4] = new int[3];

-> 각 행마다 열이 다르기 때문에 원하는 열 사이즈를 따로 지정해 줘야 함

package 이차원배열;

public class ex04비정방형배열 {

	public static void main(String[] args) {
		
		//비정방형배열 생성
		int[][] arr = new int[5][];
		
		arr[0] = new int[3];
		arr[1] = new int[2];
		arr[2] = new int[5];
		arr[3] = new int[1];
		arr[4] = new int[6];
		
		System.out.println(arr[0].length);
		System.out.println(arr[2].length);
	}

}
//확장for문 (for~each문) -> 배열,arraylist
		//(배열의 0번 인덱스부터 실제값을 임시적으로 저장할 변수 선언 : 배열 레퍼런스변수이름)
		for(String s:arrStr) {
			System.out.println(s);
		}

package 이차원배열;

public class Ex02 {

	public static void main(String[] args) {

		int[][] arr = new int[5][5];

		int num = 1;
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j--) {
				arr[i][j] = num++;
			}
		}

		num = 1;
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][arr.length - 1 - j] = num++;
			}
		}

		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j >= arr[i].length; j++) {
				System.out.println(arr[i][j] + "\t");
			}
			System.out.println();
		}

		int[][] arr2 = new int[5][5];
		int num2 = 1;
		for (int i = 0; i < arr.length; i++) {
			if (i % 2 == 0) {// 행 인덱스가 짝수
				for (int j = 0; j < arr2[i].length; j++) {
					arr2[i][j] = num2;
				}
			} else {// 행 인덱스가 홀수
				for (int j = 0; j < arr2[i].length; j++) {
					arr2[i][arr2[i].length - 1 - j] = num2++;
				}
			}
		}
		for (int i = 0; i < arr2.length; i++) {
			for (int j = 0; j < arr2[i].length; j++) {
				System.out.println(arr2[i][j] + "\t");
			}
			System.out.println();
		}

	}
}
package 이차원배열;

public class ex04비정방형배열 {

	public static void main(String[] args) {
		
		//비정방형배열 생성
		int[][] arr = new int[5][];
		
		arr[0] = new int[3];
		arr[1] = new int[2];
		arr[2] = new int[5];
		arr[3] = new int[1];
		arr[4] = new int[6];
		
		System.out.println(arr[0].length);
		System.out.println(arr[2].length);
	}

}

 

[자바 오후수업]- 메소드

public class Ex05 {

	public static void main(String[] args) {
		int num1 = 11;
		int num2 = 5;
		int result = close10(num1, num2);
		System.out.println("10에 가까운 수 : "+ result);
		
		
	}

	public static int close10(int num1, int num2) {
		
		//1.첫번째 방법
		
		//10과의 거리 차를 기억할 수 있는 변수 선언
		int a = 10-num1; 
		int b = 10-num2;
		
		//거리의 차가 음수가 나오지 않도록 절대값 작업 진행
		if(a<0) {
			a*=-1;
		}if(b<0) {
			b*=-1;
		}
		
		//2. 두번째 방법
		
		int a = Math.abs(10-num1);
		int b = Math.abs(10-num2);
		

		//10과의 거리가 어느수가 더 가까운지 판단하기!
		if(a > b) {
			return num2;
		}else if(a<b) {
			return num1;
		}else {
			return 0;			
		}
		
	}
			
	}

public class ex07 {

	public static void main(String[] args) {
		int[] array = {1,3,4,8,7,9,10};
		arrayTostring(array);

	}

	public static void arrayTostring(int[] arr) {
		for(int i =0 ;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
        
        System.out.println(Arrays.toString(arr));
	}

}

public class ex08 {

	public static void main(String[] args) {
		
		getDivisor(10);
		getDivisor(16);
		getDivisor(24);

	}

	public static void getDivisor(int num) {
		
		System.out.print(num + "의 약수 : ");
		
		//1~num 범위 
		for(int i =1; i <= num; i++) {
			if(num % i == 0) {
				//약수!
				System.out.print(i + " ");
			}
		}
		System.out.println();
	}

}

public class ex09 {

	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 2;
		boolean divisor = isDivisor(num1, num2);
		System.out.println(divisor);
	}

	public static boolean isDivisor(int num1, int num2) {
		if (num1 % num2 == 0) {
			return true;
		} else
			return false;
	}

}

 

메소드 오버로딩 [ methodoverloading]

메소드 오버로딩이란 메소드의 이름은 하나만 주고 매개변수를 다르게 함으로써 메소드를 여러개 만드는 기법

오버로딩 메소드의 구별은 매개변수의 개수 및 매개변수의 데이터 타입으로 구분함

package Aug_seventeenth_reviw;

public class ex08 {

public static void main(String[] args) {
		
		//메소드 오버로딩 -> 메소드 중복정의
	
		System.out.println(sum(2,3));
		System.out.println(sum(2,3,4));
		
		System.out.println(1);
		System.out.println("문자"+"문자");
		System.out.println(sum(1,2));
	}

	public static int sum(int num1, int num2) {
		return num1 + num2;
	}
	
	public static int sum(int num1, int num2, int num3) {
		return num1 + num2+ num3;

}
}

[메소드 오버로딩의 조건]

메소드 이름이 같아야함

매개변수의 개수 또는 타입이 달라야 함

매개변수는 같고 리턴타입이 다른 경우는 오버로딩이아님

 

[오버로딩의 장점]

메소드이름의 낭비방지

같은 메소드에 여러 종류의 매개변수를 받을 수 있음

 

ex) add(int num1 , int num2)

      add(float num1, float num2)

 

[paradigm]

사람들의 견해나 사고를 근본적으로 규정하는 테두리

[Programming Paradigm]

프로그래밍을 할 때 가지는 체계,관점,틀

 

[procedural progamming]

: 절차적 프로그래밍 

: c, fortran, cobol

-step by step(process)

- data and logic mixed

 

[object oriented programming = 객체지향프로그래밍]

java, c#, python

 

[객체지향 프로그래밍이란]

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

: 여러 개의 독립된 단위, 즉, 객체들의 모임으로 파악하고자 한는 것 각각의 객체는 메시지를 주고 받고 데이터를 처리

: 컴퓨터가 수행하는 작업을 객체들간의 상호 작용으로 표현 객체들의 집합으로 프로그램 작성

 

class(클래스) - 설계도

object(객체)created - 설계도 통해 실제로 만들어지는것

 

[객체지향프로그래밍의 특징]

슐화,속,상화,형성

 

[추상화(abstraction)]

- 객체에서 공통된 속성과 행위를 추출하는 기법

- 코드 상에서 구현(로직)부분을 제외한 오직 선언 부분만을 설계

- 상세한 정보를 무시하고 필요한 정보들만 간추려서 구성

 

[캡슐화]

- 관련된 필드(속성)와 메소드(기능)를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법(정보은닉)

- 만일의 상황(타인이 외부에서 조작)을 대배해서 특정 속성이나 메소드를 사용자가 조작할 수 없도록 숨겨 놓은 것.

- 외부에서는 공개된 메소드(기능)의 인터페이스를 통해 접근할 수 있다.

 

[상속(inheritance)]

- 이미 작성된 클래스(상위클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성하는 기법

- 기존 코드를 그대로 재사용하거나 재정의 ->재사용+확장

 

[다형성]

- 사전적 의미 "다양한 형태로 나타날 수 있는 능력'

- 같은 기능(메소드)를 호출하더라도 객체에 따라 다르게 동작하는 것

- 상위 클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것 또한 다형성으로 볼 수 있다.

                                                                  ->Overriding(오버라이딩)

 

[객체지향프로그래밍의 장점]

- 신뢰성 있는 소프트웨어를 쉽게 작성할 수 있다

- 코드를 재사용하기 쉽다

- 유지보수가 용이하다

- 직관적인 코드 분석이 가능하다

- 소프트웨어 생산성이 향상된다

 

[클래스(class)의 구조]

public class 클래스명{

 

            자료형 필드명1;

            자료형 필드명2;

            ....           ...

 

            반환형 메소드1(){...}

            반환형 메소드2(){...}

}

 

[객체(object)의 생성]

public class 클래스명{

   public static void main(String[]args){

        클래스 객체명 = new 클래스();

}

package Ex01;

public class Person {
	
	//Peraon 객체를 만들기 위한 셀계를 진행 하는 설계도!
	//설계도는 설계만 진행하므로 실행되는 과정은 가질 수 없다!
	// -> main() x 
	
	//설계도 -> class
	//class 구조!
	// 1. 필드 = 속성, 데이터, 특징
	
	int age;
	String gender; 
	int height;
	int weight;
	
	
	// 2. 메소드 = 행위, 로직, 기능
	public void move() {
		System.out.println("뚜벅뚜벅 걷는다...");
	}
	
	public void eat() {
		System.out.println("우걱우걱 먹는다!");
	}
	
	//사람이라면 어떤 특징과 어떤 행위를 가져야 할까?
	//키, 몸무게, 다리, 이름, 생김새,/ 자기, 먹기, 움직임
	
	

}
package Ex01;

public class PersionMain {

	public static void main(String[] args) {
		
		// 설계도를 통해서 실체(=객체)가 만들어질 수 있는 공간!

		// 객체 생성하기 -> new 키워드!
		Person 홍길동 = new Person();
		
		//객체 구체화 하기! -> 객체가 가질 데이터값 저장
		홍길동.age = 27;
		홍길동.gender="여";
		홍길동.height = 165;
		홍길동.weight= 50;

		
		
		System.out.println("성별: "+홍길동.gender);
		홍길동.move();
		홍길동.eat();
	}

}
728x90
LIST