열심히 끝까지

디바이스 융합 자바(Java) day04 - 중첩반복문,배열 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)

디바이스 융합 자바(Java) day04 - 중첩반복문,배열

노유림 2022. 6. 10. 16:47

-------------------------------
6/9 과제 강사님 답안
방법1
package class01;

import java.util.Scanner;

public class Test01 {
       public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              System.out.print("정수 : ");
              int a = sc.nextInt();
              System.out.print("정수 : ");
              int b = sc.nextInt();

              if(a>b) {
                     int tmp = a;
                     a = b;
                     b = tmp;
              }

              int i;
              for(i = a; i >= 1; i--) {
                     if(a % i ==0 && b % i == 0) {
                            break;
                     }
              }

              System.out.println(a + "와(과) " + b + "의 ");
              System.out.println("최대공약수는 " + i + "이고");
              System.out.println("최소공배수는 " + (a * b / i) + "입니다.");

       } 
}
-------------
방법2
import java.util.Scanner;

public class Test01 {
       public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              System.out.print("정수 : ");
              int a = sc.nextInt();
              System.out.print("정수 : ");
              int b = sc.nextInt();

              if(a>b) {
                     int tmp = a;
                     a = b;
                     b = tmp;
              }

              for(int i = a; i >= 1; i--) {
                     if(a % i ==0 && b % i == 0) {
                            System.out.println(a + "와(과) " + b + "의 ");
                            System.out.println("최대공약수는 " + i + "이고");
                            System.out.println("최소공배수는 " + (a * b / i) + "입니다.");
                            break;
                     }
              }
       } 
}
--------------------------------
디버깅표
a      b       i         i>=1
--------------------------
4      8       4           T  << 바로 break; 중간문을 안만남
---------------------------------------


// 굳이 따로 변수를 만들어서 저장하지 않고 i 그대로 사용한다.

[중첩 반복문]
모든 제어문이 중첩되는건 당연하다.
     하지만 3중첩은 거의 하지 않음. 개발자 코드 보기 힘들어짐...
     -> 별찍기
     => 원래는 "디버깅표" 연습시키기 위해 타이틀이 저렇게 나옴


[구구단]
package class01;

public class Test02 {
       public static void main(String[] args) {
              // [중첩 반복문]

              // 구구단
              for(int a = 2; a <= 9; a++) {
                     // 2~9 => 8번 돈다
                     for(int i = 1; i <= 9; i++) {
                            // 9번 x 8번 => 72번
                            System.out.println(a + " x " + i + " = " + a * i);
                     }
                     System.out.println("-------------");
              }
       }
}

디버깅표
a         a<=9           i          i<=9            
------------------------------------------------------
2            T             1             T    2 x 1 = 2
                            2             T    2 x 2 = 4
                            3             T    2 x 3 = 6
                            ...        
                            9             T    2 x 9 = 18
                           10            F   ------------------
3            T             1             T    3 x 1 = 3
                            2             T    3 x 2 = 6
                            3             T    3 x 3 = 9
                            ...        
                            9             T    3 x 9 = 27
                           10            F   ------------------     

*last point*
안쪽 for문이 다 돌아야 바깥쪽 for문이 실행된다.
[별찍기]
*****
*****
***** 찍기

package class02;

public class Test03 {
       public static void main(String[] args) {

              for(int a = 1; a <= 3; a++) {
                     for(int i = 1; i <= 5; i++) {
                            System.out.print("*");
                     }
                     System.out.println();
              }
       }
}

-> 숫자로 변경
package class02;

public class Test03 {
       public static void main(String[] args) {

              for(int a = 1; a <= 3; a++) {
                     for(int i = 1; i <= 5; i++) {
                            System.out.print("(" + a + ", " + i + ")");
                     }
                     System.out.println();
              }
       }
}

디버깅표
a       a<=3          i            i<=5          
------------------------------------------
1          T            1               T        *
                         2               T        *
                        .....
                         5               T        *
                         6               F      System.out.println();
2          T            1               T        * 

-------------------------------
*
**
***
****
***** 찍기

package class02;

public class Test04 {
       public static void main(String[] args) {

              for(int i = 1; i <= 5; i++) {
                     for(int j = 1; j <= i; j++) {
                            System.out.print("*");
                     }
                     System.out.println();
              }

              for(int i = 1; i <= 5; i++) {
                     for(int j = 1; j <= 6-i; j++) {
                            System.out.print("*");
                     }
                     System.out.println();
              }
       }
}
디버깅표
i       i<=5          j          j<=변수
-----------------------------------------------
1         T            1              T         *
                        2              F        줄바꿈
2         T            1              T         *
                        2              T         *
                        3              F        줄바꿈
3         T            1              T         *
                        2              T         *
                        3              T         *
                        4              F        줄바꿈


디버깅표
i         i<=5          j             ?
-------------------------------------------------
1          T            1             T      *
                         2             T      *
                         3             T      *
                         4             T      *
                         5             T      *
                         6             F      줄바꿈
2          T            1             T      *
                         2             T      *
                         3             T      *
                         4             T      *
                         5             F      줄바꿈
3          T            1             T      *
                         2             T      *
                         3             T      *
                         4             F      줄바꿈

-----------------------------------
j--로 실행
package class02;

