코드 그라데이션
Day04 - 반복문 본문
복습 설명 내용
문자열이 하나라도 섞이면 숫자는 전부 문자열화 되어버린다.
switch문은 상등비교밖에 안 된다.
같은 케이스를 그루핑
반드시 break 필요하다.
if 3개는 다 비교
if
else if
else 는 위의 조건 중에 하나가 맞으면 더 이상 조건을 확인하지 않습니다.
반복문의 쓰임
원하는 명령문 또는 실행문을 원하는 횟수 만큼 반복을 시키기 위해서 사용을 합니다.
실행과 탈출
반복문은 조건이 참이면 반복
/ 조건문 조건이 참이면 실행
거짓이면 탈출
** 조심 : 탈출조건에 대한 강박에서 벗어나기.
** 처음부터 탈출조건을 돌리면, 반복문 자체가 안 돌아간다.
왜 필요?
밥 먹을 때, 한 숟갈 뜨고 끝낸다? 그렇지 않지. 숟가락질을 반복적으로 해서 원하는 만큼 먹겠죠.
이런 현실이 있기 때문에 우리는 반복문을 쓴다.
우리가 쓰고 있는 window도 무한루프로 반복으로 돌아간다.
먼저,
While 문
조건이 참이면 반복
조건이 거짓이면 탈출
구조
while(조건){
명령문
실행문
}
cf. do-while문
** 지금 세미콜론 쓰인 건데, 조심해
do{
명령문
실행문
}while(조건);
쓰기를 지양하는 이유
- 모양이 자기만 다르다. (소괄호 뒤에 세미콜론 붙는 건 반복문에 없다.
- while문은 처음 조건이 false이면 실행 아예 안하지만, do-while은 처음 조건이 false여도 한번은 실행해준다.
⇒ 한 번은 나오니까, 이 논리가 틀렸는데, 혼란을 초래해버림.
사례) 1부터 10까지를 출력하는 프로그램 만들기
package Day04;
public class WhileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int hap = 0, count = 1; // 같은 자료형이면, 이렇게 이어서 선언이 가능하다.
while(count <= 10) {
hap = hap + count;
count = count + 1;
} System.out.println("1부터 10까지의 합은 " + hap + " 입니다.");
}
}
이거 경우의 수 정리(조건문은 안되면 적어라)
Hap = 0, count = 1
Hap = 1, count = 2
Hap = 3, count = 3
Hap = 6, count = 4
Hap = 10, count = 5
Hap = 15, count = 6
Hap = 21, count = 7
Hap = 28, count = 8
Hap = 36, count = 9
Hap = 45, count = 10
Hap = 55, // count =11
따라서 55 가 출력됨.
cf. 무한루프
while(true) { // 가능하다. 무한루프!
}
연습해보기
1부터 입력받은 수까지 합 출력하는 프로그램 만들기
package Day04;
import java.util.Scanner;
public class WhileTest2 {
// 입력받은 수만큼 더해서 출력하는 프로그램 작성하기
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("원하는 숫자를 입력하세요. : ");
int countMax = sc.nextInt();
int total = 0;
int count = 1;
while(count <= countMax) {
total = total + count;
count ++;
}
System.out.printf("1부터 %d까지의 합은 %d 입니다.", countMax, total);
//원래 했던 것에서 10만 사용자 입력값으로 치환해주면 되는 거다.
}
}
선생님 풀이
(훨씬 간단해)
선생님 풀이
package Day04;
import java.util.Scanner;
public class WhileTest2_T {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요");
int inputNum = sc.nextInt();
int hap = 0, count = 1;
while(count <inputNum) {
hap = hap + count;
count = count + 1;
} System.out.println("1부터" + inputNum + "까지의 합은 " + hap + " 입니다.");
}
}
for
for(초기식 ; 조건식 ; 증감식) {
명령문
실행문
}
초기문 값을 세팅하고, 조건문을 확인, 증감문을 이용해서 값을 증가하거나 감소하면서 조건이 false가 될 때까지 반복.
<1회>
- 초기문
- 조건문
- 명령문
<2회>
- 증가감문
- 조건문
- 명령문
2회 이후부터는 계속 2회처럼 움직입니다.
<비교>
돌려보면 for(int i = 10; i>0; i --) 하고
for(int i - 10; i! = 0; i --) 는 똑같은 의미이다.
이런 것도 가능
for문 예시
1부터 10까지의 합 출력
package Day04;
public class ForTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int hap = 0;
for(int count = 1; count <= 10 ; count++) {
hap = hap + count;
}
System.out.println("1부터 10까지의 합은 " + hap + " 입니다.");
}
}
만약 여기서 7, 8을 빼고 계산하고 싶다면? => 그러니까 15를 제외시키므로, 40이 출력되겠지
만약 7과 8을 빼고 싶다면?
public static void main(String[] args) {
// TODO Auto-generated method stub
int hap = 0;
for(int count = 1; count <= 10 ; count++) {
if(count != 7 && count != 8) { // 아니면 괄호로 싸면 더 편하지! if(!(count != 7 || count != 8))
hap = hap + count;
}
}
System.out.println("1부터 10까지의 합은 " + hap + " 입니다.");
}
}
그렇다면...
반복문 안에 조건문? 또는 조건문 안에 반복문을 사용 할 수 있을까요?
됩니다.
반복문 안에 반복문이 될까요?
됩니다.
=> 무한히 삽입 가능!
예시 문제
숫자를 하나 입력을 받습니다.
입력받은 숫자의 약수를 출력하는 프로그램을 만들어주세요.
내 방법 - 문자열 더하기 활용(사실 처음 써봄)
package Day04;
import java.util.Scanner;
public class Q2 {
//8의 약수를 출력하는 프로그램 만들기
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("약수를 구하고 싶은 숫자를 입력하세요. : ");
int inputNum = sc.nextInt();
String ment = "";
for(int i = 1; i <= inputNum; i++ ) {
if (i != inputNum) { // 마지막 숫자에 ,가 붙지 않게 만들어줌
if (inputNum % i ==0) { // 약수 구하기
ment += i; // 표기법을 위해 String 방식으로 합산을 해준다.
ment += ", ";
}
}
}
System.out.println(inputNum + "의 약수는 " + ment + inputNum + " 입니다.");
}
}
선생님 방법 - 문자열 더하기 미사용. 훨씬 간단
package Day04;
import java.util.Scanner;
public class Q2_T {
//8의 약수 구하기 선생님 답안
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.print("약수를 구할 숫자를 입력하세요: ");
int num = scanner.nextInt();
System.out.println(num + " 의 약수 : ");
for(int i = 1; i<num; i++) { // num을 제외 => num까지 나와버리면 안 되지
if (num % i == 0) {
System.out.print(i + ", "); // num을 제외한 약수 출력
}
}
System.out.println(num + " 입니다."); // 약수에 나머지 num 값을 출력함.
}
}
'Java > Mega' 카테고리의 다른 글
String 변수 = ""; 를 왜 썼는지 chat GPT에게 질문 (0) | 2023.03.19 |
---|---|
break문 chat GPT 설명 / 메서드화 연습 (0) | 2023.03.17 |
Day03 - Switch문, 조건문 문제풀이 (0) | 2023.03.17 |
Day 02 - 자료형, 연산자, if 조건문 (0) | 2023.03.14 |
Day 01 - 수업 소개와 Java 도입(출력 메서드) (0) | 2023.03.14 |