TIL 2022-09-20 For문 / Continue / Break / Array

JYR00·2022년 9월 20일
0

TIL

목록 보기
11/60

for(초기문; 조건식; 반복 후 작업(카운트)){
작업문
}

for vs while

public class For {
    public static void main(String[] args) {
        System.out.println("\n-------for문--------\n");
        for (int i=0; i<10; i++){
            System.out.println(i);
        }

        System.out.println("\n-------while문--------\n");
        int count=0;
        while(count<10){
            System.out.println(count);
            count++;
        }
    }
}

for문과 while문과 차이점
1.초기화 변수와 초기화 변수 카운트를 for문의 설정 부분에 입력
2.초기화 변수가 for문의 설정 부분에 입력되면서 for문의 지역변수로 사용되어 같은 이름의 변수를 계속 사용할 수 있다.
3.초기화 변수 카운트가 항상 마지막에 동작함.(for문의 공식)
4. while은 기존 변수명 재사용 불가하다. 기존의 변수를 재활용하고 저장된 값을 초기화하여 사용해야 함.

 System.out.println("\n-------while문--------\n");
      int count=0;
    while(count<10){
     System.out.println(count);
         count++; //while은 내부에 있다. 위치에 따라 값이 달라짐.
      }
       int count=0; 동일한 이름의 변수를 선언할 수 없음.
      while(count<10){
           System.out.println(count);
        count++;
      }
 문제 1) 아래의 while문을 for문으로 변환하여 출력하세요.
        int hit=0;
        while(hit<100){
         hit++;
         System.out.println("나무를"+hit+"번 찍었습니다.");

            if(hit==100){
                System.out.println("나무가 넘어갑니다.");
         }
   }

       int i=0;
     for( i=1; i<11; i++){
           System.out.println("나무를"+i+"번 찍었습니다.");
    }
      if(i==10){
         System.out.println("나무가 넘어갑니다.");
     }

  문제2) 원하는 단수의 구구단을 출력하는 프로그램을 for문 사용하여 출력
        System.out.println("원하는 단의 구구단을 말하시오");
        Scanner scanner=new Scanner(System.in);
        int dan = scanner.nextInt();
        int j;
        int total;

        for(j=1; j<10; j++){
            total=dan*j;
            System.out.println(dan+"*"+j+"="+total);
        }

  String star ="";
    for(int s=0; s<5; s++){
        star +="*";
        System.out.println(star);
        }
 for(int i=2; i<10; i++ ){
            System.out.println("--------"+i+"단------");
            for(int j=1; j<10; j++){
                System.out.println(i+"*"+j+"="+(i*j));
            }
        }

Break vs Continue

break: 반복문 내에서 break만나면 해당 반복문 즉시 중단
break문을 주로 많이 사용된다.

 for (int i = 0; i < 10; i++) {
            if (i == 5) {
                break;
            }
            System.out.println("for문 사용시 현재 i의 값 :" + i);

        }
  System.out.println("\n------continue------\n");
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                continue;
            }
            System.out.println("for문 사용시 현재 i의 값 :" + i);
        }

문제4) 구구단 전체를 출력하는 프로그램을 작성하세요.
        조건1)사용자 입력을 받고 사용자 입력으로 2~9까지의 숫자를 입력받고 해당하는
        단수의 구구단을 출력
        조건2) 사용자 입력으로 받은 단수에 break와 continue를 사용하여 구구단 작성
         Scanner scanner = new Scanner(System.in);
        System.out.println("숫자를 입력해주세요");
        int num1=scanner.nextInt();
        for(int i=2; i<10; i++){
            if(i==num1){
                break;
            }
            System.out.println("\n------"+i+"단-------\n");
            for(int j=1; j<10; j++){
                System.out.println(i + "*" + j + "=" + (i * j));
            }
        }
        for(int i=2; i<10; i++){
            if(i==num1){
                continue;
            }
            System.out.println("\n------"+i+"단-------\n");
            for(int j=1; j<10; j++){
                System.out.println(i + "*" + j + "=" + (i * j));
            }

Array

  • 배열 : 하나의 이름으로 여러 데이터를저장하기 위한 데이터 타입
  • 자바의 배열은 동일한 데이터 타입의 데이터만 저장할 수 있다.
  • 배열은 index를 가지고 있으며 데이터를 index를 통해서 구분함
  • index는 0부터 시작
  • new키워드를 사용해서 배열을 초기화시 해당 데이터 타입의 초기값으로 초기화됨
  • 지정된 크기 이상의 index에 접근 시 오류발생.

사용법 :
선언 : 1) 데이터타입 배열명 [] = new 데이터타입[크기];
2) 데이터 타입 배열명[]; 배열명= new 데이터타입[크기];
3) 데이터 타입 배열명 []={데이터1, 데이터2, 데이터3, ,,,};
사용 : 1.배열명[index]; //지정한 index에 있는 데이터를 가져옴.
2.배열명[index]=데이터; // 지정한 index에 데이터를 저장.

    빈 배열 선언, 메모리 상에 array1이란 빈 배열을 등록, 해당 배열을 사용 시
    반드시 초기화 작업을 해야 한다

