오늘은 지난 시간에 배운 for 문을 응용하는 수업을 진행하였다
우선 for문을 활용한 기초 예문은
<예문1>
public class Ex02_ForEx {
public static void main(String[] args) {
//1~10까지 순서대로 출력
// 2 4 6 8 10 출력
// 5 4 3 2 1 출력
int i = 0;
for (i = 0; i <= 10; i++ ){
System.out.println("i = " + i);
}for (i = 2; i <= 10; i+=2 ){
System.out.println("i = " + i);
}for (i =5; i>=1; i--){
System.out.println("i = " + i);
}
}
}
for문 안에 조건을 만족하게 하여 출력을 하면 지정한 범위중에 원하는 것만 출력하는것도 가능하다
<예문 2>
package ch06_for;
public class Ex03_forEx {
public static void main(String[] args) {
/**
* 1부터 10까지의 합계를 출력
*/
int sum = 0;
for (int i = 1; i<=10; i++){
sum= sum+i;
System.out.println("i = " + i);
System.out.println("sum = " + sum );
}
System.out.println("for문종료후 sum= " + sum);
}
}
예제 2 는 for문에 조건을 넣어서 1부터 10까지의 합을 출력을 한것이다
전역 변수 sum을 선언 한후 지역변수 i 에 범위를 지정하고 두 변수의 합을 출력하면
"C:\Program Files\Amazon Corretto\jdk17.0.9_8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\lib\idea_rt.jar=51988:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\bin" -Dfile.encoding=UTF-8 -classpath C:\Development\Java\gitex\Java_class\out\production\Java_class ch06_for.Ex03_forEx
i = 1
sum = 1
i = 2
sum = 3
i = 3
sum = 6
i = 4
sum = 10
i = 5
sum = 15
i = 6
sum = 21
i = 7
sum = 28
i = 8
sum = 36
i = 9
sum = 45
i = 10
sum = 55
for문종료후 sum= 55
Process finished with exit code 0
위 처럼 i값과 sum+i 값이 나오게 된다
하지만 위에 예문처럼 실행을 하게되면 출력되는 값이 너무 길어지게 되어 보기엔 좋지 않다
그럴땐 for문 안에 if문을 넣어서 실행을 하면 된다
<예문3>
package ch06_for;
public class Ex04_forEx {
public static void main(String[] args) {
/**
* 1부터 10까지의 합계를 아래와 같이 출력
* 출력예
* 1+2+3+4+5+6+7+8+9+10=55
*
*/
int i =0;
int sum = 0;
for (i = 1; i <=10; i++){
sum += i;
if(i<10){
System.out.print(i+"+");
}else {
System.out.print(i + "=");
}
}
System.out.println(sum);
}
}
예문2 와 다른점은
if문으로 10보다 작은 정수가 오면 +를 출력하고 그 외의 정수가 오면 = 이 출력되게 만들어서 식을 한눈에 볼수있게 바꾸어주었다
<예문4>
package ch06_for;
import java.util.Scanner;
public class Ex05_forEx {
public static void main(String[] args) {
/** 두 개의 정수를 입력 받아서 시작값부터 끝값까지의 합계 출력
* 입력 예
* 시작값 110
* 끝값 555
* 출력 예
* 110붙터 555까지의 합계는 000입니다
*/
Scanner scanner =new Scanner(System.in);
int sum = 0;
System.out.print("시작값= ");
int num1 = scanner.nextInt();
System.out.print("끝값= ");
int num2 = scanner.nextInt();
for (int i =num1; i<=num2; i++){
sum += i;
}
System.out.print("110부터 555까지의 합계는" +sum + "입니다");
}
}
예문 4는 Scanner을 사용하여 정수값을 2개 넣어서 시작값 과 끝값 까지의 합계를 구하였다
예문 2, 예문 3, 과의 차이는 전역변수 sum은 동일 하지만 정수를 입력해서 구하는것 이기 때문에 조건식에서 num1과 sum2를 사용해 주었다
<예문 5>
package ch06_for;
public class Ex_06forEx {
public static void main(String[] args) {
/**
* 1부터 100까지의 숫자중에서 3의 배수만 출력하고 합계도 구하기
*
*/
int sum=0;
for (int i=0; i<=100; i++){
if(i%3==0){
sum+= i;
}
}
System.out.println(sum);
}
}
예문 5는 for문에서 범위 1~100까지 범위중에 if문을 사용하여 3의 배수끼리의 합을 출력한 내용이다
변수 i에 3을 나눠서 나머지가 0이 되는 수가 3의 배수이기때문에 i%3==0 이란 식을 사용하였다
-중첩 for문-
중첩 for문 이란 for문 안에 for문을 사용하여 출력을 하는방식이다
<기본 예시>
package ch06_for;
public class Ex_07NestedFor {
public static void main(String[] args) {
/**
* 중첩 for문
*
*/
System.out.println("바깥 for문 시작");
for (int i= 1; i <= 2; i++){
System.out.println("안쪽 for문 시작");
for (int j = 1; j<=3; j++){
System.out.print("j = " + j);
System.out.println(" i = " +i);
}
System.out.println("안쪽 for문 종료");
}
System.out.println("바깥 for문 종료");
}
}
중첩 for문은 밖에 있는 for문이 한번 실행 될때 마다 밖에 있는 for문이 실행 되는것이다
이걸 가장 쉽게 알아보는것이 구구단이다
<예문 6>
package ch06_for;
public class Ex_08ForEx {
public static void main(String[] args) {
for (int i = 2; i <= 9; i++) {//몇단
System.out.println(i + "단");
for (int j = 1; j <= 9; j++) {// 곱하는수 (1~9)
System.out.print(i + "x" + j + "=" + (i * j) + " ");
}
System.out.println();
}
예문 6을 보게 되면 구구단은 2단~9단까지 실행을 하기위해 변수값을 2부터 9와 같거나작은수로 지정을 하였고
안쪽 for문으로 곱하는 수를 지정하였다
"C:\Program Files\Amazon Corretto\jdk17.0.9_8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\lib\idea_rt.jar=52095:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\bin" -Dfile.encoding=UTF-8 -classpath C:\Development\Java\gitex\Java_class\out\production\Java_class ch06_for.Ex_08ForEx
2단
2x1=2 2x2=4 2x3=6 2x4=8 2x5=10 2x6=12 2x7=14 2x8=16 2x9=18
3단
3x1=3 3x2=6 3x3=9 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27
4단
4x1=4 4x2=8 4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36
5단
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
6단
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54
7단
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63
8단
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72
9단
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
그럼 바깥 for문이 2가 실행 될때 안쪽 for문 1~9까지가 모두 실행이 되는것이다
<별찍기>
package ch06_for;
public class Ex11_forEx {
public static void main(String[] args) {
/** 별 찍기
* 출력
* *
* **
* ***
* ****
* *****
*
*/
for (int i = 1; i <= 5; i++) { // 줄수, 별을 출력할 횟수
for (int j = 0; j < i; j++) { //별을 줄수 만큼 출력
System.out.print("*");
}
System.out.println(); // 줄을 바꾸기 위한 용도
}
}
}
중첩 for문을 사용하여 만든 별찍기 이다
바깥 for문은 줄수
안쪽 for문은 별을 줄수만큼 출력 해주는 용도
바꿔 말하게 되면 바깥 for문이 실행이 한번 될때 마다 안쪽 for문이 실행이 되어서
*
**
***
****
*****
이런 모양이 나오게 된다
그렇다면 for문을 중첩으로 사용하여 2가지 값을 얻어야할때는 어떻게 해야할까?
<예문7>
/** 4x + 5y = 60 을 만족하는 x,y 값을 출력
* x , y 는 1이상 10 이하인 정수
*
* 출력(정답)
* 5, 8 , 10, 4
*/
int num1 = 4;
int num2 = 5;
int sum = 60;
int x = 1;
int y = 1;
for (x = 1; x <= 10; x++) {
for (y = 1; y <= 10; y++) {
if((num1*x)+(num2*y)==sum){
System.out.println("x = " +x + "y = "+ y);
}
}
}
}
}
예문 7을 보면 4x + 5y =60 을 만족하는 x,y 값을 얻어야한다
그렇다면 바깥 for문에 x값에 조건을 입력하고 안쪽 for문에 y값의 조건을 넣은 후
if문으로 4x + 5y = 60이 참이 될때 x값과 y값을 출력 해달라고 하였다
<예문8>
public class Ex10_forEx {
public static void main(String[] args) {
/** 정수 하나를 입력 받고
* 1부터 입력받은 정수까지의 정수 중에서
* 2의 배수 3의 배수를 제외한 총 합 출력
*/
Scanner scanner = new Scanner(System.in);
int sum = 0;
System.out.print("정수");
int num1 = scanner.nextInt();
for (int i = 1; i <= num1; i++) {
for (i = 1; i <= num1; i++) {
if (i % 2 != 0 && i % 3 != 0) {
sum += i;
}
}
System.out.println("=" + sum);
}
}
}
앞전에서는 포함하는값을 더하는 식이였다면 예문 8에서는 제외한 나머지 값을 합한 값을 출력하였다
제외한 값을 구하는 연산은 지난 시간에 배운 NOT 연산을 사용하였다
'개발일지' 카테고리의 다른 글
개발 일지 10일차 -타입 , 배열 - (0) | 2023.12.07 |
---|---|
개발 일지 9일차 -While문 , Random 메서드- (2) | 2023.12.06 |
개발일지 7일차 -Switch case & for반복문- (0) | 2023.12.04 |
개발일지 6일차 - <Scanner, 자바 제어문> (1) | 2023.12.01 |
개발일지 5일차 -변수,연산자- (2) | 2023.11.30 |