쌍용교육(JAVA)/JAVA

쌍용교육 -JAVA 수업 7~8일차 Method

구 승 2024. 4. 11. 17:14

MethodMain

package kr.s07.object.method;

public class MethodMain01 {
	//반환하는 데이터가 있는 경우
		 //int = 반환형
	public int add(int a, int b) { //add는 메서드명. a와b는 인자. 
		return a+b;//반환하는 데이터
	}
	//반환하는 데이터가 없는 경우 void를 사용
	public void print(String str) {
		System.out.println(str);
		//void에서 return;을 쓰면 함수를 빠져나갈 때 void는 생략가능  
	}
	
	public static void main(String[] args) {
		//객체 선언 및 생성
		MethodMain01 method = new MethodMain01();
		//객체의 멤버 메서드 호출
		int result = method.add(5, 8);
		System.out.println("result =" + result);
		
		method.print("오늘은 월요일");
	}
}
 
result =13
오늘은 월요일

package kr.s07.object.method;

public class MethodMain02 {
	
	/*
	 * [실습]
	 * 입력한 int형 정수값이 음수이면 -1을,0이면 0을, 양수이면 1을 반환
	 * 하는 signOf 메서드를 작성하자.
	 */
	
	public int signOf(int n) {
		if(n>0) {
			return 1;
			
		}else if (n == 0) {
			return 0;
		}else
			return -1;
	}
	/*강사님 코드
	 * public int signOf(int n) {
	 * int sigh = 0;
		if(n>0) {
			sigh = 1;
			
		}else if (n < 0) {
			sigh = -1;
		}
			return sigh;
	}
	 */
 	public static void main(String[] args) {
 		java.util.Scanner input =
 		new java.util.Scanner (System.in);
 		
 		System.out.print("정수 x:");
 		int x = input.nextInt();
		MethodMain02 so = new MethodMain02();
		int result = so.signOf(x);
		System.out.println("sighOf(x)는 "+result+"입니다");
		
		input.close();
	}
}

정수 x:1
sighOf(x)는 1입니다

package kr.s07.object.method;

public class MethodMain03 {
	/*
	 * [실습]
	 * 배열의 요소 수를 입력 받아서 배열 x 생성
	 * 입력받은 정수를 배열x에 저장하고
	 * 배열 x가 가진 모든 요소의 합을 구하는 sumOf(int[] a) 메서드
	 * 정의하시오.
	 * 
	 * [입력예시]
	 * 요소 수:3
	 * x[0] = 1
	 * x[1] = 2
	 * x[2] = 3
	 * 
	 * [결과 예시]
	 * 모든 요소의 합은 6입니다.
	 */
	
	public  int sumOf(int[] a) {
		int sum = 0;
		for(int i=0; i<a.length ; i++) {
			
			 sum+=a[i];
		}
		return sum;
	}
	
	public static void main(String[] args) {
		
		java.util.Scanner input =
		 		new java.util.Scanner (System.in);
		//요소
		System.out.print("요소 수:");
 		int num = input.nextInt();
 		
 		//num개의 요소를 가지는 배열
 		int[] x = new int[num];
 		
 		for (int i=0; i<num; i ++) {
 			System.out.print("x["+i+"]:");
 	 		x[i] = input.nextInt();
 		}
 		

 		MethodMain03 me = new MethodMain03();
 		int result = me.sumOf(x);
 		System.out.println("모든 요소의 합은 "+ result +"입니다.");
 		
		input.close();
	}
}

요소 수:3
x[0]:1
x[1]:2
x[2]:3
모든 요소의 합은 6입니다.

package kr.s07.object.method;