첫 번째 방법

 int arrray1[];
//        System.out.println(arrray1); 초기화하지 않은 배열 사용시 오류
        arrray1 = new int[5]; // 배열을 초기화함.
        System.out.println("배열 array1의 메모리주소: " + arrray1); //초기화하니까 출력됨.[I@43a25848-메모리주소 데이터 없으니까 데이터는 안나옴.
        System.out.println("배열 array1의 index 0의 값: " + arrray1[0]);
        arrray1[2] = 10;
        System.out.println("배열 array1의 index 2의 값: " + arrray1[2]);
        System.out.println("배열 array1의 index 4의 값: " + arrray1[4]); //이래도 0으로 출력됨
//        System.out.println("배열 array1의 index 4의 값: "+arrray1[5]); 지정된 크기 이상의 index에 접근 시 오류발생.
        System.out.println("배열 array1의 길이: " + arrray1.length); //해당 배열의 길이 알려줌

두 번째 방법

int arrray2[] = new int[5];

        System.out.println("배열 array2의 메모리주소: " + arrray2);
        System.out.println("배열 array2의 index 0의 값: " + arrray2[0]);
        arrray2[2] = 20;
        System.out.println("배열 array1의 index 2의 값: " + arrray2[2]);
        System.out.println("배열 array2의 index 4의 값: " + arrray2[4]);
        System.out.println("배열 array2의 길이: " + arrray2.length);

세 번째 방법

        int array3[] = {10, 20, 30, 40, 50}; //{}안의 값만큼 길이가 자동으로 정해진다.
        System.out.println("배열 array3의 메모리주소: " + array3);
        System.out.println("배열 array3의 index 0의 값: " + array3[0]);
        array3[2] = 300;
        System.out.println("배열 array3의 index 2의 값: " + array3[2]);
        System.out.println("배열 array3의 index 4의 값: " + array3[4]);
        System.out.println("배열 array3의 길이: " + array3.length);

세 번째 방법 주의사항

int array4[];
        array4={10,20,30,40,50}; //반드시 선언과 동시에 사용해야 한다. 오류발생, 무조건 new를 사용해야한다.
        아래처럼 해야한다.
        배열을 먼저 선언한고 데이터를 나중에 입력하는 1번 형식으로 배열을 선언 시
        3번 형식의 데이터 입력은 불가능함.
        array4=new int[5]; //무조건 new사용해야 한다.
        array4[0]=10;
        array4[1]=20;
        array4[2]=30;
        array4[3]=40;
        array4[4]=50;

문제

 // 문제5) int 타입의 변수 intArray를 생성하고 크기를 10으로 설정한 후 각 index에 1-10까지의 데이터를 입력하고
//        저장된 데이터를 출력하세요.
 int intArray[] = {1, 2, 3, 4, 5,6,7,8,9,10};
        System.out.println(intArray[0]);
        System.out.println(intArray[1]);
        System.out.println(intArray[2]);
        System.out.println(intArray[3]);
        System.out.println(intArray[4]);
        System.out.println(intArray[4]);
        System.out.println(intArray[6]);
        System.out.println(intArray[7]);
        System.out.println(intArray[8]);
        System.out.println(intArray[9]);
        
        System.out.println(intArray[0]);
        System.out.println(intArray[1]);
        System.out.println(intArray[2]);
        System.out.println(intArray[3]);
        System.out.println(intArray[4]);
        System.out.println(intArray[4]);
        System.out.println(intArray[6]);
        System.out.println(intArray[7]);
        System.out.println(intArray[8]);
        System.out.println(intArray[9]);
