국비학원/공부

18일차 java(6)

mikan- 2023. 5. 16. 22:45

# 배열

public class ArrayTest {

	public static void main(String[] args) {
		// int su, su2, su3;
		// 형식) 자료형 배열명[] = new 자료형[개수]
		// int -> 0, double -> 0.0, boolean -> false 로 자동 초기화

		int su[] = new int[3]; // 0,1,2 -> 3개의 공간을 생성
		System.out.println("su : " + su);

		su[0] = 10;
		su[1] = 20;
		su[2] = 30;
		System.out.println("su [0] : " + su[0]);
		System.out.println("su [1] : " + su[1]);

		int su4 = 23; // 지역변수는 반드시 초기값을 줘야 출력이 된다.
		System.out.println(su4);
		
		/*
		 * int c[] = new int[13]; 
		 * c[0] = 10; c[1] = 20; ,,, c[12] = 130; 
		 * 배열명.length -> 배열의 길이를 자동으로 계산
		 */

		//형식2) 자료형 배열명[] = {값1,값2,값3....} 배열생성 및 초기화
		int c[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130 };
		
		// 배열의 첨자(index 번호)를 계산해서 원하는 데이터를 자세하게 출력하고 싶을때
		// 주의 : 첨자를 잘못 계산하면 논리적인 에러(문법은 이상 없지만 실행하면 오류뜸)가 발생함
		for (int i = 0; i < 13; i++) {
			System.out.println("c[" + i + "] = " +c[i]);
		}
		
		// 확장 for문(향상된 for문) -> 단순히 배열, 객체의 저장된 값을 꺼내와서 출력(확인용)
		// 형식) for(배열의 자료형 출력변수명 : 출력대상자(배열 or 컬렉션객체)
		for (int num:c)
			System.out.println("num : " + num + "\t");
	}

}
// 1차원배열의 문제
public class ArrayTest2 {

	public static void main(String[] args) {
		int b[] = {58, 38, 12, 36, 41, 27, 26, 32, 59, 16, 18, 28, 21, 17};
		int count = 0;
		// 10대 ~ 50대 -> 20대(20 ~ 29) 몇명?
		
		for(int i = 0; i < b.length; i++) {
			if(b[i] >= 20 && b[i] < 30) {
				count++;
				System.out.println("b[" + i + "] : " + b[i]);
			}
		} System.out.println("20대 인원수(count) = " + count);
		
		
		
		/*for (int i = 0; i < 14; i++) {
			if((b[i] > 20) && (b[i] < 30) ) {
				System.out.println(b[i]);
			}
		}*/
	}
}
import java.util.Scanner; // Ctrl + Shift + O

// 사용자로부터 연속적으로 5과목의 점수를 입력 받아서 총점, 평균값 구하기
public class ArrayTest3 {

	public static void main(String[] args) {
		
		int jumsu[] = new int[5]; // 0 ~ 4
		int sum = 0; // 합계
		double avg = 0.0; // 평균
		
		Scanner sc = new Scanner(System.in); // System.in(키보드)
		System.out.println("5과목의 점수를 입력하세요");
		
		// jumsu[0] = sc.nextInt(); // 숫자 -> nextInt(),  문자 -> next(), 소수점 -> nextDouble
		// sum += jumsu[0]; // sum = sum(0) + jumsu(0)
		
		for (int i = 0; i < jumsu.length; i++) {
			jumsu[i] = sc.nextInt();
			sum += jumsu[i];
		}
		// 최종합계, 평균
		avg = (double)sum/jumsu.length;
		System.out.println("총 점수는 : " + sum);
		System.out.println("평균 점수는 : " + avg);
		
		
		/*- 내가한거
		for (int i = 0; i <= 4; i++) {
			System.out.println("5과목 점수를 입력하세요 : ");
			jumsu[i] = sc.nextInt();
			sum += jumsu[i];
		}
		avg = sum/5;
		System.out.println("총 점수는 : " + sum);
		System.out.println("평균 점수는 : " + avg);
		*/
	}
}

 

# 2차원 배열

public class DoubleTest {