public class MethodMain04 {
	/*
	 * [실습]
	 * 배열 요소 수(사람 수) 를 입력 받아서 배열 weight 생성.
	 * 입력 받은 정수를 배열 weight에 저장하고 배열 weight가 가진 
	 * 모든 요소의 수 중 최소값을 구하는 minOf 메서드를 작성하시오.
	 * 
	 * [입력 예시]
	 * 사람 수:3
	 * 1번의 몸무게:90
	 * 2번의 몸무게:88
	 * 3번의 몸무게:91
	 * 
	 * 가장 마른 사람의 몸무게는 90kg 입니다.
	 * 
	 */
	public int minOf(int[] a) {
		int min = a[0];
		for(int i = 1; i<a.length; i++) {
			if (a[i] < min ) {
				
				min = a[i];
			}
			
		}
		return min; //return은 오직 한 개의 값만 반환. 인자는 여러개가 되긴해도 return 값은 무적권 1개
		//max를 하고 싶으면 메서드를 새로 만들어줘야됨.
		
	}
	public static void main(String[] args) {
		java.util.Scanner input =
				new java.util.Scanner(System.in);
		
		System.out.print("사람 수 : ");
		int num = input.nextInt();
		
		//num개의 요소를 가지는 배열
 		int[] weight = new int[num];
 		
 		for (int i=0; i<num; i ++) {
 			System.out.print((i+1)+"번의 몸무게 : ");
 			weight[i] = input.nextInt();
 	 		
 		}
 		//객체 선언 및 생성
 		MethodMain04 me = new MethodMain04();
 		
 		int result = me.minOf(weight);
 		
 		System.out.println("가장 마른 사람의 몸무게는 "+ result +"kg입니다.");
 		
		input.close();
	}
}

사람 수 : 3
1번의 몸무게 : 90
2번의 몸무게 : 88
3번의 몸무게 : 91
가장 마른 사람의 몸무게는 88kg입니다.

실습

package kr.s07.object.method;

public class StudentMain {
	//멤버 필드(속성)
	String name;
	int korean;
	int english;
	int math;
	
	//멤버 메서드(동작)
	//총점 구하기
	public int makeSum() {
		return korean +english +math;
		
	}
	//평균 구하기
	public int makeAverage() {
		return makeSum()/3;
	}
	//등급 구하기
	public String makeGrade() {
		String grade;
		switch(makeAverage()/10) { //메서드를 실행(불러오기)을 시키기 위해선 메서드 뒤에 ()가 있어야됨.
		case 10:
		case 9:
			grade = "A"; break;
		case 8:
		grade ="B"; break;
		case 7:
			grade = "C"; break;
		case 6:
			grade = "D"; break;
		default :
			grade = "F";
		}
		return grade;         
	}
	//성적 출력용 메서드
	public void printScore() {
		System.out.println("이름 : "+name);
		System.out.println("국어 : "+korean);
		System.out.println("영어 : "+english);
		System.out.println("수학 : "+math);
		System.out.println("총점 : "+makeSum());
		System.out.println("평균 : "+makeAverage());
		System.out.println("등급 : "+makeGrade());
	}
	
	public static void main(String[] args) {
		StudentMain student = new StudentMain();
		student.name = "홍길동";
		student.korean = 98;
		student.english = 97;
		student.math = 96;
		
		student.printScore();
		
		System.out.println("================================");
		
		StudentMain student2 = new StudentMain();
		
		student2.name = "김영희";
		student2.korean = 91;
		student2.english = 99;
		student2.math = 79;
		
		student.printScore();
	}
}

이름 : 홍길동
국어 : 98
영어 : 97
수학 : 96
총점 : 291
평균 : 97
등급 : A
================================
이름 : 홍길동
국어 : 98
영어 : 97
수학 : 96
총점 : 291
평균 : 97
등급 : A

package kr.s07.object.method;

class Tv{
	//멤버 필드(속성)
	boolean power; //전원 상태(on/off)
	int channel; //채널
	
	//멤버 메서드(동작)
	public void isPower() { //Tv를 켜거나 끄는 기능을 수행하는 메서드
		power = !power;
		
	}
	public void channelUp() {//Tv의 채널을 높이는 기능을 수행하는 메서드
		++channel;
	}
	public void channelDown() {//Tv의 채널을 낮추는 기능을 수행하는 메서드
		--channel;
	}
}
public class TvMain {
	public static void main(String[] args) {
		//객체 선언 및 초기화
		Tv t = new Tv();
		  t.isPower();//power의 값은 false -> true
		  
		System.out.println("TV 실행 여부 : "+ t.power);
		System.out.println("현재 채널:"+ t.channel);
		System.out.println("=====================");
		
		t.channel = 7;
		System.out.println("첫번째 변경된 채널:" +t.channel);
		System.out.println("=====================");
		
		t.channelDown();
		
		System.out.println("두번째 변경된 채널:" +t.channel);
		System.out.println("=====================");
		
		t.isPower();//true -> false
		System.out.println("TV 실행 여부 : "+ t.power);
		
	}
}

