A. 조건문 (conditional statement)
A-1. 조건문
- 조건에 따라 분기를 나눠 실행하기 위한 문법
- IF, IF-ELSE, Switch 문이 있음
A-2. 조건문 IF
문법
- if문은 각각 쓰임에 따라 if문과 if-else문으로 사용할 수 있다.
- 개수와 조건에 따른 조건문의 형태
- 조건이 하나일 때
- if (조건문) { 실행할 코드 블럭 }
- 조건이 두 개일 때(두 조건이 반대되는 조건일 때)
- if (조건문) { // (1) (1) 조건에 만족할 경우 실행할 코드 블럭 } else { // (2) 조건을 만족하지 않는 모든 경우 실행 실행할 코드 블럭 }
- 조건이 두 개 이고 각 조건에 해당되지 않으면 실행하지 않을 때
- if (조건문1) { // (1) 실행할 코드 블럭 } else if (조건문2) { //(1) 실행할 코드 블럭 }
- 조건이 세 개 이상일 때
- else if 부분은 몇 개가 와도 상관 X : 조건 개수에 따라 여러번 사용할 수 있다
- if (조건문1) { // (1) 실행할 코드 블럭 } else if (조건문2) { //(1) 실행할 코드 블럭 } ... ... { 실행할 코드 블럭 } else { 실행할 코드 블럭 }
- 만약 if - else if -else 구문에서 코드 상 위쪽의 조건문이 실행된 시점에 해당 블럭을 실행하고, 이 구문은 종료됨.
[예시] IF절
package com.itwill.condition01;
public class ConditionMain01 {
// 조건문 (conditional statement)
public static void main(String[] args) {
int number = -5;
if (number > 0) {
// 조건식을 만족하는 경우에 실행할 코드 블록
System.out.println("number가 0보다 커요!");
}
System.out.println("=====프로그램 끝=====");
}
}
[예시]if-else문 - 짝수 홀수 조건식
package com.itwill.condition01;
public class ConditionMain01 {
// 조건문 (conditional statement)
public static void main(String[] args) {
int number = -5;
if(number %2 == 0) {
// (1) 조건식을 만족하는 경우에 실행할 코드 블록
System.out.println("짝수");
} else {
// (2) 조건식을 만족하지 않는 경우에 실행할 코드 블록
System.out.println("홀수");
}
}
}
[예시]if-else문 - 양수 or 음수 or 0
짝수 홀수 조건식package com.itwill.condition01;
public class ConditionMain01 {
// 조건문 (conditional statement)
public static void main(String[] args) {
int number = 0;
if(number > 0) {
System.out.println("양수");
} else if (number < 0) {
System.out.println("음수");
} else {
System.out.println("00");
}
}
중첩 조건문
- if 또는 else 블록 안에 또 다른 조건문이 있는 경우
- if (조건) { if (조건) { } else { } }
[예시]중첩 조건문
package com.itwill.condition01;
public class ConditionMain02 {
public static void main(String[] args) {
// 중첩 조건문 : if 또는 else 블록 안에 또 다른 조건문이 있는 경우
double x = 3.14;
if (x > 0) {
System.out.println("양수");
} else {
if (x < 0) {
System.out.println("음수");
} else {
System.out.println("0");
}
}
}
}
🐔 Java는 Falthy Truthy가 없나봐!
- C언어나 JS에서 사용하던 while(1) {}… 과 같은 무한 루프 구문이 JAVA에서는 사용할 수 없다.
- 무한 루프로 사용하기 위해서는 while(true)나 while(1==1)처럼 논리 연산자를 사용해야 함
A-3. 조건문 예제 문제
Build-up
- 값을 입력받아 조건문을 이용한 구문 만들기
- Java.util 패키지 내 선언된 Scanner 클래스 이름을 사용하기 위해 필요한 import 구문 필수
- 키보드에서 입력받은 값을 저장하는 방법
- 키보드를 입력 받기 위해 객체를 생성하고, 메서드를 사용해야 함.
- Java.util 패키지 내 선언된 Scanner 클래스 이름을 사용하기 위해 필요한 import 구문 필수
- Scanner 타입의 객체 생성 : 입력 도구 만들기
- Scanner 타입으로 변수 선언하고 그 객체를 저장
- 키보드에서 정수를 입력받아 int 타입 변수에 저장
- 콘솔에 값 입력하고 결과 저장
- 만약 nextInt를 했는데 문자가 들어오면 에러가 발생
- 여러 번 입력을 받고 싶은 경우에 여러 개의 Scanner 객체를 생성하지 않고 해당 객체를 여러번 사용하면 됨.
- package com.itwill.condition03; import java.util.Scanner; // (1) public class ConditionMain03 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // (2) System.out.println("자바 과목 점수를 입력해주세요."); int java = sc.nextInt(); // (3) System.out.println("Java 점수 : "+java); } }
문제
- SQL , JS, Java 과목의 점수를 각각 입력받아 변수에 저장하고 해당 점수를 출력하시오.
- 세 과목의 총점을 계산해서 출력.
- 세 과목의 평균 점수을 계산해서 출력 (소수점 계산)
- 조건
- 세 과목의 평균이 90점 이상이면, A
- 세 과목의 평균이 80점 이상이면, B
- 세 과목의 평균이 70점 이상이면, C
- 그 이외에는 F라고 출력.
package com.itwill.condition03;
import java.util.Scanner;
public class ConditionMain03 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("Java 과목 점수를 입력해주세요.");
double java = sc.nextDouble();
System.out.println("SQL 과목 점수를 입력해주세요.");
double sql = sc.nextDouble();
System.out.println("JavaScript 과목 점수를 입력해주세요.");
double javascript = sc.nextDouble();
System.out.println("\\nJava 점수 : " + (int)java);
System.out.println("SQL 점수 : " + (int)sql);
System.out.println("JavaScript 점수 : " + (int)javascript);
System.out.println("\\n============= 점수 ==============");
System.out.println("세 과목 총점 : " + (int)(java + javascript + sql));
double avg = (java + javascript + sql)/3;
System.out.println("세 과목 평균 : " + avg);
System.out.print("\\n총 학점 : ");
if (avg >= 90) {
System.out.println("A");
} else if (avg >= 80){
System.out.println("B");
} else if (avg >= 70) {
System.out.println("C");
} else {
System.out.println("F");
}
}
}
실행 결과
- 실수로 출력해야 하는 avg를 계산할 때, A/B 중 하나만 실수이면 실수로 계산한다.
- int / double, double / int, double / double 세 경우 모두 실수로 계산된다.
- 위 출력 결과 : true
- System.out.println(Double.class.isInstance((java + javascript + sql)/3.0)); // java, javascript, sql 모두 int로 선언된 변수
- int / double, double / int, double / double 세 경우 모두 실수로 계산된다.
- 선생님 코드
package com.itwill.condition03;
import java.util.Scanner;
public class ConditionMain03 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in); // (1) warning 발생
System.out.println("Java 과목 점수를 입력해주세요.");
int java = sc.nextInt();
System.out.println("SQL 과목 점수를 입력해주세요.");
int sql = sc.nextInt();
System.out.println("JavaScript 과목 점수를 입력해주세요.");
int javascript = sc.nextInt();
System.out.println("\\nJava 점수 : " + java);
System.out.println("SQL 점수 : " + sql);
System.out.println("JavaScript 점수 : " + javascript);
System.out.println("\\n============= 점수 ==============");
System.out.println("세 과목 총점 : " + (java + javascript + sql));
double avg = (java + javascript + sql)/3.0;
System.out.println("세 과목 평균 : " + avg);
System.out.print("\\n학점 : ");
if (avg >= 90) {
System.out.println("A");
} else if (avg >= 80){
System.out.println("B");
} else if (avg >= 70) {
System.out.println("C");
} else {
System.out.println("F");
}
}
}
(1) Warning의 경우,
- 입력 장치가 키보드인 경우 상관없는데, 만약 파일을 읽어오는 방식으로 Scanner 객체를 사용할 경우, close를 해 주어야 함.
- A라는 프로그램에서 파일을 사용할 경우, 닫지 않으면 다른 프로그램에서 A 프로그램이 사용하고 있는 파일을 삭제할 수 없음.
- 이미 사용은 다 끝났는데 계속해서 메모리를 잡아먹고 있는 것이기 때문에 Resource leak이라는 문제가 발생
예제 - 가위바위보
package com.itwill.condition07;
import java.util.Random;
import java.util.Scanner;
public class RpsMain {
public static void main(String[] args) {
// 가위바위보 게임 :
// 가위 0, 바위 1, 보 2
Random random = new Random();
Scanner scanner = new Scanner(System.in);
int rsp = random.nextInt(3);
System.out.println("가위 바위 보!");
System.out.println("[0]가위");
System.out.println("[1]바위");
System.out.println("[2]보");
System.out.println("------------------------------------------------------------");
System.out.println("선택하세요!");
int rspFromUser = scanner.nextInt();
if (rspFromUser > 2 || rspFromUser < 0) {
System.out.println("제대로 내세요.");
return;
}
String winner = "User";
if (rsp == 0) {
if (rspFromUser == 2) {
winner = "AI";
}
} else if (rsp == 1) {
if (rspFromUser == 0)
winner = "AI";
} else {
if (rspFromUser == 1) {
winner = "AI";
}
}
if (rsp == rspFromUser) {
winner = "Both!";
}
System.out.println("AI : " + (rsp == 0 ? "가위" : rsp == 1 ? "바위" : "보"));
System.out.println("User : " + (rspFromUser == 0 ? "가위" : rspFromUser == 1 ? "바위" : "보"));
System.out.println(winner + "가 이겼습니다1");
}6
}
- 궁금한 점
- [x] 현재 위 코드에서 Scanner를 사용했는데도 불구하고 Scanner가 import 되지 않고 있음. 해당 프로젝트 내 다른 코드에서 import하기 때문인가..
- ㅋㅋㅋ….- 버튼 눌려서 import 구문 그냥 요약된 거였음..
- 기본값으로 User 승리, 만약 컴퓨터에 질 경우에만 winner의 값 변경하기
- 컴퓨터와 인간의 값 차이로 만든 모듈러
package com.itwill.condition07; import java.util.Random; import java.util.Scanner; public class RpsMain { public static void main(String[] args) { // 가위바위보 게임 : // 가위 0, 바위 1, 보 2 Random random = new Random(); Scanner scanner = new Scanner(System.in); int rsp = random.nextInt(3); System.out.println("가위 바위 보!"); System.out.println("[0]가위"); System.out.println("[1]바위"); System.out.println("[2]보"); System.out.println("------------------------------------------------------------"); System.out.println("선택하세요!"); int rspFromUser = scanner.nextInt(); if (rspFromUser > 2 || rspFromUser < 0) { System.out.println("제대로 내세요."); return; } int diff = user - computer; if (diff == 0) 비긴 경우 else if (diff == 1 || diff == -2) user가 이긴 경우 else 컴퓨터가 이긴 경우 System.out.println(winner + "가 이겼습니다1"); }6 }
- [x] 현재 위 코드에서 Scanner를 사용했는데도 불구하고 Scanner가 import 되지 않고 있음. 해당 프로젝트 내 다른 코드에서 import하기 때문인가..
A-4. Switch-Case
조건 제어문이지만, 조건식이 아닌 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.
- 변수의 값을 비교하는 경우에 이 switch문을 사용하면 if 문보다 코드 형태가 간결하다.
- case A : 비교 대상 인자가 A와 동일한지 체크한다.
- 괄호 안의 변수 값과 동일한 값을 갖는 case로 가서 실행문을 실행한다.
- 만약 변수 값과 동일한 값을 갖는 case가 없으면 default 구문 안에 있는 실행문으로 실행된다. (default문은 필수요소 X)
package com.itwill.switch02; import java.util.Random; public class SwitchMain02 { public static void main(String[] args) { Random random =new Random(); int genderCode = 1; genderCode = random.nextInt(6); // 강사님 코드 System.out.println("genderCode : " + genderCode); switch (genderCode){ case 1: case 3: System.out.println("남성"); break; case 2: case 4: System.out.println("여성"); break; default: System.out.println("몰리여"); } }
- Switch 문은 if - else 구문으로 100% 변경 가능하다.
- 하지만 그 반대는 불가능하다.
- 만약 각 케이스마다 break가 없다면, switch 문을 빠져가지 않고 다른 실행문들을 모두 실행한다.
- 이 때 부합하는 조건 이외의 다른 조건들은 비교하지 않는다.
package com.itwill.switch03; public class SwitchMain03 { public static void main(String[] args) { Weekday weekday = Weekday.MON; System.out.println(weekday); switch (weekday) { case MON: System.out.println("회사 가기 싫어..."); break; case TUE: System.out.println("화요일!"); case WED: System.out.println("수수수ㅜ!!"); break; case THU: case FRI: break; case SAT: case SUN: break; } } }
- 만약 위의 ex1과 같이 switch 문이 있다고 가정해보자.
- weekday가 TUE라면, 출력은 다음과 같다.
화요일! 수수수ㅜ!!
- 정수와 String, Enum, Char과 함께 사용할 수 있다.
- String 타입의 케이스 문의 경우, == 비교 연산이 아니라 equals 메서드를 이용하여 요소의 값을 비교한다.
<aside> 💡 ☑️ enum : enumerate type (열거형 타입)
상수(Constant)들을 정의하는 특별한 종류의 class ❗한 번 저장되면 바뀌지 않을 값을 변수로 저장할 때는, 변수명을 대문자로 사용한다.
package com.itwill.switch03;
public enum Weekday {
SUN, MON, TUE, WED, THU, FRI, SAT;
}
⏩⏩⏩더보기
☑️ 변수 : 값(데이터)을 저장하기 위한 메모리 공간
int x = 1; → x: 변수, 1 : 리터럴
☑️ 상수 : 초기화한 이후에는 값을 변경할 수 없는 변수
final int x = 1; final 키워드가 있으면 x의 값을 변경할 수 없다.
☑️ 리터럴 : 고정된 값. ex ) 1, 2, 3.14, “sbda”, …
</aside>
람다와 switch
switch (selectedNum) {
case 0 -> readAll();
case 1 -> {
putLike(idx);
readDetail(idx);
}
case 2 -> // 댓글 달기....
addComment(idx);
}
- 아마 최신 문법인 것 같은데 IntelliJ가 알려줬다.
- 람다를 통해 switch 문에서 굳이 break를 일일이 추가해주지 않아도 되어 읽기 더 쉬운 것 같다.
- 또한 지금 진행 중인 프로젝트 내에 한 케이스마다 한 줄 실행문만 있을 경우가 많은데, 그런 경우에 진짜 좋을 것 같다…
- ✅ 주의할 점 : 람다와 기존 case 문을 혼용할 수 없다는 것!
B. 반복문
- 어떤 작업이 반복적으로 실행되도록 할 때 사용되며, 반복문의 종류로는 for, while. do-while문이 있다.
- for 문과 while 문은 상호 호환 가능하나, for문은 반복 횟수를 알고 있을 때, while 문은 조건에 따라 반복할 때 주로 사용한다.
- while과 do-while문의 차이점은 조건 검증이 앞에 위치하냐 뒤에 위치하냐의 차이
Break와 continue 문장
- break : 반복문 실행 중 break문에 도달하면, 해당 코드 블럭 탈출
- continue : 반복문 실행 중 continue 문장을 만나면 해당 문장 아래 코드들은 무시하고 그 다음 반복 과을 계속 수행
- package com.itwill.loop05; public class LoopMain05 { public static void main(String[] args) { for (int n = 1; n <= 5; n++) { if (n == 3) break; System.out.println(n); } // 출력 결과 : 1 2 for (int n = 1; n <= 5; n++) { if (n == 3) continue; System.out.println(n); } // 출력 결과 : 1 2 4 5 } }
- for 구문에서 조건식이 없는 경우는 무한 반복문으로 사용할 수 있음.
- break 문장 활용하여 무한 반복문을 종료시킬 때 사용할 수 있음
B-1. For문
package com.itwill.loop01;
public class LoopMain01 {
public static void main(String[] args) {
// 반복문
System.out.println("Java 1");
System.out.println("Java 2");
System.out.println("Java 3");
System.out.println("Java 4");
System.out.println("Java 5");
// (1)
System.out.println("============================");
for (int i =1; i <= 5; i++) {
System.out.println("Java " + i);
} // (2)
}
}
- ======로 나눠진 출력문은 해당 코드를 중심으로 똑같은 출력이 반복된다.
- (2)에서는 반복문을 통해 하나하나 명시한 (1)의 코드 중 반복되는 코드들을 함축된 코드로 표현할 수 있었다.
- 만약 5번이 아니라 수백번의 반복 행위가 필요한 경우, 이를 하나하나 명시해줄 수 없기 때문에, 반복문을 통해 이를 처리할 수 있다.
- (4) 증감식⇒ 증가/감소 연산자로 많이 사용된다. 단항 연산자의 대표적인 예시
- (2) 반복 조건식
- for ((1)초기화 문장; (2)반복 조건식; (4)증가, 감소) { (3) 반복할 실행 코드 블록 }
- 각 초기화 문장이나 반복 조건식, 증감식은 둘 이상 있을 수 있다.
- 이 경우, 쉼표(,)로 구분하여 작성한다.
for (int i = 0, j = 1; i < 50 && j < 199; i++, j++) { }
- 반복 조건식에서 다수의 조건식이 나올 경우, 논리 연산자를 사용하여 여러 조건을 결합한다.
- 초기화 문장은 for문의 초기화식에서 선언하지 않고 for 문 전에 선언할 수 있다.
- 메서드 내에서 사용하는 변수로 사용하여 for문 밖에서도 사용할 수 있다.
<aside> 💡 🆘초기화식에서 루프 카운터 변수를 선언할 때 주의할 점!
Float 타입을 초기화 식에 사용하면 안된다!
for (float x = 0.1f; x <= 1.0f; x += 0.1f) {
System.out.println(x);
}
- 위의 코드는 10번 반복될 것으로 예상된다.
- 하지만 출력 결과는 다음과 같다.
- 0.1은 float 타입으로 정확하게 표현할 수 없기 때문에, 루프 카운터 변수인 x에는 실질적으로 0.1보다 큰 값이 더해진다.
</aside>
중첩 반복문
- for문을 여러번 중첩시켜 필요한 과정을 얻을 수 있음
- 9x9단 출력하기
- package com.itwill.loop06; public class LoopMain06 { public static void main(String[] args) { // 중첩 반복문 for (int dan = 2; dan < 10; dan++) { System.out.println("---------------" + dan + "단 출력---------------"); for (int n = 1; n < 10; n++) { System.out.println(dan + " x " + n + " = " + (dan * n)); } System.out.println(); } } }
[예제-중첩 반복문과 break문]
- 구구단 출력하기
- 조건
- 2단은 2X2까지, 3단은 3X3까지…… 9단은 9X9까지 출력하기
- break문 활용하기
- package com.itwill.loop07; public class LoopMain07 { public static void main(String[] args) { for (int dan = 2; dan < 10; dan++) { System.out.printf("-----------%d단 출력-----------\\n", dan); for (int i = 1; i < 10; i++) { System.out.printf("%d x %d = %d\\n", dan, i, dan*i); if (dan==i) break; } } } }
- 중첩 반복문의 조건 활용하기
- package com.itwill.loop07; public class LoopMain07 { public static void main(String[] args) { for (int dan = 2; dan < 10; dan++) { System.out.printf("-----------%d단 출력-----------\\n", dan); for (int i = 1; i <= dan; i++) { System.out.printf("%d x %d = %d\\n", dan, i, dan * i); } } } }
B-2. while문
- 조건이 true일 경우 계속해서 반복
- while문과 for문은 100% 상호 변경 가능
- Go랭에서는 while문이 없대..
- 조건 식에는 비교 또는 논리 연산식이 오며, 조건식이 false일 경우 반복 행위를 멈추고 while문을 종료
- 문법
- 실행 코드에 증감식을 함께 작성함
- while문이 실행될 때 조건식 평가
- 평가 결과가 true이면 실행문(2) 실행
- 실행문(2)이 모두 실행되면 조건식(1)으로 되돌아가서 다시 조건식 평가
- 만약 조건식이 true라면 실행문(2) 다시 실행
- 만약 조건식이 false라면 while문 종료
int i = 1; while (i < 6) { System.out.println (i); i++; }
- [초기값 선언]; while ( [반복 조건] ) { // (1) [실행할 코드]; // (2) }
- while문의 반복 조건에 활용되는 지역 변수는 while 문의 바깥에서 선언되므로 while 문 밖에서도 사용할 수 있다.
[예제 1,2] 1부터 5 출력하고 반대로도 출력하기
[예제 3,4] 2씩 증가하거나 감소하거나!
package com.itwill.loop08;
public class LoopMain08 {
public static void main(String[] args) {
// while 반복문 문법 공부하기
System.out.println("---------[1]");
// [1] 반복할 문장(들) 1 2 3 4 5 출력
int i = 1;
while (i < 6) {
System.out.print(i++ + " ");
}
System.out.println();
System.out.println("---------[2]");
// [2] 5 4 3 2 1 출력
while (--i > 0) {
System.out.print(i + " ");
}
System.out.println();
System.out.println("---------[3]");
// [3] 0 2 4 6 8 10 출력하기
while (i <= 10) {
System.out.print(i + " ");
i += 2;
}
System.out.println();
i=0;
while (i<=5) {
System.out.print(i*2+" ");
i++;
}
System.out.println();
System.out.println();
System.out.println("---------[4]");
// [4] 9 7 5 3 1 출력하기
i = 9;
while (i >= 0) {
System.out.print(i + " ");
i -= 2;
}
System.out.println();
}
}
- 예제 [3]이나 [4]는 여러가지 경우의 수로 코드를 구성할 수 있음.
- 다양한 경우의 수를 생각해보며 코드를 작성할 수 있는 좋은 시간인 것 같다.
구구단 문제 활용해서 만들어보기 (feat. Scanner 라이브러리)
Scanner scanner = new Scanner(System.in);
System.out.printf("========== 몇 단을 출력할까요 ==========\\n");
int dan = scanner.nextInt();
int n = 1;
System.out.printf("========== %d 단을 출력합니다 ==========\\n", dan);
while (n < 10) {
System.out.printf("%d X %d = %d\\n", dan, n, dan * n);
n++;
}
[예제] 구구단 - 1단부터 9단까지 출력하기
package com.itwill.loop09;
public class LoopMain09 {
public static void main(String[] args) {
// 중첩 반복문(while) 활용하기 : 구구단 출력 (2단 ~ 9단)
int dan=2;
int n;
while (dan < 10) {
n=1;
System.out.printf("======%d단을 출력합니다======\\n", dan);
while (n < 10) {
System.out.printf("%d X %d = %d\\n", dan, n, dan * n++);
}
dan++;
}
}
}
- dan의 경우, 다른 연산자들과 함께 쓸 수 있는 코드가 없어서 단독으로 사용해봄,,,
- n의 초기화를 선언과 같이 하기보다 한 단의 구구단이 시작될 때 하는 것이 좀 더 읽기 편할 것 같아서 초기화와 재할당을 모두 외부 while문 내에 사용해 보았다.
- 그렇게 따지면 선언 자체도 첫 번째 while 문 내에 사용하는 것이 좋았을지도 모르겠다.
- 어차피 중첩된 while문 내에서만 사용하기 때문에 굳이 메모리를 사용할 필요가 없을 듯.
B-3. do-while문
- 문법
- [초기값 선언]; do{ [실행할 코드]; // (1) } while ( [반복 조건] ); // (2)
While과 Do-While
- 두 반복문의 문법 차이
while (조건식) {... ...};
do {... ...} while(조건식);
- While 문
- 반복 블럭을 실행하기 전 (반복 조건식)을 검사하기 때문에, 실행 블록이 한 번도 실행되지 않는 경우가 있음
- do-while문
- do-while 문은 무조건 실행 블록을 먼저 실행하고 난 후 반복 조건식을 검사함.
- 조건 검증보다 실행문이 먼저 실행되기 때문에 최소한 1번 이상 실행
- 조건에 맞지 않더라도 초기 실행 보장
- 거의 사용하지 X
- while과 do-while의 실행 차이
- while과 do-while 문의 실행 과정 차이를 실험해본 코드… 강사님 코드에서 조건만 슬쩍 만져봤는데 무한 루프 타서 while문의 종료를 확인할 수 없었다는 후문…
- 출력 결과는 다음과 같다.
- while 문은 단 한번의 실행도 되지 않고 종료된다. 하지만 do-while문은 해당 실행 블럭의 코드가 실행되어 조건에 부합하여 계속 실행이 된다.
- ====== while ====== end while ====== do-while ====== 1 0 -1 -2 -3 ... ...
- package com.itwill.loop10; public class LoopMain10 { public static void main(String[] args) { // do-while문 System.out.println("====== while ======"); int n = 1; while (n <= 0) { System.out.println(n); n--; } System.out.println("end while"); System.out.println("====== do-while ======"); n = 1; do { System.out.println(n); n--; } while(n <= 0); // 무한 루프;;;;; } }
B-4. 예제
⁉️1부터 10까지의 자연수들의 합 구하기 : sum = 1+ 2 + 3 + … … + 10; ⇒ 55
package com.itwill.loop11;
public class LoopMain11 {
public static void main(String[] args) {
// [1] 1부터 10까지 자연수들의 합 계산하기
// : sumByFor = 1 + 2 + ... + 10; => 55
int sumByFor = 0;
for (int i = 1; i < 11; i++) {
sumByFor += i;
}
// (1) for문
int sumByWhile = 0;
int n = 1;
while (n < 11) {
sumByWhile += n++;
}
// (2) while문
int sumByDoWhile = 0;
n = 1;
do {
sumByDoWhile += n++;
} while (n < 11);
// (3) do while 문
}
}
- 현재 위에 작성된 3가지 반복문의 실행은 동일하다.
⁉️1부터 100까지의 짝수들의 합 구하기 && ⁉️1부터 100까지의 홀수들의 합 구하기
package com.itwill.loop11;
public class LoopMain11 {
public static void main(String[] args) {
int sumOfEven = 0;
for (int i = 2; i < 101; i += 2) {
sumOfEven += i;
// System.out.println(sumOfEven);
}
sumOfEven = 0;
int m = 0;
while (m < 101) {
sumOfEven += m;
m += 2;
// System.out.println(sumOfEven);
}
sumOfEven = 0;
m = 0;
do {
sumOfEven += m;
m += 2;
// System.out.println(sumOfEven);
} while (m < 101);
// -----------------
int sumOfOdd = 0;
for (int i = 1; i < 100; i += 2) {
sumOfOdd += i;
// System.out.print(sumOfOdd + " ");
}
sumOfOdd = 0;
m = 1;
while (m < 101) {
sumOfOdd += m;
// System.out.print(m + " ");
m += 2;
// System.out.println(sumOfOdd + " ");
}
sumOfOdd = 0;
m = 1;
do {
sumOfOdd += m;
System.out.print(m + " ");
m += 2;
System.out.println(sumOfOdd + " ");
} while (m < 101);
}
}
- 이렇게 말고 if 문으로 작성하는 방법
- if (m % 2 == 0) 이면 더하기, default로 m++ 해주기
- 문제가 2개라고 나눠서 풀 생각 말고, 한 번에 해결해볼 생각도 하면 좋겠다.
[혼공자 예제]
package com.itwill.loop13;
import java.util.Scanner;
public class LoopMain13 {
public static void main(String[] args) {
// 교재 연습문제 2번
System.out.println("=====교재 연습문제 2번=====");
int sum = 0;
for (int i = 1; i < 101; i++) {
if (i % 3 == 0)
sum += i;
}
System.out.println(sum);
// 교재 연습문제 5번
System.out.println("=====교재 연습문제 5번=====");
for (int i = 1; i <= 4; i++) {
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println();
// 교재 연습문제 6번
System.out.println("=====교재 연습문제 6번=====");
for (int i = 1; i <= 4; i++) {
// for (int j = i; j < 4; j++) { // 두 경우 모두 가능
for (int j = 4 - i; j > 0; j--) {
System.out.print(" ");
}
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
} // 현재 가지고 있는 변수들로 내가 원하는 수열을 만드는 과정을 생각해보기
// 교재 연습문제 7번
System.out.println();
System.out.println("=====교재 연습문제 7번=====");
boolean run = true;
int balance = 0;
Scanner scanner = new Scanner(System.in);
while (run) {
System.out.println("---------------------------------------");
System.out.println("1. 예금 | 2. 출금 | 3. 잔고 | 4. 종료");
System.out.println("---------------------------------------");
int selected = scanner.nextInt();
if (selected == 1) {
System.out.println("예금할 금액을 입력하세요.");
int savings = scanner.nextInt();
balance += savings;
} else if (selected == 2) {
System.out.println("출금할 금액을 입력하세요.");
int withdraw = scanner.nextInt();
if (balance >= withdraw) balance -= withdraw;
else {
System.out.println("출금 금액이 부족합니다.");
}
} else if (selected == 3) {
System.out.println(balance);
} else {
run = false;
System.out.println("거래가 종료되었습니다.");
}
}
}
}
강사님 ⇒ 6번 문제 풀이
System.out.println("=====교재 연습문제 6번=====");
for (int x = 1; x <= 4; x++) {
for (int y = 1; y <= 4; y++) {
if(y <= 4-x) {
System.out.print(" ");
} else {
System.out.print("*");
}
}
System.out.println();
}
- 내부에 반복문을 하나만 써서 if절과 else if절로 만드는 코드는 지금껏 생각해본 적이 없다…
- 역시 머리가 굳으면 안되니까 다양한 코드를 보는 연습을 하자
'programming > Java [notion 정리본 업로드]' 카테고리의 다른 글
상속 (0) | 2024.04.13 |
---|---|
Class (0) | 2024.04.13 |
연산자 (0) | 2024.04.13 |
변수 & 데이터 타입 (0) | 2024.04.13 |
Java 설치하기 [feat. 17] (0) | 2024.04.13 |