조건문과 반복문 실습 3
1. for 문
package p05.for_basic;
import java.util.Scanner;
// for (초기값; 조건식; 증감연산) { A }
// - 초기값과 마지막값이 결정되어 있는 경우에 많이 사용
public class ForBasic {
public static void main(String[] args) {
int sum = 0;
Scanner input = new Scanner(System.in);
// for (int i=0; i<=10; i++) {
// System.out.println("Java씨, 존경합니다.");
// }
// System.out.println("1부터 시작하여 합계를 구할 최종 숫자를 입력하세요.");
System.out.println("합계를 구할 최종 숫자를 입력하세요.");
int startNumber = input.nextInt();
int lastNumber = input.nextInt();
for (int number=startNumber; number <= lastNumber; number++) {
sum += number;
}
System.out.println(startNumber + " ~ " + lastNumber + "의 합= " + sum);
}
}
- for 문은 입력된 값을 반복해주는 명령이다.
- 위 코딩은 우리가 입력한 첫번째 값과 마지막 값 사이에 있는 값들을 모두 더해주는 반복문이다.
- 먼저 우리가 직접 값을 입력하기 위해 Scanner를 사용해준다.
- 그 다음 첫번째 값에는 starNumber라는 변수를 마지막 값에는 lastNumber라는 변수를 만들어 준다.
- 그리고 for을 이용해서 첫번째 값부터 마지막 값이 나올 때까지 계속 반복해주는 반복문을 만들어 준다.
2. for 문 2 (구구단 출력하기)
package p05.for_basic;
// 중첩 for문: for문 안에 for문이 있는 경우
// 9*9 단 coding
public class ForBasic2 {
public static void main(String[] args) {
System.out.println("구구단은 다음과 같습니다.");
for (int dan=2; dan<=9; dan++) {
System.out.println(dan + "단 출력값");
for (int num=1; num<=9; num++) {
System.out.println(dan + " * " + num + " = " + (dan*num));
}
System.out.println();
}
}
}
- 위에 코딩은 구구단을 출력하는 코딩이다. 구구단은 2단부터 9단까지 출력한다.
- 먼저 for 문을 이용해서 첫번째 시작값을 2단이니 2로 주고, 마지막 값은 9단이므로 9로 해준다.
- for (int dan =2; dan <= 9; dan++)라는 코딩은 구구단이 몇단인지 알려주는 코딩이다
- 그 다음 한번 더 for 문을 사용해서 구구단의 뒷자리 수를 나오는 코딩을 해준다 (예를 들어 2 * 1 = 2라는 결과에서 뒤에 1, 2, 3...9를 출력해주는 코딩이다)
- 그리고 print를 이용하여 (dan + " * " + num + "=" + (dan*num))을 해주면 2단부터 9단까지의 구구단이 출력된다.
- 여기서, dan은 첫번째 for문이고, num은 두번째 for문이다
3. for 문 3 (3개의 중첩 for문)
package p05.for_basic;
// 3개의 중첩 for문
// - 전체 실행 횟수 : 3개 이상의 중첩 for문을 사용하면 프로그램 실행 속도를 크게 저하시킬 수 있어 실무적으로는 가급적 사용하지 말 것
// -예 : 10*10*10 => 1000번
// -예 : 10000*10000*10000 => 1,000,000,000,000번
// - 어쩔 수 없이 사용해야만 한다면 반드시 전체 반복 횟수를 확인하고 사용할 것
public class ForBasic3 {
public static void main(String[] args) {
for (int i=1; i<10; i++) {
for (int j=1; j<10; j++) {
for (int k=1; k<10; k++) {
System.out.println("3개의 숫자의 곱 = " + (i*j*k));
}
}
}
// for (int i=1; i<10000; i++) {
// for (int j=1; j<10000; j++) {
// for (int k=1; k<10000; k++) {
// System.out.println("3개의 숫자의 곱= " + (i*j*k));
// }
// }
// }
}
}
- 3개의 for 문은 실행속도가 저하될 수 있기때문에 실무에서는 가급적 쓰지않는다.
- 위의 코드는 1부터 9까지의 3개의 숫자를 다 곱하는 형식의 코드이다.
- Ex) 1*1*1 =1, 2*1*1 = 2 .....9*9*9 = 729
4. for 문 안에 while 문 있는 경우
package p06.hybrid_repeat;
public class HybridRepeatEx {
public static void main(String[] args) {
for (int i=0; i<5; i++) {
int j=0;
while (j <i) {
System.out.print(j + " ");
j++;
}
// print + ln(line, enter key 역할)
System.out.println();
}
}
}
- 이번 코드는 for 문을 이용해서 i를 반복시켜 주고, 그 다음 while 문을 써서 조건식으로 만들어주는 코딩이다.
- 먼저 j는 0부터 시작이고 i도 0부터 시작이여서 처음에는 아무것도 안나온다.
- 그 밑에는 i는 for 문 때문에 1증가해서 1이고 j는 0이므로 0이 출력되고, 다시 for 문으로 돌아간다.
- 이런 과정이 i가 5가 될때까지 반복하고 5가 되는 순간 종료하게 된다.
5. while 문 안에 for 문이 있는 경우
package p06.hybrid_repeat;
// while문 안에 for문이 있는 경우
public class HybridRepeatEx2 {
public static void main(String[] args) {
int i = 0;
while (i<5) {
for (int j=i; j>1; j--) {
System.out.print(j + " ");
}
System.out.println("***********");
i++;
}
}
- 이번 코드는 위에 코드와 다르게 while 문 안에 for 문이 있는경우이다.
- 먼저 while 문으로 i가 5미만이면 true라는 식을 만들어준다.
- 그 다음 for 문으로 j가 i라고 해주는 반복문을 만들어준다.
- 처음에는 j가 0이기때문에 false여서 "****************"것 만 나오게 되고, 두번째도 j가 1인데 1을 초과하지 못해서 같은 값이 나오게 된다.
- 세번째 반복에서는 j가 2여서 2는 출력되고 그 뒤는 *이 출력되게 된다.
- 네번째는 j가 3이여서 3 2가 출력되고 그 뒤는 *이 출력되는 방식으로 다섯번째까지 출력이 된다.
6. do ~ while 문 안에 for 문이 있는 경우
package p06.hybrid_repeat;
// do~while문 안에 for문 사용
public class HybridRepeatEx4 {
public static void main(String[] args) {
int i = 1;
do {
int num = 1;
for (int j=1; j<=i; j++) {
System.out.print(num + "G");
num += 2; // num = num + 2;
}
System.out.println();
i++;
} while (i<=5);
}
}
- 이번에는 do ~ while 문 안에 for 문이 있는 경우이다.
- 먼저 do 안에 for 문을 넣어 반복문을 만들고 do 밖에 while을 써서 조건식을 만들어준다.
- for 문은 j가 1부터 true이면 2씩 증가하는 반복문이다.
7. break 문(랜덤으로 나오는 번호가 6이 나올 때까지 반복하고 6이 나오면 종료하는 코딩)
package p07.break_continue;
public class BreakEx {
public static void main(String[] args) {
int num = 0;
while (num != 6) {
num = (int) (Math.random()*6) +1; // 1, 2, 3, 4, 5, 6
System.out.println("주사위번호 = " + num);
if (num == 6) { // 조건식 역할
break;
}
}
System.out.println("주사위 게임 종료");
}
}
- 이번 코딩은 랜덤으로 숫자가 나오게 하고 그 숫자가 6이 나올때까지 계속 반복하되, 6이 나오면 종료하는 코딩이다.
- 먼저 while 문을 써서 num이 6이 아니면 true가 되도록 만들어주고, 랜덤으로 숫자가 나와야해서 Math.random을 써준다.
- 그리고 if 문을 써서 num이 6이 나오면 break 문을 써서 종료시킨다.
8. break 문 2
package p07.break_continue;
import java.util.Scanner;
// -1을 입력받으면 while문을 빠져나오는 프로그램
public class BreakEx2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = 0;
while (true) {
if (in.nextInt() == -1) {
break;
}
num++;
}
System.out.println("입력된 숫자 개수는 " + num);
}
}
- 위 코드는 내가 입력한 숫자의 갯수를 세어주는 코딩이다.
- 먼저 우리가 직접 숫자를 입력해야하기 때문에 Scanner를 사용해준다.
- 그리고 -1을 입력하면 while 문을 빠져나오게 해준다.
9. continue 문
package p07.break_continue;
public class ContinueEx {
public static void main(String[] args) {
int sum = 0;
// 1~10사이의 짝수의 합
for (int i=1; i<=10; i++) {
if (i%2 !=0) { // 홀수의 경우
continue;
}
sum += i;
}
System.out.println("1~10사이의 짝수의 합= " +sum);
}
}
- continue는 break와 반대로 계속 진행하라는 명령어이다.
- 위 코드는 for 문과 if 문을 이용하여 1부터 10까지 홀수의 합만 구하는 코딩이다.
- for 문에는 10까지 반복하는 조건문을 만들어주고, if 문에는 %를 이용해서 홀수의 값을 구해준다.
오늘은 조건문과 반복문에 대한 3번째 실습을 하였습니다. 조건문과 반복문은 앞으로 코딩을 할 때도 많이 사용되므로 많이 사용해서 손에 익혀두는 것이 좋습니다. 아직 저도 익숙하지는 않지만 좀 더 복습하여 익숙해지도록 해보겠습니다. 다음에는 몇가지 퀴즈로 조건문과 반복문을 실습해보겠습니다.^^