기본적으로 프로그램 진행은 순차적으로 진행
단, 이 순차적인 흐름을 바꾸고자 한다면 제어문 이라는걸 이용해서 직접 제어 가능
선택적으로 실행시키고자 할 때 => 조건문
반복적으로 실행시키고자 할 때 => 반복문
그 외의 흐름을 제어 => 분기문
조건문
"조건식"을 통해 참이냐 거짓이냐를 판단해서 참일 경우 그에 해당하는 코드 실행
조건식의 결과 true/ false 여야 한다 !!
보통 조건식에서는 비교연산자 (대소, 동등), 논리연산자( &&, ||)를 주로 사용
조건문은 크게 if문과 switch문으로 나뉨 !!
1. 단독 if 문
[표현법]
if(조건식) {
.. 실행시키고자 하는 코드 ..
}
조건식은 if랑 친하다!!
=> 조건식이 참(true)일 경우 => 중괄호 블럭 안의 코드 실행
=> 조건식이 거짓(false)일 경우 => 중괄호 블럭 안의 코드 무시하고 넘어감
public void method1() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나 입력 : ");
int num = sc.nextInt();
if(num > 0) {
System.out.println("양수다.");
}
if(num <=0) {
System.out.println("양수가 아니다.");
}
sc.close();
}
2. if - else 문
[표현법]
if(조건식){
..실행코드1..
}else {
..실행코드2..
}
조건식의 결과가 참(true)일 경우 실행코드1 수행 후 if-else문 빠져나감
단, 결과가 거짓(false)일 경우 무조건 실행코드2 수행
public void method2() {
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나 입력 : ");
int num = sc.nextInt();
if(num > 0) {
System.out.println("양수다.");
}else {
System.out.println("양수가 아니다.");
}
sc.close();
}
3. if -else if - else 문
같은 비교대상으로 여러개의 조건을 제시해야 할 경우
[표현식]
if(조건식){
.. 실행코드1 ..
}else if(조건식) {
.. 실행코드2 ..
}else if{
.. 실행코드3 ..
}else { // 생략가능
위의 조건들이 다 false 경우 실행할 코드
}
public void method3() {
Scanner sc = new Scanner(System.in);
System.out.print("나이 입력 : ");
int num = sc.nextInt();
if(num > 0) {
System.out.println("양수다.");
}else if(num == 0) {
System.out.println("0이다.");
}else {
System.out.println("음수다.");
}
sc.close();
}
예제)
// 사용자에게 나이를 입력받아 어린이 청소년 성인
// 13세 이하 : 어린이
// 13세 초과 19세 이하 : 청소년
// 19세 초과 : 성인
public void method4() {
Scanner sc = new Scanner(System.in);
System.out.print("나이를 입력하세요. : ");
int age = sc.nextInt();
if (age <= 13) {
System.out.println("어린이");
}else if(age <= 19) { // 13살 보다는 많고 19살 이하
System.out.println("청소년");
}else {
System.out.println("성인");
}
sc.close();
}
더 좋은 방법 ( sysout 을 줄여서 시스템에 부하가 적다.)
public void method4() {
Scanner sc = new Scanner(System.in);
System.out.print("나이를 입력하세요. : ");
int age = sc.nextInt();
String result; // 더 좋은 방법 시스템에 부하가 적다.
if (age <= 13) {
result = "어린이";
}else if(age <= 19) { // 13살 보다는 많고 19살 이하
result = "청소년";
}else {
result = "성인";
}
System.out.println(result);
sc.close();
}
예제)
// 이름, 성별 입력
// 성별 M(m), F(f) 입력하면 남학생이다. 여학생이다.
// ex) 차은우님은 남학생 입니다.
// 단, 성별을 잘못입력하면 성별을 잘못입력하셨습니다.
public void method5() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 : ");
String name = sc.nextLine();
System.out.print("성별(M/F) : ");
char gender = sc.nextLine().charAt(0);
String result = ""; // 변수를 미리 세팅할때 반드시 초기화 해놓는 습관을 들이자.
if ((gender == 'M' || gender == 'm')){
result = "남학생";
}else if((gender == 'F' || gender == 'f')) {
result = "여학생";
}else {
System.out.println("성별을 잘못입력하셨습니다.");
sc.close();
return; // 해당 이 메소드 자체를 빠져나가는 구문
}
System.out.println(name + "님은 " + result + "입니다.");
sc.close();
특이케이스
이 코드는 결과가 제대로 나오지 않는다.
public void method6() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 입력 : ");
String name = sc.nextLine();
if(name == "차은우") {
System.out.println("차은우님 반갑습니다.");
}else {
System.out.println("차은우님이 아니신가봐요...");
}
sc.close();
}
기본 자료형 : boolean(1), byte(1), short(2), int(4), long(8), float(4), double(8), char(2) // 전부 소문자로 시작
참조 자료형 : String // 대문자로 시작
기본자료형들 끼리 동등 비교시에는 ==, != 사용가능 (정상적을 비교됨)
단, 참조자료형은 동등비교시, != 사용시 정상적을 비교가 안됨.
=> equals() 메소드를 이용해서 비교해야됨.
[표현법] 문자열.equals(문자열);
==를 .equals 로 수정하면 결과 값이 잘 나온다.
public void method6() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 입력 : ");
String name = sc.nextLine();
if(name.equals("차은우")) {
System.out.println("차은우님 반갑습니다.");
}else {
System.out.println("차은우님이 아니신가봐요...");
}
sc.close();
}