월요일이 다시 시작되었다.... 비도 오고해서 힘은 안 나지만 힘을 내보자!!
하면서 들어간 첫 내용은 반복문이다.
* 반복문
- 조건이 참인동안 반복한다.
조건이 거짓이면 반복문을 빠져나온다.
- 반복되는 문장이 1개일 경우에는 { }를 생략해도 된다.
종류에는 for / while / do-while 이렇게 있다.
for문의 형식부터 보면
for( 변수=초기값; 조건; 증감값) {
참일동안만 반복
}
=> 거짓
-> 조건 틀리면 빠져나옴
ex)
for( A; B; C){
D;
}
E;
A -> B -> D -> C -> B ->
D -> C -> B
반복 부분
-> E(조건 틀리면 빠져나옴)
For01.java
package for_;
public class For01 {
public static void main(String[] args) {
int i; // 지역 변수(local variable) - 함수 안에 갇혀있음 -> 쓰레기값 가지고 있음.
for(i=1; i<=10; i++) {
System.out.println("Hello Kitty!! " + i);
}//for문
System.out.println("탈출 i = " + i);
System.out.println();
//10 9 8 7 6 5 4 3 2 1
for(i=10; i>0; i--) {
System.out.print(i+" ");
}
System.out.println();
//A B C D E F G ~~~ X Y Z
for(i='A'; i<='Z'; i++) {
System.out.print((char)i + " ");
}
System.out.println();
}
}
Hello Kitty!! 1
Hello Kitty!! 2
Hello Kitty!! 3
Hello Kitty!! 4
Hello Kitty!! 5
Hello Kitty!! 6
Hello Kitty!! 7
Hello Kitty!! 8
Hello Kitty!! 9
Hello Kitty!! 10
탈출 i = 11
10 9 8 7 6 5 4 3 2 1
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
원하는 단을 입력 : 2 ← System.in.read() dan
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
For02.java
package for_;
import java.io.IOException;
public class For02 {
public static void main(String[] args) throws IOException {
System.out.print("원하는 단을 입력 : ");
int dan = System.in.read() - 48; //int형으로만 들어옴. 1개의 문자로 받아들임.
//문자가 들어오므로 아스키코드값 이용해서 바꿔야함.
// '0' = 48
//int dan = System.in.read() - '0'; // 위와 같음.
for(int i=1; i<10; i++) {
System.out.println(dan + " * " + i + " = " + (dan*i));
}
}
}
원하는 단을 입력 : 2
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
저번 시간에도 했던 내용이지만 System.in.read()는 우리가 키보드로 입력하면 문자로 받아들인다.
그러므로 아스키코드값을 이용해서 바꿔줘야 제대로 우리가 원하는 값을 얻을 수 있는 것이다.
'0' = 48이니까 48을 빼던 '0'을 빼던 꼭 이와 같은 작업을 해줘야한다.
합 곱
1 1 1
2 3 2
3 6 6
4 10 24
5 15 120
6 21 720
7 28 5040
8 36 40320
9 45 362880
10 55 3628800
For03.java
package for_;
public class For03 {
public static void main(String[] args) {
int sum = 0;
int mul = 1; //초기값 1 주어야함.
System.out.println("\t합\t곱");
for(int i=1; i<=10; i++) {
sum += i;
mul *= i;
System.out.println(i + "\t" + sum + "\t" + mul);
}
}
}
합 곱
1 1 1
2 3 2
3 6 6
4 10 24
5 15 120
6 21 720
7 28 5040
8 36 40320
9 45 362880
10 55 3628800
while문도 보면 형식이 아래와 같이 나온다.
while(조건) {
참일 때 반복
}
=> 거짓이면 빠져나옴.
do-while문은 약간 다른 점을 볼 수 있다.
do {
참일 때
} while(조건); //세미콜론 꼭 찍어주기
=> 거짓이면 빠져나옴.
While01.java
package while_;
public class While01 {
public static void main(String[] args) {
int a=0;
//1 2 3 4 5 6 7 8 9 10
while(a<10) {
a++;
System.out.print(a + " ");
}//while
System.out.println();
//1 2 3 4 5 6 7 8 9 10
int b=1;
while(true) { //무한루프 => for(;;)
System.out.print(b + " ");
b++;
if(b > 10) break;
}//true
}
}
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
[문제] A ~ Z 출력하되 1줄에 7개씩 출력하시오.
DoWhile.java
package while_;
public class DoWhile {
public static void main(String[] args) {
char ch = 'A';
int count = 0;
do {
System.out.print(ch++ + " ");
count++;
if(count % 7 == 0) {
System.out.println();
}
}while(ch <= 'Z');
}
}
A B C D E F G
H I J K L M N
O P Q R S T U
V W X Y Z
다중 for문도 꽤나 많이 사용하게 되는데
다중 for문
- for문 안에 또 다른 for문이 존재
- for문에 사용되는 변수명은 서로 달라야 한다.
- 겹쳐서도 안 된다.
그리고 위에서 조금씩 써왔던 break / continue에 대해서도 간단히 설명하면
1. break
- 반복문(for, while, do~while), switch를 벗어날 때
- break가 속해있는 반복문 1개만 벗어난다.
- 만약에 여러개의 반복문을 벗어나고 싶을 때는 라벨을 사용한다.
2. continue
- 반복문(for, while, do~while) 끝으로(}) 무조건 이동
- 자신이 소속된 끝으로 (}) 무조건 이동
- 만약에 2개 이상 반복문 끝으로 이동하려면 라벨을 사용 한다.
MultiFor01.java
package multiFor;
public class MultiFor01 {
public static void main(String[] args) {
int i, j;
for(i=2; i<=4; i+=2) {//i2, i=4 2번
for(j=1; j<=3; j++) {// j=1, j=2, j=3 3번
System.out.println("i = " + i + " j = " + j);
}//for j
System.out.println();
}//for i
}
}
i = 2 j = 1
i = 2 j = 2
i = 2 j = 3
i = 4 j = 1
i = 4 j = 2
i = 4 j = 3
2단 ~ 9단
어디가 반복되는지를 잘 확인하고 for문을 쓰는게 관건 !!
MultiFor02.java
package multiFor;
public class MultiFor02 {
public static void main(String[] args) {
int dan, i;
for(dan=2; dan<10; dan++) {
for(i=1; i<10; i++) {
System.out.println(dan + " * " + i + " = " + dan*i);
}//for i
System.out.println();
}//for dan
}
}
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
사진 설명을 입력하세요.
MultiFor03.java
package multiFor;
public class MultiFor03 {
public static void main(String[] args) {
int dan, i;
for(i=1; i<10; i++) {
for(dan=2; dan<10; dan++) {
System.out.print(dan + "*" + i + "=" + dan*i +"\t");
}System.out.println();
}
}
}
2*1=2 3*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=9
2*2=4 3*2=6 4*2=8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
2*3=6 3*3=9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27
2*4=8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36
2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45
2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54
2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63
2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72
2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
[QUIZ1] 숫자 맞추기 게임
- 숫자의 범위는 1 ~ 100 사이로 한다.
- 컴퓨터가 숫자를 발생하면 사용자가 맞추는 프로그램이다.
[실행결과]
1 ~ 100 사이의 숫자가 발생했습니다. *87
숫자 입력 : 50
50보다 큰 숫자입니다.
숫자 입력 : 95
95보다 작은 숫자입니다.
~~~
숫자 입력 : 87
딩동댕...x번만에 맞추셨습니다.
NumberGame.java
package while_;
import java.util.Scanner;
public class NumberGame {
public static void main(String[] args) {
int count = 0;
int com, user;
System.out.println("1 ~ 100 사이의 숫자가 발생했습니다.");
com = (int)(Math.random() * 100 + 1);
//System.out.println(com); 디버그 처리
while(true) {
Scanner scan = new Scanner(System.in);
System.out.print("숫자 입력 : ");
user = scan.nextInt();
count++;
if(user < com) {
System.out.println(user + "보다 큰 숫자입니다.");
}
else if(user > com) {
System.out.println(user + "보다 작은 숫자입니다.");
}
else {
break;
}
}
System.out.println("딩동댕... " + count + "번만에 맞추셨습니다.");
}
}
1 ~ 100 사이의 숫자가 발생했습니다.
숫자 입력 : 50
50보다 작은 숫자입니다.
숫자 입력 : 30
30보다 작은 숫자입니다.
숫자 입력 : 20
20보다 큰 숫자입니다.
숫자 입력 : 25
25보다 작은 숫자입니다.
숫자 입력 : 22
22보다 작은 숫자입니다.
숫자 입력 : 21
딩동댕... 6번만에 맞추셨습니다.
디버그 처리해보면서 실행잘되고 있는지 확인해가는 과정도 매우 중요하다 ★
[QUIZ 2] 대문자(A~Z)를 난수를 100개 발생하여 출력하시오
- 1줄에 10개씩 출력
- 100개중에서 A가 몇개 나왔는지 개수를 출력
[실행결과]
H D D R A Y A K T H
C X F Z B S L Y Q D
H K O H O B Z N J T
U P A P K Q G W F A
S U D Z I V J U O G
L M Z L H U Y D Q R
F T I Z A W E O F Z
A Y C I U Z O B C G
H G Y Z V P I R L G
Y H R R M H Y S B P
A의 개수 = 6
For04.java
package for_;
public class For04 {
public static void main(String[] args) {
char a;
int count_A = 0;
for(int i=1; i<=100; i++) {
a = (char)(Math.random() * ('Z'-'A'+1) + 'A');
//com = (char)(Math.random() * 26 + 65);
System.out.print(a + " ");
if(i % 10 ==0) { //i가 count 역할한다는거 확인 !!
System.out.println();
}
if(a == 'A') {
count_A++;
}
}
System.out.println();
System.out.println("A의 개수 = " + count_A);
}
}
E X K U K Z F V X P
E U C S X D Y T A O
T Q E A A L G K X L
P H U O V C L V B U
C K L P R S V X Z B
C D J C I P U I K M
N R U Q P X G J H T
H F T Q H V O V K E
Q P X H X K O H G E
I P D M K B Z F V N
A의 개수 = 3
[QUIZ 3] x와 y의 제곱승을 구하시오 - while, for
- y의 값이 음수가 들어오면 다시 입력한다.
- x의 값이 0이면 프로그램을 종료한다.
[실행결과]
x : 2
y : 5
2의 5승 32
x : 2
y : -2
y는 양수이어야합니다.
y : 7
2의 7승 128
x : 0
프로그램을 종료합니다.
For05.java
package for_;
import java.util.Scanner;
public class For05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x, y, mul = 1;
while(true) {
System.out.println();
System.out.print("x : ");
x = scan.nextInt();
if(x == 0)break;
do {
System.out.print("y : ");
y = scan.nextInt();
if(y>=0) break;
else System.out.println("y는 양수이어야 힙니다. \n");
}while(true);
//제곱승
for(int i=1; i<=y; i++) {
mul *= x;
//mul = mul * x;
}
System.out.println(x + "의 " + y + "승 " + mul);
mul = 1; // 초기화 해줘야함 !!!!!!!!!!!!!!!!★★★★★
}//while
System.out.println("프로그램을 종료합니다.");
}
}
x : 2
y : 5
2의 5승 32
x : 2
y : -3
y는 양수이어야 힙니다.
y : -8
y는 양수이어야 힙니다.
y : 6
2의 6승 64
x : 0
프로그램을 종료합니다.
내가 실수하고 넘어간 부분은 바로 mul 변수를 초기화하지 않았다는 것이다.
mul 변수 초기화해야 하는 이유는 mul이 이전 반복에서 누적된 값을 가지고 있기 때문이다.
코드를 보면 mul 변수는 각 반복마다 x의 y제곱을 계산하는 데 사용이 된다.
만약 mul 변수를 초기화하지 않으면, 이전 계산의 결과가 다음 계산에 영향을 준다.
예를 들어, 첫 번째 입력에서 x = 2이고 y = 3인 경우 2^3 = 8이 된다.
다음 반복에서 x =3이고 y = 2라고 가정하면, mul은 이미 8로 설정되어 있기 때문에
3^2이 아닌 8 * 3^2 =72가 되어 올바른 결과를 얻지 못하게 된다.
그러니 mul 변수 초기화 시키는 거 잊지 말기 ~★
'JAVA' 카테고리의 다른 글
DAY 3-1 연산 (2024.07.05) (0) | 2024.08.13 |
---|---|
DAY 3-2 if / Switch (2024.07.05) (0) | 2024.08.13 |
DAY 5 - 배열 / 선택정렬 / 버블정렬 (2024.07.09) (0) | 2024.08.13 |
DAY 6 - 다차원 배열 (2024.07.10) (0) | 2024.08.13 |
DAY 7 - 배열 / 클래스(객체) (2024.07.11) (0) | 2024.08.13 |