-
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