문제6) 문제 5의 intArray에 저장된 값을 모두 합하는 프로그램을 작성하세요
 System.out.println(intArray[0]+ intArray[1]+intArray[2]+intArray[3]+intArray[4]+intArray[5]+intArray[6]+
                intArray[7]+intArray[8]+intArray[9]);
                
int total=0;
        total = intArray[0]+ intArray[1]+intArray[2]+intArray[3]+intArray[4]+intArray[5]+intArray[6]+
                intArray[7]+intArray[8]+intArray[9];
        System.out.println(total);                

레퍼런스 타입

레퍼런스는 주소를 저장하고 있다.

  int a=10;
        int b=20;
//      변수 a의 값을 변수 b에 복사하여 넘겨줌.
        System.out.println("변수 a의 값: "+a+"+"+"\t변수 b의 값: "+b);

        b=a;
        System.out.println("변수 a의 값: "+a+"\t변수 b의 값: "+b);

//        변수a의 값을 변경해도 변수 b의 값은 그대로 남아있음. 값을 복사해서 넘겨줬기 때문
            a=100;
        System.out.println("변수 a의 값: "+a+"\t변수 b의 값: "+b);

 System.out.println();
        int arr1[]={100};
        int arr2[]={200};
        System.out.println("배열 arr1의 주소: "+arr1+"\t배열 arr2의 주소: "+arr2);
        System.out.println("배열 arr1[0]의 주소: "+arr1[0]+"\t배열 arr2의 주소: "+arr2[0]);

        arr2=arr1; //arr1과 arr2의 주소가 동일해짐. 주소를 복사했기 때문
        System.out.println("배열 arr1의 주소: "+arr1+"\t배열 arr2의 주소: "+arr2);
        System.out.println("배열 arr1[0]의 주소: "+arr1[0]+"\t배열 arr2의 주소: "+arr2[0]);

        arr1[0]=2000;
        System.out.println("배열 arr1의 주소: "+arr1+"\t배열 arr2의 주소: "+arr2);
        System.out.println("배열 arr1[0]의 주소: "+arr1[0]+"\t배열 arr2의 주소: "+arr2[0]);


배열의 주소가 달랐지만 arr2=arr1;해줌으로 둘의 주소가 동일해진다.

//        p.106 배열 선언 및 생성
        int arrayInt[]; //배열선언
        arrayInt=new int[5]; //배열 크기 설정
        int max= 0;  //현재 가장 큰 수를 저장하기 위한 변수
        System.out.println("양수 5개를 입력하세요");

        Scanner scanner =new Scanner(System.in);

        for(int i=0; i<5; i++){
//            사용자 입력을 통해 얻은 데이터를 배열에 저장
            arrayInt[i]= scanner.nextInt(); //i번째 . 사용자가 입력한 걸 대입
//            배열에 저장된 데이터를 max와 비교
            if(arrayInt[i]>max){ //max값과 비교.
//                max에 배열에 저장된 값을 저장
                max=arrayInt[i]; //결국 가장 큰 값이 max에 들어감.
            }
        }
        System.out.println("가장 큰 수는 "+max+"입니다.");
    }

배열의 크기 선언할 때 변수를 사용하면 안된다. 오류가 날 수 있다.
그렇지만 상수는 괜찮다.
배열의 index접근에는 변수를 사용하는 것이 가능.

/        int c=5;
//        arrayInt=new int[c];

✨for-each✨

배열이나 나열의 원소를 순차 접근하는데 유용한 for문.
이 두가지 반드시 알고 있어야 한다!!!

for (변수:배열레퍼런스) {
반복작업문
}

 System.out.println("\n-----기존 for문 사용한 배열의 데이터 출력-----\n");
    int arrNum1[] = {10,20,30,40,50};

