1. for문 : 반복 횟수를 알고 있을 때, a부터 b까지(범위)
[구조]
for(초기식;조건식;증감식) {
수행할 문장;
}
초기식은 최초 한번만 수행한다.
[for문 예제]
1) 1부터 10까지 출력하시오.
for(int i = 1; i<=10; i++) {
System.out.println(i);
}
2) 1-10 중 짝수만 출력하시오.
for(int i = 1; i<=10; i++) {
if(i%2==0) {
System.out.println(i);
}
3) 1-10 중 홀수만 출력하시오.
for(int i = 1; i<=10; i++) {
if(i%2==0) {
continue;
}
System.out.println(i);
}
4) a부터 b까지 정수의 합을 출력해주세요. (랜덤)
int a= 1;
int b = 5;
int sum = 0;
for(int i = a; i <= b; i++) {
if(a<b) { // b가 a보다 크다면
int tmp; // 교환 알고리즘을 위한 임시 저장 변수!!
// tmp는 scope를 유리하게 하기 위해 if문 내부에서 선언
tmp = a;
a=b;
b=tmp; // 서로 수를 바꾸는 작업
} // 교환 로직(알고리즘)
sum += i;
}
System.out.println(sum);
처음 코드 짤 때 유효성 로직을 빼먹었다..
a가 b보다 작을 경우를 대비해서 임시 저장 변수인 tmp를 선언하고 교환 로직을 사용해야 한다.
정처기 실기 풀 때 자주 봤던 방식인데 왜 생각을 못했을까...
코드 짤 때 모든 경우의 수를 잘 생각하고 코드를 작성하는 습관을 가져야겠다.
5) 10의 약수를 모두 출력하세요.
for(int i = 1; i<=10; i++) {
if(10%i!=0) {
continue;
}
System.out.print(i + " ");
}
System.out.println();
처음에 작성한 코드는 이렇고
final int NUM = 10;
for(int i = 1; i<=NUM; i++) {
if(NUM % i == 0) {
System.out.print(i + " ");
}
}
System.out.println();
상수화한 버전은 다음과 같다. 상수화할 수 있는 변수는 상수화 할 것!!
6) 10의 약수의 개수를 출력하시오.
int cnt = 0;
for(int i = 1; i<=10; i++) {
if(10%i==0) {
cnt++;
System.out.print(i + " ");
}
}
System.out.println("약수의 개수는 " + cnt);
// cnt를 main에 선언하여 for문이 모두 끝난 후 cnt(약수 개수)를 한번만 출력하도록 함
}
개수를 셀 때는 cnt 변수를 생성해서 ++ 하고 마지막에 해당 변수를 출력하면 된다.
7) 좌측 하단 삼각형 별 찍기
for(int i=0;i<5;i++) {
for(int j=0; j<=i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
별찍기 할 때 디버깅표 이용해서 들어갈 조건식 구하기!!
8) [1] 소수란, 약수의 개수가 1과 자기자신뿐(2개)인 수를 말한다. 랜덤정수(0-100 사이)가 소수라면 "소수입니다", 소수가 아니라면 "소수가 아닙니다."를 출력
package class05;
public class Problem1 {
public static void main(String[] args) {
int num = 10;
if(num <0 || 100 < num) {
System.out.println("num의 범위가 이상합니다. 다시 확인해주세요!");
return;
}
int cnt = 0;
for(int i = 1; i<=num;i++) {
if(num%i==0) {
cnt++;
}
}
if(cnt==2) {
System.out.println("소수입니다.");
} else {
System.out.println("소수가 아닙니다.");
}
}
}
먼저, 랜덤정수가 소수라면 "소수입니다"를 출력하고 소수가 아니라면 "소수가 아닙니다"를 출력하는 if문을 떠올린다.
그 후, 소수가 무엇인지를 따져보았을 때, 소수는 약수가 자기 자신과 1뿐인 수를 의미한다.
그러므로 약수가 2개면 소수이다.
소수의 개수를 세기 위해서는 cnt 변수를 선언하고, for문을 돌면서 num의 약수를 구하고, 약수 하나당 cnt의 개수도 하나씩 증가되는데 이때 cnt의 개수가 2개이면 소수이고, 그 외에는 모두 소수가 아니다.
9) [2] 1부터 50까지의 정수 중 소수들을 출력하기
for(int i = 1; i<=50; i++) {
// 약수 개수 카운팅
int cnt = 0;
for(int j=1;j<=i;j++) {
if(i%j == 0) {
cnt++;
}
}
if(cnt == 2) {
System.out.println(i);
}
}
이중 for문을 이용해서 소수를 출력한다. 소수는 나눠지는 수가 자기자신과 1뿐이므로 이중 for문을 통해 모든 수로 다 나눠준다. 이때, 약수라면(i%j == 0) cnt의 개수를 증가시키고, cnt= 2가 되면 그 수는 소수이다.
10) [3] 1부터 50까지의 정수 중에서 6의 배수들을 모두 출력해주세요. 이들의 총합을 출력해주세요.
int sum = 0;
for(int i = 1; i <= 50; i++) {
if(i%6==0) {
System.out.print(i + " ");
sum += i;
}
}
System.out.println();
System.out.println("총합 : " + sum); // for문이 끝나고 출력해야 for문의 영향을 받지 x
}
}
2. 변수의 사용범위(scope)
: 라이프사이클(생명주기)
package class01;
public class Test02 {
public static void main(String[] args) {
for(int i = 0; i<4; i++) { // i는 for문에서만 사용 가능
System.out.println(i);
}
//System.out.println("최종 " + i); -> main문을 벗어나서 x i는 지역변수
}
}
지역변수 i는 for문 안에서만 사용할 수 있는 변수이기 때문에 주석처리한 부분에서는 사용할 수 없다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] 정수 2개를 입력받고 랜덤수 3개 출력하기 (0) | 2024.12.31 |
---|---|
반복문 별 찍기 (0) | 2024.12.31 |
while문 문제 풀이 (0) | 2024.12.27 |
Day 2 - 조건문 : if문 예제 (1) | 2024.12.27 |
디버깅표 작성하기 (0) | 2024.12.26 |