ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL #3 - Java 기초 등
    프로그래밍/TIL(국비과정) 2020. 3. 28. 20:53

     

    #switch 문

    if문은 우리가 조건식을 통해 true면 실행, false 면 실행 안하는 경우였지

    만 

    switch에서는 변수를 하나 선택해서 

    그 변수가 나올 수 있는 가능한 값 ( =케이스)를 만들어서 

    그 변수가 해당 케이스를 만족하게 되면 어떤 것을 실행할지 적어주게 된다. 

    아래의 코드를 보자. 

    public class Ex01Swtich01 {
    
    	public static void main(String[] args) {
    		int num = 1;
    		// if(num > 0)
    		switch (num) {
    
    		case 1:
    			System.out.println("1 입니다");
    			break;
    			// 만약 break가 생략이 되면 
    			// 변수가 만족하는 case 코드부터 
    			// break가 나올 때까지 아래를 모두 실행한다.
    		case 2:
    			System.out.println("2 입니다");
    			break;
    		case 3:
    			System.out.println("3 입니다");
    			break;
    		// 이클립스 자동 들여쓰기는 ctrl + shift + f
    		default:
    			System.out.println("그 외입니다");
    			break;
    		}
    
    	}
    
    }

     

    switch 안에 num 변수가 들어가 각 case를 거치며 동일한 정수를 찾는다. 

    그리고 만약 동일한 case를 찾으면 그곳에서 해당 코드를 작동하고 break를 만나 종료한다. 

    만약 break가 없다면 동일한 case와 그 case 밑에 있는 모든 코드를 다 거친 후 종료한다. 

     

    #For 문

    반복문은 조건식을 test해서 true가 나오면 반복되는 것이다. 

     

    반복문은 2+1이 있다. 

    for, while, forEach.

    for문은 정확하게 몇 회를 반복하라는 의미가 강하다. 

    while은 이 조건식이 true 인 동안 계속 반복한다. 

    forEach의 경우에는 배열이나 ArrayList 같이 똑같은 자료형이 모여있는 애들을 출력할 때 좋다. 

    public class Ex04For {
    
    	public static void main(String[] args) {
    		// for 문
    		for(int i = 0; i < 5; i++) {
    			// i의 현재값 : 0
    			// 여기서 i가 5보다 작을 동안 코드가 작동(1씩 증가)해서 
    			// i가 4가 되면 for문은 종료된다. 
    			System.out.println(i);
    		}
    		
    		// 또 우리가 안에 넣은 i는 굳이 i가 아니어도 된다. 
    		// 초기화 값이나 조건식 값도 변수를 넣어줄 수도 있다.
    		int standard = 10;
    		int startingNum = 6; 
    		for(int position = startingNum; position <= standard; position++) {
    			System.out.println("standard: " + standard);
    			System.out.println("startingNumber : " + startingNum);
    			System.out.println("position : " + position);
    		}
    		// 하지만 전통적으로 for문에 선언되는 변수는 i, j, k 순이다. 
    		
    	}
    
    }

     

    첫번째 for문을 보면, 

    for 문 안에 i 변수가 0일 때 부터 시작해서 i++를 만나 1씩 증가되며 5보다 커질 때까지 for문 안의 코드를 반복한다. 

    만약 i가 4가 되면 그 때 for 문은 종료한다. 

    또한 여담으로 for문 안의 변수는 굳이 i이지 않아도 된다고 한다. 

     

    # 팩토리얼을 구하는 프로그램

    팩토리얼이란 1부터 n까지의 곱을 말한다. 

    import java.util.Scanner;
    
    public class Ex06For {
    
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    
    		int n = scan.nextInt();
    		int result = 1;
    		// 15!은 int의 범위를 벗어나게 된다.
    		// 따라서 15이상의 값을 넣으면 경고 메세지 출력해주자
    		if (n < 15) {
    			for (int i = 1; i <= n; i++) {
    				result *= i;
    				System.out.println(result);
    			}
    		} else {
    			System.out.println("범위를 벗어난 숫자입니다. ");
    
    		}
    		scan.close();
    
    	}
    
    }

    먼저 n의 값을 사용자로 부터 입력받고, 

    곱셈이므로 계산 결과를 0이 아닌 1로 초기화 시킨다 ( 0으로 초기화 할 경우 곱셈이기 때문에 어떤 수를 곱해도 0이 나옴)

    int 계산은 15를 넘어가면 범위를 벗어나 틀린 값이 나오기 때문에 입력받는 값을 15미만으로 설정한다. 

    그리고 입력받은 값 n의 범위를 벗어나지 않는 동안 for문이 돌아가게 한다. 

    for 문 안에는 result *= i가 있는데, 

    이는 풀어 쓰면 result = result * i이다. 

    result는 1부터 시작해서 1씩 증가하는 i 값과 곱해진다. 

     

    #다중 for문

    for문 안에 또 for문이 있는 형태를 말한다. 

    가장 바깥의 for문은 행이 되고 안쪽의 for문은 열이 된다. 

    public class Ex07NestedForLoop {
    
    	public static void main(String[] args) {
    		// 다중 for loop
    		for(int i = 1; i <= 5; i++) {
    			for(int k = 100; k <= 105; k++) {
    				System.out.print("i의 값 : " + i);
    				System.out.println(", k의 값 : " + k);
    			}
    		}
    
    	}
    
    }

     

    #while 문

    public class Ex11 {
    
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		
    
    		System.out.print("점수를 입력해주세요 ");
    		int score = scan.nextInt();
    		
    		while(score <= 0 || score >= 100) {
    			// score가 0보다 작거나(or) 100보다 크면 올바르지 않음. 
    			System.out.println("점수가 올바르지 않습니다. 다시 입력해주세요 ");
    			score = scan.nextInt();
    		}
    		
    		if(score >= 90) {
    			System.out.println('A');
    		}else if(score >= 80) {
    			System.out.println('B');
    		}else if(score >= 70) {
    			System.out.println('C');
    		}else if(score >= 60) {
    			System.out.println('D');
    		}else {
    			System.out.println('F');
    		}
    		
    		
    
    	}
    
    }

     

    위의 while문을 보면 사용자로 부터 score를 입력받아 score가 0보다 작거나 100보다 큰 

    범위에 맞지 않은 score를 받을 경우 true가 되어 while 문 안의 코드를 반복한다. 

    제대로 된 score를 입력받아 false가 될 때까지 반복되는 식이다. 

     

    이런 while문은 멈출 경우가 없을 시 무한루프에 빠지게 된다. 

    while문이 제약없이 계속 true를 나타내게 된다면 while문이 멈출 수 없어 무한정 돌아간다는 의미이다. 

     

    #메소드 

    메소드란 어떤 값을 주고 그 값을 연산해서 해당 메소드가 리턴된 곳으로 그 결과값을 보내주는 기능이다. 

    C에서는 function 혹은 함수라고 부르지만 Java에서는 method라고 부른다 

     

    - 메소드 선언

    *(접근제한자 static) returnType name(parameter)

    접근제한자 : access modifier

    접근제한자는 해당 메소드 혹은 필드가 어디서 접근이 가능한지 범위를 적어준다. 

    더보기

    public < protected < default < private

    public : 패키지 외/내부, 다른 클래스 어디서든 호출 가능

    protected : 같은 패키지와 상속받은 자식클래스들 호출 가능

    default : 같은 패키지 내부에서만 호출 가능, 만약 아무것도 적어주지 않으면 자동으로 적용됨

    private : 같은 클래스만 접근가능 

     

    *static : 해당 메소드를 메소드 영역에 등록하는 것 

    만약 static 메소드가 다른 메소드를 호출하게 되면 그 다른 메소드를 객체 생성해서 호출하는게 아니면 그 다른 메소드도 static이 붙어야 한다

     

    *return Type : 해당 메소드가 끝나고 호출 된 곳으로 보내줄 값의 dataType 

    만약 우리가 정수 2개를 줘서 그 정수들의 합을 구하는 메소드가 있다고 한다면 해당 메소드의 타입은?

    >> Int

    하지만 만약 해당 메소드가 아무런 값도 호출된 곳으로 리턴하지 않는다면 void라고 적어줘야한다. 

     

    *name : 소문자 + 동사 

    nextInt(), nextLine(), print()...

     

    *parameter : 이 메소드가 호출될 때 외부에서 보내주는 값으로써 dataType name으로 이뤄져 있다. 

    만약 해당 메소드가 호출될 때 아무런 값도 필요없다면 아무것도 적어주지 않아도 된다. 

    또, 파라미터는 일종의 변수 취급이 되어 해당 메소드 내부에서는 똑같은 이름의 변수를 생성할 수 없다. 

    그리고 메소드를 호출한 곳에서는 굳이 같은 이름으로 값을 보내줄 필요까진 없다. 

     

    # 더하기를 해주는 메소드 만들기!

    public class Ex16Method {
    	
    	public static void main(String[] args) {
    		// Ex15GradeBook.main(args);
    		int userNumber1 = 10; 
    		int userNumber2 = 22;
    		// 메소드를 호출 할 때는 
    		// 파라미터를 메소드에 선언한 그대로 적어줘여한다. 
    		// 만약 add(int a, double b)라고 했는데 
    		// add(5, 10) 하면 에러다. 
    		// 10은 int이지 double이 아니기 때문에...
    		
    		int result = add(userNumber1, userNumber2);
    		// 보내준 값 userNumber1, userNumber2 지만
    		// 메소드 내부에서는 a와 b로 이름을 바꾼다. 
    		// 근데 일종의 임시 이름으로 쓰이는 거지 실제 이름이 바뀐것은 아니다. 
    		// 따라서 우리가 값을 보내줄 때에는 굳이 이름이 안 똑같아도 된다. 
    		
    		System.out.println(subtract(userNumber1, userNumber2));
    		System.out.println(multiply(add(1,2), subtract(2,3)));
    		System.out.println(result);
    		
    	}
    	
    	public static int add(int a, int b) {
    		// 리턴은 return 이라는 명령어를 통해서 한다. 
    		return a + b;
    	}
    	// - * / 까지 만들기 
    	
    	public static int subtract(int a, int b) {
    		return a - b;
    	}
    	
    	public static int multiply(int a, int b) {
    		return a * b;
    	}
    	
    	public static int division(int a, int b) {
    		return a / b;
    	}
    	
    	public static boolean validate(int score) {
    		// return의 특징은 
    		// 만나는 순간 해당 메소드가 곧장 종료가 된다는 것이다. 
    		if(score > 100 || score < 0) {
    			return true; 
    			// 여기서 true를 만나면 메소드는 더 나가지 않고 종료된다.. 
    		}
    		return false;
    	}
    
    }

    '프로그래밍 > TIL(국비과정)' 카테고리의 다른 글

    TIL #6 - 배열 활용 (1)  (0) 2020.04.01
    TIL #5 - 배열  (0) 2020.03.31
    TIL #4 - 메소드, 배열 등  (0) 2020.03.30
    TIL #2 - Java 기초 등  (0) 2020.03.26
    TIL #1 - Java 설치 및 기초 등  (0) 2020.03.26

    댓글

Designed by Tistory.