반응형
분기와 루프
- 구조적으로 프로그래밍을 지원하는 if (분기), for (루프, 반복)
- 과거에는 goto라는 분기문을 사용했다. 특정 라인으로 바로 점프할 수 있지만 코드가 복잡해지면서 코드의 유지보수가 힘들어짐. 이것을 수학적으로 증명한 것이 구조적 프로그래밍.
- 문법은 C++과 자바스크립트, 파이썬, Kotlin, Swift와 유사.
분기, Branching
if문은 괄호 안에 조건이 들어가고, 그 뒤에 한 문장 또는 중괄호로 감싼 문장이 옴.
if (boolean 혹은 condition){
statement;
}
비교 연산자의 결과 값은 모두 boolean 타입
- 크다 : x>y
- 작다 : x<y
- 같다 : x==y
- 다르다 : x!=y
- 크거나 같다 : x>=y
- 작거나 같다 : x<=y
=> 이런 비교연산자의 결과값은 항상 참이나 거짓, boolean타입이다.
<예시 1>
age변수의 데이터를 가지고 성인인지 아닌지 여부 판별하는 코드
int age = 40;
boolean isAdult = age>19;
// => isAdult에는 True가 저장되게 됨.
if (isAdult) {
}
<예시 2>
학생들의 평균 성적을 가지고 등급을 매기는 코드
double average = 95.5;
String grade = “”;
if (average >= 90) {
grade = “A”;
}
else if (average >=80) {
grade = “B”;
}
else if (average >=70) {
grade = “C”;
}
else {
grade = “F”;
}
논리 연산자
- 그리고 (AND) : TRUE&&TRUE : 앞 뒤 boolean 값이 모두 true일때 true
- 또는 (OR) : TRUE || TRUE : 앞 뒤 boolean 값 중 하나라도 true일 때 true
- 부정 (NOT) : !(TRUE or FALSE) : boolean 값을 반전 (부정)
논리연산자 문법
boolean result = (값 비교연산자 값) (논리연산자) (값 비교연산자 값)
<예시 1>
double average = 91.6;
int dayoff = 0;
boolean result = (average>=90)&&(dayoff==0)
// TRUE && TRUE임으로 result엔 TRUE가 할당됨.
if (result) {
}
문자열 비교
- JAVA의 비교연산은 기본타입에만 사용 가능
- 문자열(String)은 Java의 기본타입이 아님.
문자열의 비교 연산
<예시 1>
String name = “Hong gildong”
if (name == “Hong gildong”) // => 문자열에선 == 연산자 사용 안하고, 이렇게 되면 False 반환.
if (name.equals(“Hong gildong”) //=> 문자열에선 equals() 메소드 사용.
- 문자열의 첫 부분만 검사하는 방법은 startsWith() 사용
- 문자열의 끝 부분만 검사하는 방법은 endsWith() 사용
<예시 2>
String welcomeMessage = “…”;
if (welcomeMessage.startsWith (“Lorem Ipsum”) ) {
}
if (welcomeMessage.endsWith (“Lorem Ipsum”) ) {
}
switch : 제한된 개수의 상수값을 기준으로 표현식을 검사할 때 사용
분기를 표현하는 다른 방법
<예시 1>
int x = 7;
switch(x) {
case 1 : case 5 : case 7 :
System.out.println(“RED”);
break;
case 2 :
System.out.println(“BLUE”);
break;
case 3 :
System.out.println(“GREEN”);
break;
default :
System.out.println(“NONE”);
}
=> 편해보이지만, 주의할점은 잘못쓰면 프로그램이 작동 안함. 또한, 각 케이스별로 break를 걸어줘야 함. 안걸어주면 계속 다음 케이스로 넘어감.
=> 자바에선 원래 switch를 많이 안썼는데, 자바7부터 x값에 String 타입도 올 수 있게되며 많이 쓰임.
실습 코드
package java9Politec;
import java.util.Scanner;
public class Lesson03_ControlFlow {
public void ifElse(int age) {
// Scanner로 입력받은 값은 무조건 문자열이므로 인트형으로 바꿔줘야 함.
if (age>=20) {
System.out.println("adult");
}
else {
System.out.println("not adult");
}
}
public void ifAndOr(int age) {
// 비교연산자와 논리연산자를 같이 사용해서 만들어보자.
if (age>=20 && age<40) {
System.out.println("청년");
} else if (age>40 && age<60) {
System.out.println("장년");
} else {
System.out.println("etc");
}
}
// switch문 활용하기. 범위가 아니라 정확한 값을 가지고 분기할 때 편리하다.
public void swItch(String color) {
switch (color) {
case "red":
System.out.println("you're energetic.");
break;
case "blue":
System.out.println("you're emotional.");
break;
case "green": case "yellow":
System.out.println("I don't know.");
break;
default:
System.out.println("I can't know.");
}
// => break를 걸지 않으면 모든 케이스가 다 출력됨.
// java7부터 switch문에 String을 쓸 수 있게 되면서 많이 쓰이기 시작했다.
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner fromUser = new Scanner(System.in);
System.out.print("Put your age");
String theAge = fromUser.next();
int age = Integer.parseInt(theAge);
Scanner in = new Scanner(System.in);
System.out.println("Your favorite color");
String color = in.next();
}
}
반응형
'Programming > Java' 카테고리의 다른 글
[Java9 프로그래밍] 07. 함수(메소드) (0) | 2020.03.13 |
---|---|
[Java9 프로그래밍] 05-06. 데이터 구조, ArrayList, Map (0) | 2020.03.13 |
[Java9 프로그래밍] 03. 변수와 타입의 이해 2 (0) | 2020.03.13 |
[Java9 프로그래밍] 02. 변수와 타입의 이해 1 (0) | 2020.03.13 |
[Java9 프로그래밍] 01. 자바 시작하기 (0) | 2020.03.13 |