TV 실행 여부 : true
현재 채널:0
=====================
첫번째 변경된 채널:7
=====================
두번째 변경된 채널:6
=====================
TV 실행 여부 : false

package kr.s07.object.method;

class Worker {
	/*
	 * [실습]
	 * Worker
	 * 1)멤버 변수: 직원이름(name),급여(money),계좌잔고(balance)
	 * 2)멤버 메서드: work(실행하면 money에 1000원 누적)
	 * 					deposite(실행하면 money에 저장된 돈을 
	 * 					balance에 누적시키고 money는 0처리)
	 * WorkerMain의 main
	 * 1)Worker 객체 생성
	 * 2)직원의 이름 지정
	 * 3)10번 일하는데 번 돈이 3000원일 때 마다 계좌에 저축
	 * 4)직원 이름, 현재 계좌에 입금되지 않고 남아있는 급여(money),
	 * 계좌 잔고(balance)를 출력하시오.
	 */
	String name;
	int money;
	int balance;
	
	public void work() {//일하는 메서드
		money +=1000; 
	}
	
	public void deposite() {//저축하는 메서드
		balance += money;
		money = 0;
	}
	
}	
public class WorkerMain {
	public static void main(String[] args) {
		
		Worker wk = new Worker();
		
		wk.name = "구승회";
		//10번 일하는데 번 돈이 3000원이 되면 저축
		for (int i =0 ; i <10; i++) {
			wk.work();
			if (wk.money ==3000) {//wk.money%3000==0 도 가능
				wk.deposite();
			}
			
		}
		System.out.println("직원이름:"+wk.name);
		System.out.println("현재 계좌에 입금되지 않고 남아있는 급여:"+wk.money);
		System.out.println("계좌잔고:"+wk.balance);
	}
}
  
직원이름:구승회
현재 계좌에 입금되지 않고 남아있는 급여:1000
계좌잔고:9000

MethodArg

package kr.s08.object.method;

import java.util.Scanner;

class Account {
	//멤버 변수
	String account_num;//계좌번호 String으로 한 이유는 계좌번호의 하이픈(-)이 있어서
	String name;//예금주
	int balance;//잔고
	//멤버 메서드
	//예금하기
	public void deposite(int money) {
		if(money <=0) {
			System.out.println("입금액은 0보다 크게 입력하세요!");
		}else {
			balance +=money;//누적
			System.out.println("입금이 완료되었습니다.");
		}
		
	}
	//출금하기
	public void withdraw(int money) {
		if(money <=0) {
			System.out.println("출금액은 0보다 크게 입력하세요!");
		}else if(balance < money) {
			System.out.println("잔액이 부족합니다.");
			
		}else {
			balance -= money;//차감
			System.out.println("출금이 완료되었습니다.");
		}
		
	}
	//계좌정보
	public void printAccount() {
		System.out.println("계좌번호:"+account_num);
		System.out.println("예금주:"+name);
		System.out.printf("잔고:%,d원%n",balance);
	}
}
public class BankMain {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);

		//계좌 생성
		Account account = new Account();
		//계좌 기본 정보 입력
		System.out.println("계좌 기본정보를 입력해서 계좌를 생성합니다.");
		System.out.print("계좌번호를 입력하시오:");
		account.account_num = input.nextLine();
		System.out.print("예금주:");
		account.name = input.nextLine();
		System.out.print("잔고:");
		account.balance = input.nextInt();

		System.out.println(account.name + "님 계좌가 개설되었습니다.");

		while(true) {
			System.out.println("=============================");
			System.out.println("|1.예금,2.출금3.잔고 확인,4.종료|");
			System.out.println("=============================");

			System.out.print("메뉴 선택>");
			int num = input.nextInt();
			if (num==1) {//예금
				System.out.print("예금액>");
				account.deposite(input.nextInt()); //코드 짧게 하는방법
			}
			else if(num ==2) {//출금
				System.out.print("출금액>");
				account.withdraw(input.nextInt());
			}
			else if(num==3) {//잔고확인
				account.printAccount();
			}
			else if(num==4) {//종료
				System.out.println("프로그램 종료");
				break;
			}

			else {
				System.out.println("잘못 입력했습니다.");
			}

		}input.close();

	}
}