	public static void main(String[] args) {

		System.out.println("2차원배열을 생성 및 가변배열");

		// 형식) 배열의 자료형 배열명[][] = new 자료형[행수][열수]
		int c[][] = new int[3][3];

		// 형식2) 배열의 자료형 배열명[][] = {{값1, 값2, 값3}, {}, {}, {}}
		// 고정배열
		// int b[][] = {{10, 20, 30,}, {40, 50, 60,}, {70, 80, 90}};
		//                  ↓                 ↓             ↓
		//                b[0][1]            b[1][2]        b[2][2]

		// 가변배열 : 행은 정해져 있는데 열은 그때마다 바뀌는 경우
		int b[][] = { { 10, 20, 30, }, { 40, 50 }, { 60, 70, 80, 90 } };

		for (int i = 0; i < b.length; i++) { // 행의값(열의 데이터 주소값 출력)
			//System.out.println("b[" + i + "] : " + b[i]);
			for (int j = 0; j < b[i].length; j++) {
				System.out.println("b[" + i + "][" + j + "] : " + b[i][j]);
			}
		}
		
		/*		for(2차원배열의 자료형 배열명[][]:3차원배열명) // 절대로 [][][] 표시(X)
		 * 형식) for(1차원배열의 자료형 배열명[]:2차원배열명) // 절대로 [][] 표시(X)
		 *       	for(1차원배열의 자료형 출력변수명:1차원배열명) // 절대로 [] 표시(X)
		 *       
		 */
		int sum = 0;
		for (int temp[]:b) { // 2차원배열(b)에서 1차원배열의 값을 하나씩 꺼내서 temp에 저장
			for (int su:temp) {
				System.out.println(su + "\t");
				sum += su;
			}
			System.out.println(); // 행이 바뀔때마다 줄바꿈
		}
		System.out.println("sum : " + sum);
	}
}

 

# 메소드 호출

public class IFTest {

	public static void main(String[] args) {
		// 입출력 -> 사용자로부터 값을 입력 -> Scanner 객체를 이용
		// 짝수, 홀수 판별(수/2 == 0(2의 배수) /3 != 0(3의 배수)
		int su = 31;
		if (su % 2 == 0) { // 조건식(변수, 연산자(관계, 논리))
			System.out.println(su + " 은 짝수 입니다.");
		} else {
			System.out.println(su + " 은 홀수 입니다.");
		}

		System.out.println("삼항연산자로 변경");
		String su2 = (su % 2 == 0) ? "짝수 입니다." : "홀수 입니다.";
		System.out.println("입력받은 값 (su2) = " + su2);
		System.out.println("if 연습중"); // 순차문
		
		// 단순, 보편적인 기능 -> 절대값, 최대값, 최소값 -> 정적메소드로 제공
		// java.lang.Math
		int abs = -500;
		abs = (abs < 0)?-abs:abs; // 직접코딩 -> 일반메소드 호출
		System.out.println("절대값 abs : " + abs);
		
		abs = Math.abs(-2500); // 클래스명.정적메소드명(~)
		System.out.println("절대값 abs : " + abs);
		
		int max = Math.max(34, 98);
		System.out.println("max : " + max);
	
		int min = Math.min(34, 98);
		System.out.println("min : " + min);
	}
}
// 외부의 패키지에 불러올때 import ----> 최상위패키지명.하위패키지명...불러올클래스명;
import java.util.Scanner; // java.lang 패키지 외에 무조건 다 적음

// 성적처리 프로그램 -> 국, 영, 수 -> 합계 -> 평균 -> 등급 -> 모든 정보 한번에 출력
public class MethodEx {
	
	// 요구분석에 따라서 필요로 하는 메소드를 생각
	/*
	 *  메소드를 작성할때 매개변수를 주고, 안주는 경우(구분)
	 *  1. 멤버변수로 선언 -> 매개변수가 없는 메소드를 작성O
	 *  2. 멤버변수로 선언X -> 지역변수로 선언
	 *  						매개변수가 있는 메소드를 작성O
	 *  3. 반환값O -> caller가 처리
	 *     반환값X -> 호출한 메소드가 처리
	 */
	
	 int kor, eng, math, total;
	 double avg;
	 char grade;
	
	
	// 1. 총점(합계) -> 정적메소드는 항상 메소드명 앞에 static 이 붙는다
	int calcTotal() {
	// int calcSum() {
		int total = kor + eng + math;
		return total;
	}
	
	// 2. 평균(총점 / 과목 수)
	double calcAvg() {
		return (double)(total / 3);
	}
	// 매소드 오버로딩 : 비슷한 기능을 가진 메소드명은 하나의 메소드로 통합
	double calcAvg(int sum) { // sum은 멤버변수로 선언X
		return (double)(total/sum);
	}
	