// int total1=0;

    for(int i=0; i<arrNum1.length; i++){ //반복 조건을 사용자가 지정.
        System.out.println("arrNum1["+i+"]: "+arrNum1[i]); 

// total1+=arrNum1[i];
// System.out.println("total1: "+total1);
}
System.out.println("\n-----for~each 사용한 배열의 데이터 출력-----\n");
int arrNum2[]={10,20,30,40,50};

        for(int num: arrNum2){  //반복 가능한 객체의 크기만큼 반복동작(arrNum2의 크기만큼) 무조건 처음부터 끝까지 동작
            System.out.println("num: "+num);
        }
        
![](https://velog.velcdn.com/images/dbfl1443/post/0d096b01-94b9-408c-aa18-d7cdebe423cb/image.png)
```java
//        p.109 for each문 활용
        int [] n ={1,2,3,4,5};
        int sum=0;
        for(int k :n){
            System.out.println(k+"");
            sum+=k;
        }
        System.out.println("합은 "+sum);

        String f[]={"사과","배","바나나","체리","딸기","포도"};
        for (String s:f)
            System.out.println(s+"");
    }

2차원 배열 / 다차원배열

  • 1차원 배열 : 기본 배열, 배열의 요소로 데이터를 가지는 배열
  • 2차원 배열 : 배열의 요소로 1차원 배열을 가지는 배열
  • 3차원 배열 : 배열의 요소로 2차원 배열을 가지는 배열

1차원 배열 선언

 int arr1[]={1,2,3,4,5};

2차원 배열 선언

int arr2[][]={  //앞에는 줄, 뒤에는 칸
                {1,2,3},
                {4,5,6}
        };

3차원 배열 선언

 int arr3[][][]={{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}};
  • 2차원 배열 - 줄이 먼저, 칸이 나중. 줄 안에 칸이 존재하는 형태
  • 2차원 배열에서 항상 라인번호가 먼저, 칸 버전은 나둥
  • 라인 안에 칸이 있는 형태로 구성되어 있음.
  • 2차원 배열에서 크기를 확인하기 위한 속성인 length를 사용
  • 배열명.length를 하면 해당 배열의 라인 수를 출력한다.
  • numArr.length=>4(줄) // numArr[0].length=>4 0번째 줄에 몇 개가 들어있는가.
      int numArr[][]={
                   {1,2,3,4,5},
                   {6,7,8,9,10},
                   {11,12,13,14,15},
                   {16,17,18,19,20},
                   {21,22,23,24,25}
           };
           
          System.out.println("numArr[4][1] : "+numArr[4][1]); //22
          System.out.println("numArr[1][4] : "+numArr[1][4]); //10  





```java
System.out.println(test[0]+" "+test[1]+" "+test[2]+" "+test[3]+" "+test[4]+"");

2중 반복문

반복문을 사용하여 2차원 데이터를 출력하려면 2중 반복문을 사용해야 함.

1번

for (int i=0; i<5; i++){ //열
//            System.out.println(numArr[i]); //이러면 주소가 5개 나옴.
           for(int j=0; j<5; j++){  //칸
               System.out.print(numArr[i][j]+" ");
           }
       }
       System.out.println();

2번

for (int item[] : numArr){
            for (int i : item){
                System.out.print(i+" ");
            }
        }
        System.out.println();

3번

  for(int item[]:numArr){
            for (int i=0; i<item.length; i++){
                System.out.print(item[i]+ " ");
            }
        }
        System.out.println();

4번

for (int i=0; i<numArr.length; i++){
            for(int item:numArr[i]){
                System.out.print(item+" ");
            }
        }

2차원배열 가져오기

 int numArr2[][]={
                {1,2,3},
                {4,5,6,7},
                {8,9,10,11,12},
                {13,14}
        };
        System.out.println();
        System.out.println(numArr2[3][1]); //14
        System.out.println(numArr2[2][4]); //12

        for (int i=0; i<numArr2.length; i++){
            for(int j=0; j< numArr2[i].length; j++){
                System.out.println(numArr2[i][j]+" ");
            }
        }

        for(int items[]: numArr2){
            for(int item:items){
                System.out.println(item+" ");
            }
        }
    }

0개의 댓글