1. 조건문 - if, switch
- 조건문은 조건식과 문장을 포함하는 블럭{}으로 구성되어 있으며, 조건식의 결과에 따라 실행할 문장이 달라져 프로그램의 실행흐름을 변경할 수 있다.
- if → 처리할 경우가 적은 경우
- switch → 처리할 경우가 많은 경우 but, if문보다 제약이 많음
1.1 if문
if (조건식) {
//조건식이 (true)일 때 수행될 문장들을 적는다.
}
블럭{}
if(score > 60)
{
}
//OR 둘 중에 취향에 맞는 것을 사용하면 된다.
if (score > 60){
}
if(score > 60)
System.out.println("합격입니다);
// 블럭 내의 문장이 하나 뿐일 떄는 둘 중에 하나와 같이 사용 할 ㅜㅅ 있다.
if(score > 60) System.out.println("합격입니다);
- 예제 4-2
import java.util.*;
class FlowEx2 {
public static void main(String[] args)
{
int input;
System.out.print("숫자를 하나 입력하세요");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine(); //화면을 통해 입력받은 내용을 temp에 저장
input = Integer.parseInt(tmp); //입력받은 문자열(tmp)을 숫자로 변환
if(input == 0)
{
System.out.println("입력하신 숫자는 0입니다");
}
if(input != 0)
{
System.out.println("입력하신 숫자는 0이 아닙니다");
System.out.println("입력하신 숫자는 %d입니다." , input);
}
}
}
1.2 if - else 문
if (조건식){
//조건식이 참(true)일 때 실행될 문장을 쓴다
}else{
//조건식이 거짓(false) 일 때 수행될 문장을 쓴다.
}
1.3 if-else if 문
if (조건식){
//조건식이 참(true)일 때 실행될 문장을 쓴다
}else if (조건식 2){
//조건식 2가 참일 때 수행될 문장을 쓴다.
}else{
//위의 어느 조건식도 만족하지 않을 대 수행될 문장들을 적는다.
}
1.4 중첩 if 문
if (조건식 1) {
//조건식 1의 연산결과가 true일 때 수행될 문장들을 적는다.
if (조건식 2) {
// 조건식 1과 조건식 2가 모두 true일 때 수행될 문장을 적는다
} else {
// 조건식 1이 true이고, 조건식2가 false일 때 수행되는 문장을 적는다
}
} else {
// 조건식 1이 false일 때 수행되는 문장을 적는다
}
1.5 switch문
if 문
- 조건식의 결과가 참 / 거짓 두가지 밖에 없음
- 조건식을 여러 개 추가하면 가독성 down, 처리속도 down
switch 문
- 조건식을 계산한다.
- 조건식의 결과와 일치하는 case문으로 이동한다.
- 이후의 문장들을 수행한다.
- break문이나 switch 문의 끝을 만나면 switch문 전체를 빠져나간다.
구조
switch (조건식) {
case 값1 :
//조건식의 결과가 값1과 같은 걍우 수행될 문장들
//...
break;
case 값2 :
//조건식의 결과가 값2과 같은 걍우 수행될 문장들
//...
break; // switch문을 벗어난다.
//...
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
}
- default문을 보통 마지막에 넣기 때문에 break 문을 쓰지 않아도 된다.
- break문을 빼먹을 경우 switch문의 종료지점까지 모든 문장을 수행한다
활용 예시 (break문 고의로 제거)
switch (level) {
case 3:
grantDelete(); // 삭제권한을 준다.
case 2:
grantWrite(); // 쓰기권한을 준다.
case 3:
grandRead(); // 읽기권한을 준다.
}
- 회원제로 운영되는 웹사이트에서 많이 쓰이는 코드 양식이다.
- level이 3일 경우 : case 3부터 switch문 종료까지 실행
- level이 2일 경우 : case 3 무시 후 case 2부터 switch문 종료까지 실행
switch문의 제약조건
public static void main(String[] args) {
int num, result ;
final int ONE - 1;
switch(result) {
case '1' : //가능. 문자 리터럴(정수 상수 49와 동일)
case ONE : //가능. 정수 상수
case "YES" : //가능. 문자열 리터럴. JDK 1.7부터 허용
case num : // 에러. 변수 사용 불가
case 1.0 : // 에러. 실수 사용 불가
가능한 형식
case 3:
case 4:
case 5:
System.out.println("현재의 계절은 봄입니다");
break;
//OR 둘중에 아무 형식으로 사용해도 가능하다.
case 3: case 4: case 5:
System.out.println("현재의 계절은 봄입니다");
break;
2. 반복문 - for, while, do-while
2.1 for문
for(int i = 1; i <= 5;i++){
System.out.println("I can do it");
}
→ 결과 : 블럭 내의 문장을 5번 출력한다.
- 변수 i의 값을 1로 저장한 후에 i 값을 반복마다 1씩 증가시킨다. i 값이 5를 넘으면 조건식이 거짓이 되며 반복을 마친다
for(초기화;조건식;증감식){
//수행될 문장;
}
초기화
- 반복문에 사용될 변수를 초기화 하는 부분
- 처음 한 번만 실행됨
- 둘 이상의 변수가 필요한 경우 콤마구분하여 초기화
- for(int i = 1, j = 0; i < 10; i ++)
조건식
- 참이면 계속 반복, 거짓이면 반복을 중단
- 조건식을 잘못 작성하면 블럭내의 문장이 수행되지 않거나 무한반복된다
증감식
- 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식
- i++, i +=2, i*=3 와 같은 다양한 연산자 사용
중첩 for문
for(int i = 1; i <= 5; i++){
System.out.println("**********");
}
//이 문장을 중첩 for문을 사요하면
for(int i = 1; i <= 5; i++){
for(int j =1; j<=10; j++){
System.out.print("*");
}
System.out.println();
}
- println - 자동으로 줄바꿈을 해줌
- print - 줄바꿈을 서식지정자를 통해 해주어야함
예제 4 -18 구구단 출력
class FlowEx2 {
public static void main(String[] args)
{
for(int i = 2; i < 10; i ++){
for(int j = 1; j < 10; j ++){
System.out.printf("%d x %d = %d%n", i, j, i*j);
}
}
}
}
향상된 for문(enhanced for statement)
- JDK 1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있다.
- 기존 방법
class FlowEx2 {
public static void main(String[] args)
{
int [] arr = {10, 20, 30, 40, 50};
for(int i = 0; i < arr.length; i++ ){
System.out.println(arr[i]);
}
}
}
- 새로운 방법
class FlowEx2 {
public static void main(String[] args)
{
int [] arr = {10, 20, 30, 40, 50};
for(int tmp : arr){ // for(타입 변수명 : 배열 또는 컬렉션)와 같은 형태
System.out.println(tmp);
}
}
}
2.2 while 문
while(조건식) {
//조건식 연상결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
- 조건식이 참(true)이면 블럭{}안으로 들어가고, 거짓(false) 이면, while문을 벗어난다.
- 블럭{}의 문장을 수행하고 다시 조건식으로 돌아간다.
for문과 while문의 비교
for(int i = 1; i <= 10; i++){
System.out.println(i);
}
int i = 1; // 초기화
while(i<=10) {
System.out.println(i);
i++;
}
while문의 조건식은 생략불가
while(){
... // 에러
}
while(true){
//조건식이 향상 참 -> 무한 반복
}
- 전위형
class FlowEx2 {
public static void main(String[] args)
{
int i = 5;
while(--i !=0){
System.out.println(i);
}
}
}
→ 4 3 2 1
- 후위형
class FlowEx2 {
public static void main(String[] args)
{
int i = 5;
while(--i !=0){
System.out.println(i);
}
}
}
→ 4 3 2 1 0
예제 4-25
import java.util.*;
class FlowEx2 {
public static void main(String[] args) {
int num = 0, sum = 0;
System.out.println("숫자를 입력하세요");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
num = Integer.parseInt(tmp);
while (num !=0)
{
sum += num % 10;
System.out.printf("sum=%3d num=%d%n", sum, num);
num /= 10;
}
System.out.println("각 자리수의 합:" +sum);
}
}
→input = 15684
sum= 4 num=15684 sum= 12 num=1568 sum= 18 num=156 sum= 23 num=15 sum= 24 num=1 각 자리수의 합:24
do - while문
do {
} while(조건식);
⇒ while문과 기본적인 구조는 비슷하나, {}식을 수행 후 조건식을 판단한다.
최소 1번의 수행은 보장한다
break문
continue문
2.6 이름 붙은 반복문
- 그냥 break
class FlowEx2 {
public static void main(String[] args) {
Loop1 : for(int i = 2; i <= 9;i++)
{
for(int j = 1; j <=9; j++)
{
if(j==5) break;
System.out.println(i + "*" + j + "=" + i*j);
}
}
}
}
→ 2단부터 9단까지 4줄씩 출력
- break Loop1
class FlowEx2 {
public static void main(String[] args) {
Loop1 : for(int i = 2; i <= 9;i++)
{
for(int j = 1; j <=9; j++)
{
if(j==5) break Loop1;
System.out.println(i + "*" + j + "=" + i*j);
}
}
}
}
→ 2단 4줄 실행 후 Loop1 자체를 종료
'Java > Java 스터디' 카테고리의 다른 글
Chapter 06. 객체지향 프로그래밍 I (part 1~2) (0) | 2023.02.21 |
---|---|
Chapter 05. 배열 (0) | 2023.02.15 |
Chapter 03. 연산자 (0) | 2023.01.29 |
Chapter 02. 변수 (1) | 2023.01.12 |
Chapter 01. 자바 스터디 시작 (1) | 2023.01.03 |