public class Test05 {
       public static void main(String[] args) {
              for(int i = 1; i <= 5; i++) {
                     for(int j = 5; j >=i ; j--) {
                            System.out.print("*");
                     }
              System.out.println();
              }
       }
}

디버깅표
1          T            5             T      *
                         4             T      *
                         3             T      *
                         2             T      *
                         1             T      *
                         0             F      줄바꿈
2          T            5             T      *
                         4             T      *
                         3             T      *
                         2             T      *
                         1             F      줄바꿈
3          T            5             T      *
                         4             T      *
                         3             T      *
                         2             F      줄바꿈

 

-----------------------------------------

 

지난 날 수업
1. 출력, 주석
2. 변수 3요소 : 공간, "자료형", 식별자
3. 연산자 우선순위 -> 디버깅표
4. 제어문 : 조건문 / 반복문


---------------------------------------------------
오늘 자 수업
5. "배열" -> for문 "자료구조"

"서로 관련된 데이터를 한 공간에서 관리하면 좋겠다...."
     ==> 이래서 탄생한 것이 "배열!!"

자료형 int 뒤에 [](중괄호)를 쓰면 자료형을 저장하는 배열 만듦
- 서랍장에 2번째 칸 <- 이런 칸 하나하나 배열에서는 index(인덱스)라고 함
인덱스는 무조건 [0]부터 시작! ★

☆배열 3요소★
1. 서로 관련된 데이터
2. 서로 동일한 자료형(int면 int, double이면 double, ..)
3. *몇 개인지 분명히 알아야합니다!*
        ㄴ 이것때문에 많이 헷갈려 함 
        ㄴ 이래서 for문과 배열이 잘 어울림    


package class06;

public class Test06 {
       public static void main(String[] args) {

              // [배열] 
              int stu1 = 80;
              int stu2 = 90;
              int stu3 = 85;
              int [] stu = {80, 90, 85};

 

              for(int i = 0; i < 3; i++) {
                     System.out.println("학생" + (i+1) + " : " + stu[i]);
              }
              // 서로 관련된 데이터를 한 공간에서 관리하면 좋겠다....
       }
}

 


>>다음 사진에 에러!!! (위의 코드를 바꾸기 전 에러)

? Exception 이유 및 의미 
- 범위 지정이 잘못되었습니다.           
- 인덱스 3은 존재하지 않습니다.
- Test06의 17번째 줄에서 에러가 발생했습니다!

-------------------------------------------
package class06;

public class Test07 {
       public static void main(String[] args) {
              // 유지보수성이 좋지 않는 프로그램(사람이 바뀐 값을 직접 바꿔야하는 프로그래밍)
              // 학생부 프로그램
              int [] stu = {10,20,30,40,50,45,100};

              // . -> 함수/키워드 : 반환값 - 제작자
              for(int i = 0; i< stu.length; i++) { // 배열의 요소의 개수(==배열의 길이)
                     System.out.println("학생 " + (i+1) + "번의 성적은 " + stu[i] + "점");
              }
       }
}


*
? . -> 함수/키워드 : 반환값 - 제작자
ex )     hashCode() : int - Object
*

배열이름.length : 요소의 개수(배열의 길이)
--------------------------------------------------
- 배열을 쓰고 싶을 때 약식으로 표현 가능하지만
  미리 공간을 할당받아서 생성한다.
- 배열 객체는 초기화를 디폴트로 해준다!
ex ) *int[] arr = new int[5]*

ex ) sc.nextLine();
      S(주어) : sc = 주어가 될 수 있는 것들은 객체!
                  주어가 될 수 있다는 것은 동사를 가질 수 있다는 뜻!
                  함수를 주체적으로 수행할 수 있다는 뜻!
      V(동사) : nextLine() 
      O(목적어) : ()


      str.equals("apple") <<
      str=="빨강"  -> 연산자의 대상은 변수인데,
                             str은 변수가 아닙니다! 객체였습니다!.
      . >> 주어 == 함수가 주체적으로 수행 가능


package class06;

public class Test08 {
       public static void main(String[] args) {

              int[] arr = new int[5];

              for(int i = 0; i < 5; i++) {
                     System.out.println(arr[i]);
              }
              // 1. 오류
              // 2. 이상한 문자, 쓰레기값
              // 3. 0 ☆★☆★ 답
       }
}

------------------------------------------------
package class06;

import java.util.Scanner;

public class Test08 {
       public static void main(String[] args) {

              int cnt = 5; // 여기에 학생수 넣으시면 됩니다!
              int[] arr = new int[cnt];
              // 배열 쓰고 싶으니까 그만큼의 공간을 생성해줘!

              Scanner sc = new Scanner(System.in);

              int i = 0;
              while(true) {
                     System.out.print("학생" + (i+1) +"성적입력 : ");
                     arr[i] = sc.nextInt();
                     if(arr[i] < 0 || 100 < arr[i]) {
                            // 경계값 검사!! ( 0과 100을 넣어봄으로서... )
                            System.out.println("1~100까지만 입력 가능!");
                            continue;
                     }
                     i++;
                     if(i == arr.length) {
                            break;
                     }
              }
              for(i = 0; i < arr.length; i++) {
                     System.out.println(arr[i]);
              }
       }
}