수업
+11 메소드 제작
hs_developer
2022. 5. 17. 11:48
1. 사칙 연산
→ +, -, *, /, 계산기 조립
첫번째 정수 입력:
5
두번째 정수 입력:
8
연산자 입력(+,-,*,/):
*
5*8=40
static int add(int a, int b)
{
// 사용자 정수 2개 입력 → 더한 값 출력
return a+b; // 더한 값 출력
}
static int minus(int a, int b)
{
return a-b;
}
static int multiple(int a, int b)
{
return a*b;
}
static String div(int a, int b) // 매개변수 → 사용자가 요청한
{
// 경우의 수 여러 개 있는 경우
String result = ""; // 지역변수 → div() 안에서만 사용하는 변수
if(b==0)
result = "0으로 나눌 수 없습니다.";
else
result = String.valueOf(a/(double)b);
return result; // 끝나면 사라지는 변수
}
// 사칙 연산 → 계산기 조립
static void process() // 다른 클래스에서 재사용 가능
{
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 정수 입력: ");
int a = sc.nextInt();
System.out.println("두번째 정수 입력: ");
int b = sc.nextInt();
System.out.println("연산자 입력(+,-,*,/): ");
String strOp = sc.next();
// String → char로 변경
char op = strOp.charAt(0);
// 맨 첫 글자 잘라온다
// 불러오기 쉽게 하려고 사용?
// 연산 처리
if(op == '+') // if(strOp.equals("+")) → 문자열만 equals 사용
{
int c = add(a,b);
System.out.printf("%d+%d=%d\n", a,b,c);
}
else if(op == '-')
{
int c = minus(a,b);
System.out.printf("%d-%d=%d\n", a,b,c);
}
else if(op == '*')
{
int c = multiple(a,b);
System.out.printf("%d*%d=%d\n", a,b,c);
}
else if(op == '/')
{
String res = div(a,b);
System.out.printf("%d*%d=%s\n", a,b,res);
}
}
public static void main(String[] args) {
process();
// 재사용
// 클래스명.process();
}
2.
리턴형 값 여러 개일 경우, 매개변수 여러개 → 배열
정렬 → 사용자 5개 정수 → 결과 값 (정렬)
정렬 전:
[51, 32, 41, 53, 27]
정렬 후:
[27, 32, 41, 51, 53]
[53, 51, 41, 32, 27]
// 정렬하는 메소드
static int[] sort(int[] arr, int type) // ASC, DES 위한 type 추가
{
// select sort (선택 정렬)
for(int i=0; i<arr.length-1; i++)
{
for(int j=i+1; j<arr.length; j++)
{
if(type==0) // type이 0이면 오름차순
{
if(arr[i]>arr[j]) // 오름차순
{
int temp = arr[i];
arr[i] = arr[j]; // arr[i] = temp으로 대체 불가
arr[j] = temp;
}
}
else
{
if(arr[i]<arr[j]) // 내림차순
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
return arr;
}
static void process()
{
// 사용자가 5개 정수 보내면 → 메소드에서 정렬 데이터 전송
// 출력
int[] arr = new int[5];
// 초기화
for(int i=0; i<arr.length; i++)
{
arr[i]=(int)(Math.random()*100)+1;
}
System.out.println("정렬 전: ");
System.out.println(Arrays.toString(arr));
System.out.println();
System.out.println("정렬 후: ");
int[] res = sort(arr, 0); // 오름차순
System.out.println(Arrays.toString(res));
res = sort(arr, 1); // 내림차순
System.out.println(Arrays.toString(res));
}
public static void main(String[] args) {
process();
}
3. 배열 크기 생성
===== 5개 요청 =====
[1, 1, 1, 1, 1]
===== 10개 요청 =====
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
===== 15개 요청 =====
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
// 배열을 동적으로 변경
static int[] rand(int count)
{
int[] com = new int[count];
for(int i=0; i<com.length; i++)
{
com[i]=(int)(Math.random()+1);
}
return com;
}
static void process()
{
System.out.println("===== 5개 요청 =====");
int[] user = rand(5);
System.out.println(Arrays.toString(user));
System.out.println();
System.out.println("===== 10개 요청 =====");
user = rand(10);
System.out.println(Arrays.toString(user));
System.out.println();
System.out.println("===== 15개 요청 =====");
user = rand(15);
System.out.println(Arrays.toString(user));
}
public static void main(String[] args) {
process();
}
4. 반복 제거
코딩이 반복되면 메소드 사용
*****************
이름: 김나나
*****************
주소: 서울시 강남구
*****************
전화: 010-1111-1111
static void star()
{
for(int i=1; i<=17; i++)
{
System.out.print("*");
}
System.out.println();
}
public static void main(String[] args) {
/*
for(int i=1; i<=17; i++)
{
System.out.print("*");
}
System.out.println(); */
star(); // 반복 재사용
System.out.println("이름: 김나나");
/*for(int i=1; i<=17; i++)
{
System.out.print("*");
}
System.out.println();*/
star();
System.out.println("주소: 서울시 강남구");
/*for(int i=1; i<=17; i++)
{
System.out.print("*");
}
System.out.println();*/
star();
System.out.println("전화: 010-1111-1111");
}
5. 로그인 처리 → id, pwd
경우의 수 → String, int
1. id가 없는 경우
2. pwd가 틀린 경우
3. 로그인 된 경우
아이디 입력:
d
비밀번호 입력:
1234
아이디가 존재하지 않습니다.
아이디 입력:
admin
비밀번호 입력:
1
비밀번호가 틀립니다.
아이디 입력:
admin
비밀번호 입력:
1234
로그인 되었습니다. 메인 화면으로 이동합니다.
// 중첩 if
static String isLogin(String id, String pwd)
{
// 1. id 존재 여부
// 2. id, pwd 있음 / 없음
final String MYID = "admin";
final String MYPWD = "1234";
String result = ""; // 결과 값
if(MYID.equalsIgnoreCase(id)) // 대소문자 구분 없이 비교
{
if(MYPWD.equals(pwd)) // 대소문자 구분
{
result = "로그인 되었습니다. 메인 화면으로 이동합니다.";
}
else
{
result = "비밀번호가 틀립니다.";
}
}
else
{
result = "아이디가 존재하지 않습니다.";
}
return result;
}
static void process()
{
Scanner sc = new Scanner(System.in);
System.out.println("아이디 입력: ");
String id = sc.next();
System.out.println("비밀번호 입력: ");
String pwd = sc.next();
// 결과 값
String res = isLogin(id, pwd);
System.out.println(res);
}
public static void main(String[] args) {
process();
}
6.
boolean (리턴형)
사용자 → 년도 입력 (윤년 여부 확인) → 윤년 (true) → 윤년 아님 (false)
연도 입력: 2022
2022년은 윤년이 아닙니다.
static boolean isYear(int year)
{
boolean bCheck = false;
if((year%4==0 && year%100!=0 || (year%400==0))) // 윤년 조건
bCheck=true;
else // 안 써도 됨
bCheck=false;
return bCheck;
}
static void process()
{
// 연도 입력 받기
Scanner sc = new Scanner(System.in);
System.out.print("연도 입력: ");
int year = sc.nextInt();
boolean bCheck = isYear(year);
if(bCheck==true)
{
System.out.println(year + "년은 윤년입니다.");
}
else
{
System.out.println(year + "년은 윤년이 아닙니다. ");
}
}
public static void main(String[] args) {
process();
}
7.
Calendar
연도, 월, 일 → 무슨 요일
// 1. 입력
static int input(String str) // Scanner 재사용
{
Scanner sc = new Scanner(System.in);
System.out.println(str + " 입력: ");
int a = sc.nextInt();
return a;
}
// 2. 요일 계산
static void process()
{
int year = input("년도2");
int month = input("월3");
int day = input("일4");
System.out.println(year + "년도 " + month + "월 " + day + "일 ");
}
public static void main(String[] args) {
process();
}
Scanner 재사용
public static void main(String[] args) {
int kor = 메소드제작.input("국어")
int eng = 메소드제작.input("영어")
int math = 메소드제작.input("수학")
}
메소드 호출1
main() 진입...
aaa() 진입...: 변수 선언(요청 처리)
aaa() 기능 처리...: 연산/제어문 처리
aaa() 종료...: return 결과 값 전송
bbb() 진입...
bbb() 기능 처리...
bbb() 종료...
main() 종료
static void aaa()
{
System.out.println("aaa() 진입...: 변수 선언(요청 처리)");
System.out.println("aaa() 기능 처리...: 연산/제어문 처리");
System.out.println("aaa() 종료...: return 결과 값 전송");
return;
// 생략 가능, 컴파일러가 자동으로 추가
// void가 있는 경우만 가능
}
static void bbb()
{
System.out.println("bbb() 진입...");
System.out.println("bbb() 기능 처리...");
System.out.println("bbb() 종료...");
}
public static void main(String[] args) {
System.out.println("main() 진입...");
aaa();
bbb();
System.out.println("main() 종료 ");
}
static boolean ccc()
{
if()
return false; // 메소드 종료
else
return true; // 메소드 종료
}
매소드 호출2
알파벳 랜덤 출력
Q
G
g
static char randChar()
{
char c = (char)((int)(Math.random()*26)+65); // 알파벳 하나 출력
return c;
}
public static void main(String[] args) {
// 1. 그냥 출력
System.out.println(randChar());
// 2. 소문자로 변경 후 출력
char c = randChar();
System.out.println(c);
char res = (char)(c+32);
System.out.println(res);
}
메소드 호출3
로또 번호 랜덤 출력
[1, 9, 16, 17, 19, 34]
[10, 13, 26, 27, 33, 45]
[8, 13, 23, 23, 25, 42]
[3, 5, 11, 15, 27, 29]
[12, 21, 29, 30, 38, 38]
static int[] lotto()
{
int[] arr = new int[6];
for(int i=0; i<arr.length; i++)
{
arr[i]=(int)(Math.random()*45)+1;
}
return arr;
}
public static void main(String[] args) {
int[] arr = lotto();
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
arr = lotto();
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
arr = lotto();
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
arr = lotto();
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
arr = lotto();
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
메소드 활용1
2진법 출력
메소드 방법 추가 필요
2147483647
0~21억 4천 사이의 정수 입력: 2147483647
0111 1111 1111 1111 1111 1111 1111 1111
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
int[] binary = new int[32];
int index=31;
Scanner sc = new Scanner(System.in);
System.out.print("0~21억 4천 사이의 정수 입력: ");
int input = sc.nextInt();
while(true)
{
binary[index] = input%2;
input/=2;
if(input==0)
break;
index--;
}
// 출력
for(int i=0; i<binary.length; i++)
{
if(i%4==0 && i!=0)
System.out.print(" ");
System.out.print(binary[i]);
}
}
메소드 활용2
성적 처리
국어, 영어, 수학 점수 입력 → 총점, 평균, 학점
국어 입력:
90
영어 입력:
50
수학 입력:
100
국어 점수: 90
영어 점수: 50
수학 점수: 100
총점: 240
평균: 80.00
학점: B
// 점수 입력
static int scoreInput(String subject)
{
Scanner sc = new Scanner(System.in);
System.out.println(subject + " 입력: ");
int score = sc.nextInt();
return score;
}
// 총점
static int total(int kor, int eng, int math)
{
return kor + eng + math;
}
// 평균
static double avg(int total)
{
return total/3.0;
}
static char grade(double avg)
{
char c='A';
if(avg>=90)
c='A';
else if(avg>=80)
c='B';
else if(avg>=70)
c='C';
else if(avg>=60)
c='D';
else
c='F';
return c;
}
static void print(int kor, int eng, int math, int total, double avg, char c)
{
System.out.println("국어 점수: " + kor);
System.out.println("영어 점수: " + eng);
System.out.println("수학 점수: " + math);
System.out.println("총점: " + total);
System.out.printf("평균: %.2f\n", avg);
System.out.println("학점: " + c);
}
static void process()
{
// 점수 입력
int kor = scoreInput("국어");
int eng = scoreInput("영어");
int math = scoreInput("수학");
int total = total(kor, eng, math);
double avg = avg(total);
char c = grade(avg);
print(kor, eng, math, total, avg, c);
}
public static void main(String[] args) {
process();
}