	// 3. 등급(학점 -> 평균 점수에 A ~ F 까지)
	char calcGrade() {
		if (avg <= 100 && avg >= 90) return 'A';
		else if ( avg < 89 && avg >= 80) return 'B';
		else if ( avg < 79 && avg >= 70) return 'C';
		else if ( avg < 69 && avg >= 60) return 'D';
		else return 'F';
	}
	
	// 4. 총점, 평균, 등급 한번에 출력 -> 단순, 반복 -> 매개변수X 반환값X
	// 멤버변수가 없기 때문에 매개변수는 있어야됨
	void display() {
		System.out.println("합계는(total) : " + total);
		System.out.println("평균은(avg) : " + avg);
		System.out.println("등급은(grade) : " + grade);
	}
	
	
	public static void main(String[] args) {
		// 맴버변수가 없기 때문에
		// 객체생성
		MethodEx me = new MethodEx();
		
		// 지역변수 : 메소드 내부에서만 사용이 가능 -> 다른 매소드에서 불러서 사용X
		// scanner : 사용자로부터 값을 입력받아 처리
		// nextInt() 정수, next() 문자
		// Ctrl + Shift + O : 자동 import 기능
		Scanner sc = new Scanner(System.in); //키보드
		System.out.println("1. 국어점수를 입력해주세요.");
		me.kor = sc.nextInt(); // 소수점 : sc.nextDouble();
		System.out.println("2. 영어점수를 입력해주세요.");
		me.eng = sc.nextInt();
		System.out.println("3. 수학점수를 입력해주세요.");
		me.math = sc.nextInt();
		
		// 1. 총점
		me.total = me.calcTotal();
		// System.out.println("총점수 : " + total);
		
		// 2. 평균
		me.avg = me.calcAvg();
		
		// 3. 등급
		me.grade = me.calcGrade();
		
		// 4. 한번에 출력
		me.display();
	}
}

 

# 오버로딩

// 동적배열 + 오버로딩 = 매개변수의 자료형이 하나, 개수가 달라야한다.
public class VarArgTest {
	
	/*
	public void print(String a) {
		System.out.println("a : " + a);
	}
	
	public void print(String a, String b) {
		System.out.println("a : " + a + ", b : " + b);
	}
	
	public void print(String a, String b, String c) {
		System.out.println("a : " + a + ", b : " + b + ", c : " + c);
	}
	*/
	// public void print(String ... names, String str)(X)
	// public void print(String str2, String ...names) {} // 동적배열은 맨 나중에
	public void print(String ... names) { // 매개변수의 개수와 상관없이 메소드 하나로 통합
		/*
		 * int params[] = {1,2,3,4,5}
		 * String names[] = {"홍길동"}
		 * String names[] = {"홍길동", "홍길동2"}
		 * String names[] = {"홍길동", "홍길동2", "홍길동3"}
		 */
		for (String str:names)
			System.out.print(str + "\t");
		System.out.println();
	}
	
	public void print2(String names[]) { // 배열의 주소값을 전달(객체전달)
		for (int i = 0; i < names.length; i++) {
			System.out.print (names[i] + "\t"); // 가로로 출력
		}
		System.out.println();
	}
	public static void main(String[] args) {
		VarArgTest va = new VarArgTest();
		
		String str[] = {"배열의 활용", "동적배열", "API문서 참조하는 방법"};
		va.print2(str);
		
		va.print("홍길동");
		va.print("홍길동", "홍길동2");
		va.print("홍길동", "홍길동2", "홍길동3");
		va.print("홍길동", "홍길동2", "홍길동3", "홍길동4", "홍길동5");
		
		// 매개변수 4개짜리가 없어서 오류
		//va.print("홍길동", "홍길동2", "홍길동3", "홍길동4");
	}
}

 

# 추상화

// 추상화 -> 직사각형의 면적(객체)를 공통속성, 공통기능 -> 새로운 자료형
// 캡슐화 -> 다형성(생성자 오버로딩)
class Rect {
	// 1. 공통멤버변수
	private int x;
	private int y = 10; // 가로, 세로
	//private int area; // 면적(사각형의 넓이) -> double area; // 삼각형 또는 원의 면적
	//-----------------------------------추가된 영역---------------------------------------------------
	//(), (x), (y), (x, y)
	// 기본생성자 : 매개변수X, 내용X
	Rect() {
		// 생성자내부 에서는 자기클래스의 객체명을 사용X -> this 로 써준다.
		//this.x = 20; // r.x = 20;
		//this.y = 30; // r.y = 30;
		this(20,50); // (2)
		System.out.println("기본생성자의 목적 : 멤버변수의 초기화");
	}
	
