기본문법활용
문법간의 중첩 구조
조건문, 반복문을 구성하는 블록 {}
안에 다른 문법 표현이 포함될 수 있다.
자주 사용되는 패턴으론느 if-if
, if-for
, for-if
, for-for
가 있다.
if-if 구조
특정 조건이 참으로 판단되어 블록안에 진입했을 때, 상세조건을 판별하는 구조.
if (조건) {
if (조건) {
...
} else {
...
}
} else {
if(조건) {
...
} else {
...
}
}
IfNesting.java
public class IfNesting {
public static void main(String[] args) {
int point = 78;
if (point > 70 && point <= 80) {
if (point > 77) {
System.out.println("C+ 입니다.");
} else if (point < 74) {
System.out.println("C- 입니다.");
} else {
System.out.println("C0 입니다.");
}
}
}
}
출력결과
C+ 입니다.
if-for 구조
특정 조건이 참으로 판단되어 블록안에 진입했을때, 반복을 수행하는 구조.
public class IfFor {
public static void main(String[] args) {
int k = 10;
if (k > 1 && k < 10) {
for (int i = 1; i<10; i++){
System.out.printf("%d x %d = %d\n", k , i, k*i);
}
} else {
System.out.println("2~9 사이의 수식만 출력합니다.");
}
}
}
출력결과
2~9 사이의 수식만 출력합니다.
for-if 구조
반복문 안에서 매 반복 수행시마다 조건을 판별한다. 주로 반복문에 사용되는 조건값에 대한 조건 판별을 위해 사용된다.
ForIf.java
public class ForIf {
public static void main(String[] args) {
int max = 10;
int oddSum = 0;
int evenSum = 0;
for(int i =1; i<= max; i++) {
if (i % 2 == 0) {
System.out.printf("%d는 짝수\n", i);
evenSum += 1;
} else {
System.out.printf("%d는 홀수\n", i);
oddSum += 1;
}
}
System.out.printf("1~%d까지 홀수들의 합: %d\n", max, oddSum);
System.out.printf("1~%d까지 짝수들의 합: %d]n", max, evenSum);
}
}
출력결과
1는 홀수
2는 짝수
3는 홀수
4는 짝수
5는 홀수
6는 짝수
7는 홀수
8는 짝수
9는 홀수
10는 짝수
1~10까지 홀수들의 합: 5
CommonMultiple.java
어떤 수 i가 x로 나누어도 나머지가 0이고 y로 나누어도 나머지가 0일 때 이 수를 x와 y의 공배수라고 한다.
2부터 9사이의 두 개의 정수 x, y를 입력받아 1부터 100까지의 범위 안에서 x와 y의 공배수를 모두 출력하고 공배수의 총합인 sum값을 구해 출력하시오.
import java.util.Scanner;
public class CommonMultiple {
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
System.out.print("2~9사이의 x를 입력하세요:");
int x = read.nextInt();
System.out.print("2~9사시의 y를 입력하세요:");
int y = read.nextInt();
int i =1;
int sum = 0;
for(i=1; i<=100; i++){
if(i%x == 0){
if(i % y == 0){
sum += i;
System.out.println(i);
}
}
}
System.out.printf("공배수의 총 합: %d\n", sum);
}
}
출력결과
2~9사이의 x를 입력하세요3
2~9사시의 y를 입력하세요5
15
30
45
60
75
90
공배수의 총 합: 315
ForFor.java
public class ForFor {
public static void main(String[] args) {
for(int i=0; i<3; i++){
System.out.println("i에 대한 반복 수행 시작 >>i=" + i);
for(int j=0; j<5; j++){
System.out.printf("\t-=%d, j=%d\n", i, j);
}
System.out.println("i에 대한 반복 수행 종료 >>i=" + i);
}
}
}
출력결과
실습 참조
LastNone.java
public class LastNone {
public static void main(String[] args) {
for (int i=0; i<10; i++) {
// 조건값이 마지막이 아닌 경우만 실행하도록 if문을 구성
// [공식1] 조건식이 "변수 < 최대값" 인 경우 -> 변수 + 1 < 최대값
// [공식2] 조건식이 "변수 <= 최대값" 인 경우 -> 변수 < 최대값
if (i + 1 < 10) {
System.out.println("i=" + i);
}
}
}
}
출력결과
i=0
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
Gugudan.java
2단부터 9단까지의 모든 구구단 수식을 출력하세요.
마지막 9단을 제외한 모든단은 종료시마다 구분선 (---------------
)을 출력하도록 구현하세요
public class Gugudan {
public static void main(String[] args) {
for(int i=1; i<10; i++){ // 1단 부터 9단까지 지정을 해주는 변수값
for(int j = 1; j<10; j++) { // 한 단에서 1~9까지 곱해주는 변수값
System.out.printf("%d X %d = %d\n", i, j, i*j); // 구구단을 출력해준다.
}
if(i+1<10){ //각 단마다 나눠주고 9단일때만 출력X
System.out.println("--------------------------");
}
}
}
}
출력결과
실습참조
IncreaseCondition.java
1부터 5까지의 범위를 갖는 반복문 안에 자식 반복문을 추가하고 자식 반복문이 부모 반복문의 반복회차 만큼 실행되도록 하기
public class IncreaseCondition{
public static void main(String[] args) {
for(int i=0; i<5; i++){
for(int j=0; j<j+1; j++){
System.out.printf("i=%d, j=%d\n", i, j);
}
if (i + 1 < 5){
System.out.println("--------------");
}
}
}
}
출력결과
실습참조
StarAsc.java
아래의 출력결과가 표시되도록 구현하세요.
변수는 반복문에 사용되는 i, j 외에 사용할 수 없으며 출력문은
System.out.print()
만을 사용해야 합니다.
public class StarAsc {
public static void main(String[] args) {
int i;
int j;
for(i=0; i<7; i++){ // i를 7번 반복시킨다
for(j=0; j<i+1; j++){ // j를 i 값만큼 반복시켜 별을 찍는다
System.out.print("*");
}
// if(i < 7){ // j의 반복을 끝내고 나와서 i가 7보다 작다면 한칸내린
System.out.print("\n"); // 주석처리한부분도 한가지의 방법
//}
}
}
}
출력결과
*
**
#05. 변수의 유효성 범위
변수는 자신이 최초로 선언된 블록 {}
보다 바깥 블록에서는 인식되지 못하고 자신이 선언된 블록보다 안쪽 블록에서는 식별 가능하다.
ValueRange1.java
public class ValueRange1{
public static void main(String[] args) {
if (true) {
int num = 100;
for (int i =0; i<5; i++) {
//선언된 위치보다 하위 블록에서는 식별 가능
num++;
}
}
// 선언된 위치보다 바깥 블록이므로 에러
System.out.println(num);
// num은 if를 벗어난 곳에서는 식별되지 않는다
}
}
출력결과
ValueRange1.java:13: error: cannot find symbol
System.out.println(num);
// num을 인식하지 못한다.
ValueRange2.java
public class ValueRange2 {
public static void main(String[] args) {
if (true) {
int num = 100;
for (int i =0; i<5; i++) {
//선언된 위치보다 하위 블록에서는 식별 가능
num++;
}
}
// 선언된 위치보다 바깥 블록이므로 에러
System.out.println(i);
// i는 if를 벗어난 곳에서는 식별되지 않는다
}
}
출력결과
ValueRange2.java:13: error: cannot find symbol
System.out.println(i);
// for문을 벗어난 i를 인식하지 못한다.
3) 서로 다른 블록간의 변수 중복 선언
선언된 위치를 기준을 ㅗ바깥 블록에서는 그 변수를 인식하지 못하기 때문에 서로 다른 블록간에는 중복 선언이 가능하다.
ValueRange3.java
public class ValueRange3{
public static void main(String[] args) {
int target = 100;
if(target == 100) {
// 아래에서 선언된 num은 if 블록 밖에서는 인식되지 않는다.
int num = target + 100;
System.out.println(num);
} else {
// 아래에서 선어된 num은 else 블록 밖에서는 인식되지 않는다.
int num = target - 100;
System.out.println(num);
}
}
}
출력결과
200
1) 무한루프
반복문의 조건식 설정상의 오류로 반복문이 종료되지 않고 영원히 실행되는 상태.
반복문이 실행되는 동안은 순간적으로 CPU의 점유율이 100%까지 올라가기 때문에 다른 프로그램들이 컴퓨터의 하드웨어 자원을 사용하지 못하게 되어 젠체적으로 컴퓨터의 성능 저하가 발생한다.
그러므로 무한루프에 바지지 않도록 주의해야 한다.
InfiniteLoop1.java
public class InfiniteLoop1 {
public static void main(String[] args) {
int num = 1;
while(true) {
System.out.println("Hello World >> " + num);
num++;
}
}
}
출력결과
Sublime에서는 Tools > Cancel Build
메뉴를 사용하여 실행중인 자바프로그램을 종료해야 한다.
단순히 Esc
만 누를 경우 자바프로그램이 종료되지 않은 상태로 출력창만 닫힌다.
계속 1씩 무한루프로 더해진다
InfiniteLoop2.java
1씩 증가해서 언젠가는 10을 초과해야 하는 i캆이 1씩 감소하여 점점 10보다 더 작아지기 때문에 무한루프에 빠지게 된다.
public class InfiniteLoop2 {
public static void main(String[] args) {
for (int i = 0; i<10; i--)
System.out.println("i= " + i);
}
}
출력결과
...생략...
i=-102396
i=-102397
i=-102398
...생략...
3) break
반복문(while, for)안에서 반복문을 강제로 중단시키는 기능을 한다.
반복을 몇 번 수행해야 할지 가늠할 수 없을때 의도적을 무한루프를 수행시키기도 하는데 이 경우 특정조건이 충족되면 반복을 중단하도록 설정할 수 있다.
Break.java
두 배씩 증가하는 값이 500보다 커지기 위해서는 총 몇 번 곱해야 하는지 카운트하기
public class Break{
public static void main(String[] args) {
int times = 1; // 2배씩 커지는 값을 저장할 변수
int count = 0; // 반복 횟수를 저장할 변수
while(true) {
count++; // 반복을 수행한 횟수를 1증가 시킨다.
times *= 2; // 2배 증가
System.out.println(times);
if(times > 500) {
break;
}
}
System.out.println("총 " + count + "회 수행했습니다.");
}
}
출력결과
2
4
8
16
32
64
128
256
512
총 9회 수행했습니다.
3) continue
반복문 안에서 현재 회차를 중단하고 다음 회차로 넘어가게 한다.
- while문 : 조건식으로 강제 이동한다.
- for문 : 증감식으로 강제 이동ㅎ나다.
Continue1.java
홀수만 출력하는 프로그램
public class Continue1{
public static void main(String[] args) {
int num = 0;
while( num < 10){
num++;
if (num % 2 ==0) {
continue; //짝수인 경우 조건식으로 강제 이동
}
System.out.println(num);
}
}
}
출력결과
1
3
5
7
9
사실 아래와 같이 코딩하는 것이 더 간결하기 때문에 잘 사용되지 않는다.
public class Continue1{
public static void main(String[] args) {
int num = 0;
while( num < 10){
num++;
if (num % 2 !=0) {
System.out.println(num);
}//홀수면 출력
}
}
}
Continue2.java
0부터 10미만의 수 중에서 홀수의 합을 구하는 과정을 출력하는 프로그램
public class Continue2{
public static void main(String[] args) {
int sum = 0;
for(int i=0; i<10; i++){
if ( i % 2 == 0){
continue; // for문의 중감식인 `i++`로 이동한다.
}
sum += i;
System.out.println(sum);
}
}
}
출력결과
1
4
9
16
25
사실 아래와 같이 코딩하는 것이 더 간결하기 때문에 잘 사용되지 않는다.
public class Continue2{
public static void main(String[] args) {
int sum = 0;
for(int i=0; i<10; i++){
if ( i % 2 != 0){
sum += i;
System.out.println(sum);
}
}
}
}
4) 반복의 변화량 조절
거의 대부분의 경우 조건값이 1씩 증가하거나 1씩 감소하도록 설정하지만 필요하다면 변화량을 조절하여 2씩 증가하거나 10씩 증가하는 등 다양하게 설정할 수 있다.
Step1.java
public class Step1{
public static void main(String[] args) {
int sum = 0; // 총 합을 저장할 변수
int i = ; // 초기식
while ( i < 100) { // 조건식
sum += i;
System.out.printf("i=%d, sum=%d\n", i, sum);
i += 10; // 증감식 (10씩 증가)
}
}
}
출력결과
i=0, sum=0
i=10, sum=10
i=20, sum=30
i=30, sum=60
i=40, sum=100
i=50, sum=150
i=60, sum=210
i=70, sum=280
i=80, sum=360
i=90, sum=450
Step2.java
0부터 10미만 수 중에서 짝수만 골라서 합산하는 프로그램
짝수만 판단하기 위해 증감식이 2씩 증가한다.
public class Step2{
public static void main(String[] args) {
int sum = 0; // 총 합을 저장할 변수
for (int i = 0; i<10; i+=2){
sum += i;
System.out.printf("i=%d, sum=%d\n", i, sum);
}
}
}
출력결과
i=0, sum=0
i=2, sum=2
i=4, sum=6
i=6, sum=12
i=8, sum=20
'코딩 공부 > Java' 카테고리의 다른 글
[Java] 10_배열 (0) | 2020.05.08 |
---|---|
[Java] 09_형변환 (0) | 2020.05.08 |
[Java] 07_반복문 (0) | 2020.05.08 |
[Java] 06_조건문 (0) | 2020.05.08 |
[Java] 05_기본입출력 (0) | 2020.05.08 |