수업

+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();
	}