	Rect(int x) {
		if (x < 0) {
			System.out.println("X값은 음수 입력 불가");
			x = 20; // 값을 입력을 못받기 때문에 초기값 설정
			return;
		}
		this.x = x;
		System.out.println("난 매개변수 1개짜리 생성자 호출됨(this.x) " + this.x);
	}
	
	Rect(double y) { // int -> double (자동형변환)
		this.y = (int)y; // int <- double (명시적인 형변환)
	}
	
	Rect(int x, int y) { // (3)
		this.x = x; // r.x = 20
		this.y = y; // r.y = 50
		System.out.println("난 매개변수 2개짜리 생성자 호출됨(this.x, this.y)"); // (4)
	}
	
	
	
	
	
	
	
	//-----------------------------------추가된 영역---------------------------------------------------
	public void setX(int x) { // int a = 매개변수
		if (x < 0) {
			System.out.println("X값은 음수 입력 불가");
			this.x = 20; // 값을 입력을 못받기 때문에 초기값 설정
			return;
		}
		this.x = x; // 멤버변수 = 매개변수
				// else 안쓰면 return 해서 나가야됨
	}

	public void setY(int y) {
		if (y < 0) {
			System.out.println("Y의 값은 음수 입력 불가");

		} else {
			this.y = y;
		}
	}

	// public 반환형 getXXX() { return 꺼내올 멤버변수명;}
	public int getX() {
		return this.x;
	}

	public int getY() {
		return this.y;
	}

	// 2. 공통기능(메소드) 면적을 구하는 메소드
	// 1) 매개변수X, 반환값X : 단순, 반복 -> 똑같은 문장 여러번 반복
	void print() {
		System.out.println("x의 값은 = " + this.x);
		System.out.println("y의 값은 = " + this.y);
		System.out.println("x * y = " + (this.x * this.y));
	}
	
	// 2) 매개변수O, 반환값X : 입력 -> 출력, 계산, 저장
	void area(int a, int b) {
		x = a;
		y = b;
		System.out.println("x * y = " + (x * y));
	}
	
	// 3) 매개변수O, 반환값O : 계산, 웹프로그래밍 방식
	// 반환값 : 호출되는 메소드가 계산한 결과값 -> 메소드 자체에서 처리X
	//			호출하는 caller에서 처리하는 계산값 : 보고O 반환값O
	int area2(int a, int b) {
		int result = a * b;
		return result; // return 계산 결과값(변수) or 수식 or 객체
	}

}

public class RectHandling_Answer {

	public static void main(String[] args) {

		Rect r = new Rect(); // (1)
		System.out.println("r : " + r);

		//r.x = 10; // 2. 객체명.멤버변수 -> 값(X)
		//r.setX(-20); // x = 20
		//r.setY(30); // y = 30;
		
		// 3. 객체명.호출할 메소드명() or (~)
		r.print();
		
		Rect r2 = new Rect(30); // r2 객체를 생성하면서 인수 1개짜리 생성자 호출
		r2.setY(40);
		r2.print();
		
		Rect r3 = new Rect(50, 60); // r3 객체를 생성하면서 인수 2개짜리 생성자 호출
		r3.print();
		
		// 4. 매개변수를 전달 -> 계산 -> 출력
		r.area(20, 40); // area라는 메소를 호출 하면서 매개변수 20,40을 전달
		
		// 5. 반환값이 있는 메소드 호출
		// 형식) 반환받는 변수명 = 객체명.호출할 메소드명
		int reply = r.area2(60, 40);
		System.out.println("계산받은 결과값(reply) : " + reply);
		System.out.println("==================================");
		System.out.println("r.area2(30, 40) : " + r.area2(30, 40));

		
	}

}

'국비학원 > 공부' 카테고리의 다른 글

20일차 java(8)  (0) 2023.07.02
19일차 java(7)  (0) 2023.07.02
17일차 java(5)  (1) 2023.05.15
16일차 java(4)  (1) 2023.05.15
15일차 java(3)  (1) 2023.05.11