계좌 기본정보를 입력해서 계좌를 생성합니다.
계좌번호를 입력하시오:123-456-789
예금주:구승회
잔고:123,456,789
구승회님 계좌가 개설되었습니다.
=============================
|1.예금,2.출금3.잔고 확인,4.종료|
=============================
메뉴 선택>1
예금액>1000
입금이 완료되었습니다.
=============================
|1.예금,2.출금3.잔고 확인,4.종료|
=============================
메뉴 선택>3
계좌번호:123-456-789
예금주:구승회
잔고:123,457,789원
=============================
|1.예금,2.출금3.잔고 확인,4.종료|
=============================
메뉴 선택>2
출금액>1000
출금이 완료되었습니다.
=============================
|1.예금,2.출금3.잔고 확인,4.종료|
=============================
메뉴 선택>3
계좌번호:123-456-789
예금주:구승회
잔고:123,456,789원
=============================
|1.예금,2.출금3.잔고 확인,4.종료|
=============================
메뉴 선택>4
프로그램 종료

package kr.s08.object.method;

public class MethodArgMain01 {
	//인자 전달 방법: 값 호출 (Call by value)
	//기본 자료형의 값을 인자로 전달하는 방식. 값을 복사하여 전달
	public int increase(int n) {
		++n;
		return n;
	}
	public static void main(String[] args) {
		int var1 =100;
		MethodArgMain01 ma = new MethodArgMain01();
		int var2 = ma.increase(var1);
		System.out.println("var1 = "+var1+","+"var1 = "+var2);
	}
}

var1 = 100,var1 = 101

package kr.s08.object.method;

import java.lang.reflect.Method;

public class MethodArgMain02 {
	//인자 전달 방식: 참조 호출(Call by reference)
	//객체의 주소를 인자로 전달하는 방식. 주소(reference)를 복사하여 전달
	public void increase(int[] n){ //배열도 객체임.  
		for(int i =0; i<n.length;i++) {
			n[i]++; //ex: 100 200 300 -> 101 201 301
		}
	}
	public static void main(String[] args) {
		//배열 선언 및 생성,초기화
		int[] ref1 = {100,200,300};
		System.out.println("====데이터 변경 전=====");
		
		for(int i =0; i<ref1.length; i++) {
			System.out.println("ref1["+i+"}:"+ref1[i]);
		}
			MethodArgMain02 ma = new MethodArgMain02();
			
			ma.increase(ref1);
			System.out.println("===데이터 변경 후 ====");
		for(int i =0; i<ref1.length; i++) {
			System.out.println("ref1["+i+"}:"+ref1[i]);
			}
		
		
	}
}

var1 = 100,var1 = 101

package kr.s08.object.method;

public class MethodArgMain03 {
	/*
	 * Variable Arguments
	 * 자료형이 일치할 때 전달하고자 하는 값의 개수를 다르게 지정할 수 있음
	 * 전달되는 데이터는 내부적으로 배열로 인식함
	 */
	public void argTest(int ... n) { //n은 배열을 가르키는 배열명임.
		for(int i = 0; i<n.length; i++) {
			System.out.println("n["+i+"]:"+ n[i] );
			
		}
		System.out.println("==================");
	}
	public static void main(String[] args) {
		MethodArgMain03 ma = new MethodArgMain03();
		ma.argTest();
		ma.argTest(1); 
		ma.argTest(10,20,30);
	}
}

==================
n[0]:1
==================
n[0]:10
n[1]:20
n[2]:30
==================