2023. 1. 16. 23:59ㆍJAVA(자바)
▣ 제어문의 종류
▣ 3가지의 제어 구조(순차 구조, 선택 구조, 반복 구조)
1. 조건문
ㄱ. if문
(1) 정의
- if-else에서 조건식의 값이 참일 때 실행되는 블록을 then절(then clause)이라고 하고 조건식의 값이 참이 아닐 때 실행되는 블록을 else절(else clause)라고 한다.
- 조건에 따라 2개 이상의 문장이 실행되어 한다면 중괄호 {, }를 이용하여 문장을 그룹핑한다.(이것을 복합문 또는 블록이라고 한다)
(2) 조건 연산자
- 간단한 if-else문은 조건 연산자를 사용하여 표현할 수 있다
System.out.println(grade>=60 ? "합격" : "불합격");
(3) 중첩 if문
- if문도 하나의 문장이다 따라서 if-else 문의 문장 1이나 문장 2 자리에 다른 if 문이 들어가는 경우도 있다 이것을 중첩 if문이라고 한다
if(grade >= 80)
if(grade >= 90)
System.out.println("당신의 학점은 A입니다");
else
System.out.println("당신의 학점은 B입니다");
(4) 연속적인 if문
- 다중으로 분기되는 결정을 내려야 하는 경우, if 문 다음에 else if 문을 계속적으로 사용하는 것
if(grade >= 90)
System.out.println("당신의 학점은 A입니다");
else if(grade >= 80)
System.out.println("당신의 학점은 B입니다");
else if(grade >= 70)
System.out.println("당신의 학점은 C입니다");
else if(grade >=60)
System.out.println("당신의 학점은 D입니다");
else
System.out.println("당신의 학점은 F입니다");
ㄴ. switch문
(1) 정의
- 여러 개의 가능한 실행 경로 중에서 하나를 선택하는 데 사용됨
- switch 문은 switch 안에 들어있는 수식을 계산하여서 case 절과 비교한다
- 일치하는 case 절이 있으면 case 절의 문장들이 실행되다가 break 문에 도달하면 종료된다
- 만약 case 절에서 일치하는 정수값을 찾지 못하면 최종적으로 default 절이 실행된다
- switch 문은 정수형에 대해서만 작동된다
(2) 주의할 점
- break 문이 없으면 선택된 case 절 안의 문장들을 실행한 다음, 계속해서 다음 case 절의 문장들을 실행하게 된다
- default 문은 어떤 case 문과도 일치되지 않는 경우에 선택되어 실행된다.
- default 문은 없을 수도 있다.
- 가급적 default 문을 포함시키는 것이 좋다.
(3) switch 문에 문자열 사용
// 월 이름을 받아서 월 번호를 반환하는 프로그램을 작성
//JDK 7부터는 switch 문의 제어식으로 String 객체를 사용할 수 있다
// 실행결과 = 2
public class StringSwitch{
public static void main(String args[]){
String month = "february";
int monthNumber;
switch(month){
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march";
monthNumber = 3;
break;
default:
monthNumber = 0;
break;
}
System.out.println(monthNumber);
}
}
// 1년의 각 달의 일수를 출력하는 프로그램
// 특정 달이 입력되면 그 달의 일수를 출력
// 대부분의 달이 31일 또는 30일인 점을 고려
import java.util.*;
public class DaysInMonth{
public static void main(String args[]){
int month;
int year = 2009;
int days = 0;
System.out.println("일수를 알고 싶은 달을 입력하시오: ");
Scanner scan = new Scanner(System.in);
month = scan.nextInt();
switch(month){
case1: case3: case5: case7:
case8: case10: case12:
days = 31;
break;
case4: case6: case9: case11:
days = 30;
break;
case2:
if(((year % 4 == 0) && (year % 100 ! = 0)) || (year % 400 == 0)) //윤년
days = 29;
else //평년
days = 28;
break;
default:
System.out.println("월이 잘못 입력되었습니다");
break;
}
System.out.println("월의 날수는 " + days);
}
}
//실행결과
일수를 알고 싶은 달을 입력하시오: 6
월의 날수는 30
2. 반복문
ㄱ. while문
(1) 정의
- 조건이 만족되면 반복을 계속하는 구조
- 반복 횟수를 알 수 없고, 조건에 따라서 반복하는 경우에 사용
(2) 문법
while(조건식){
반복문장
}
// i가 5보다 작을 때까지 반복한다
public class LoopExample1{
public static void main(String args[]){
int i = 0;
while(i<5){
System.out.println("정수: " + i);
i++;
}
}
}
//실행결과
정수: 0
정수: 1
정수: 2
정수: 3
정수: 4
//구구단 출력하기
package while_loop;
import java.util.*;
public class Gugudan {
public static void main(String[] args) {
int n;
int i = 1;
System.out.println("구구단에서 출력하고 싶은 단을 입력하시오: ");
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
while(i<=9) {
System.out.println(n + "*" + i + "=" + n*i);
i++;
}
}
}
ㄴ. for문
(1) 정의
- for문은 일정한 횟수만큼 반복할 때 유용하게 사용됨
(2) 문법
for ( ; ; ) { //무한루프
...
//반복되는 문장
}
(3) 예제
// 1부터 10까지의 정수를 더하여 합을 구하는 프로그램
package for_loop;
import java.util.Iterator;
public class Sum {
public static void main(String[] args) {
int sum = 0;
for(int i = 0; i<=10; i++) {
sum += i;
System.out.println(sum);
}
}
}
//for문으로 팩토리얼 계산하기
package for_loop;
import java.util.Scanner;
public class Factorial {
public static void main(String[] args) {
long fact = 1;
int n;
System.out.println("정수를 입력하시오: ");
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
for(int i =1; i<=n; i++) {
fact = fact * i;
}
// for 반복문은 반복할 코드가 한 줄이라면 다음과 같이 중괄호는 생략가능!
System.out.printf("%d!은 %d입니다\n", n, fact);
}
}
※ for문에서 괄호를 생략할 수 있을까?
- 반복할 문장이 한 줄이라면 괄호를 생략할 수 있다!
for로 반복할 코드가 두 줄 이상이라면 반드시 중괄호로 묶어야 한다.
(4) 중첩 반복문
- 반복문 안에 다른 반복문이 실행될 수 있는데 그것을 중첩 반복문이라고 한다
- 외부에 위치하는 반복문을 외부 반복문이라고 하고 내부의 반복문을 내부 반복문이라고 한다
print, println, printf의 차이점
system.out.print
- 형식(int, float, double 등)에 구애받지 않는 문자를 그대로 출력하고 싶을 때 사용한다.
- 엔터 입력시 버퍼(buffer)에 \n(개행문자)는 포함 안됨.(엔터 누르는 순간 엔터는 입력 안됨)
- 그래서 줄바꿈 필요 없을 때 println말고 print 사용하면 된다.
system.out.println
- print와 동일하게 형식(int, float, double 등)에 구애받지 않는 문자를 그대로 출력하고 싶을 때 사용한다.
- 차이점은 엔터 입력시 버퍼(buffer)에 \n(개행문자)가 같이 들어간다. (엔터 누르는 순간 엔터도 입력된걸로 간주)
system.out.printf
print 와 println과 다르게
- 형식을 신경써야할 때 사용(int, long, float, double 등)
- 엔터 입력시 버퍼(buffer)에 \n(개행문자)는 포함 안됨.
5. break와 continue
(1) 정의
- 반복문에서 제어의 흐름을 변경할 수 있는 방법
(2) 기능
▣ break
- 반복 루프를 종료시킨다
- 레이블이 있을 수도 있고 없을 수도 있다
- 가장 안쪽의 반복 루프를 종료하는 데 사용된다
//사용자가 입력한 점수의 평균을 내는 프로그램
//사용자가 음수를 입력하면 break에 의해 반복 루프를 종료
package break_and_continue;
import java.util.Scanner;
public class Average {
public static void main(String[] args) {
int total = 0;
int count = 0;
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("점수를 입력하세요: ");
int grade = scan.nextInt();
if(grade < 0)
break;
total += grade;
count++;
}
System.out.println("평균은" + total / count); //break한 후 작동되는 문장
}
}
※ 만약 루프 전체를 종료하고 싶다면?
- 주의할 점은 레이블이 붙여진 문장을 종료시키는 것이지 제어의 흐름이 레이블로 이동하는 것이 아니다
- 제어의 흐름은 레이블이 붙여진 문장의 다음 문장으로 이동된다
- 제어의 흐름은 ㉮로 이동하는 것이 아니라 ㉮번 반복문을 종료시킨 후 ㉯위치에 옮겨진다
outer_loop: //㉮
while(true){
while(true) {
grade = scan.nextInt();
if( grade < 0)
break outer_loop;
}
...
}
//㉯
▣ continue
- 현재의 반복을 종료하고 다음 반복을 다시 시작하게 한다
- 레이블이 없으면 가장 안쪽 루프 몸체의 끝으로 점프하여서 루프를 제어하는 조건식을 다시 계산하게 된다
//문자열을 대상으로 반복하며 문자 'n'이 나타나는 횟수를 카운팅한다
//만약 현재의 문자가 n이 아니면 continue 문에 의하여 루프의 나머지 부분을 생략하고 다음 문자를 처리한다
//만약 문자가 n이면 카운트를 증가한다
package break_and_continue;
import java.util.Scanner;
public class ContinueTest {
public static void main(String[] args) {
String a = "I have no time to see news";
int count = 0;
for(int i = 0; i<a.length(); i++) {
if(a.charAt(i) == 'n') {
count++;
}
}
System.out.println("n의 갯수는" + count);
}
}
'JAVA(자바)' 카테고리의 다른 글
DB, Web Server 통합 개발 환경(IDE) (2) | 2023.02.01 |
---|---|
[JAVA 기초부터 훑어보기 PART2]07. 클래스와 객체 (0) | 2023.01.18 |
[JAVA 기초부터 훑어보기]05. 변수, 연산자, 수식 (0) | 2023.01.12 |
[JAVA 기초부터 훑어보기]04. 자바 프로그래밍 기초 (0) | 2023.01.12 |
[JAVA 기초부터 훑어보기]03. Eclipse(이클립스) 다뤄보기 (0) | 2023.01.10 |