데이터결과물을 다른배열에 담기

1. 확진자수가 증가한 횟수 구하기

      // 확진자 수가 늘어난 일자와 수를 다음 배열에 담아주시오.
      String[][] results;   
      int resultCount = 0;
      
      {
         // 확진자 수가 달라질 때마다 resultCount를 증가시킴으로써 증가되는 일자 수를 구하는 코드
         int old = 0; // 현재 확진자 수
                  
         for(int i=0; i<count; i++) {
            
            // i 번째 행의 확진자 수
            int current = Integer.parseInt(rows[i][1]);
            
            // i 번재 확진자(current)와 이전 확진자수(old)가 다르다면
            if(old != current) {
               // 확진자 수가 달라지는 일자의 수를 증가
               resultCount++;
               
               old = current;   
            }
         }

String[][] results;

전역화해서 나중에 사용할 수 있게한다.

 

if( old != current )

이전확진자수와 i번째확진자 수를 비교한다. 숫자가 다르면 카운트를 더한다.

후에 old = current; i번째 숫자를 이전확진자 수에 대입한다.

 

 

2. 증가한 횟수를 이용해 새로운 2차배열 생성,

 [확진자 증가한 날짜, 증가수] 를 1차원 배열row[]에 넣기.

각 1차원배열을 2차원배열results[][]에 대입

results = new String[resultCount][];
         //이름표: 4바이트, 주소는 4바이트=32비트         
         String date = "";
         int diff = 0;
         
         old = 0; // 위에서 쓰였으므로 초기화시키기
         
         int index = 0;
         for(int i=0; i<count; i++) { //데이터 총 행인 76까지반복
            int current = Integer.parseInt(rows[i][1]); //제주 확진자
            
            if(old != current) {//기존확진자와 현재확진자비교
               
               diff = current - old;//차이 = 현재확진자-기존확진자
               date = rows[i][0]; //차이발생한 날
               old = current; //기존확진자->현재확진자
               
               String[] row = new String[2];
               row[0] = date;       // date
               row[1] = String.valueOf(diff); // 정수->문자열변환
               
               results[index] = row; //index++후 출력하면 인덱스1이 증가되어 다음인덱스가출력됨
               
               System.out.println(Arrays.toString(results[index]));
               
               index++;//results배열인덱스 증가
            }
         }         
         System.out.println("작업완료");

int index = 0;

변수를 쓰는곳 가까이에 선언한다.

 

String[] row = new String[2];

row[0] = date;

row[1] = String.valueof(diff);

if문의 조건이 성립되어 date, diff가 계산이 되고, 계산된 date와 diff를 1차원배열 row[]에 담아준다.

 

results[index++] = row;

1차원배열row[]를 2차원배열results[index]에 연결시킨다.

results[i]를 하게되면 ArrayIndexOutOfBoundsException발생한다. 이유는 i가 for문범위인 count(76)까지 돌게된다.

results[resultsCount][];로 선언했고 resultsCount는 20이므로 범위를 초과하게된다.

i과 상관없이 새로운 변수 index를 선언하고 반복문이 실행되는 동안 증가할수있게 index++를 한다.

자바의 2차원배열은 1차원배열이 여러개가 연결된것.

 

 

 // 확진자 수가 늘어난 일자와 수를 다음 배열에 담아주시오.
      String[][] results;   
      int resultCount = 0;
      
      {
         // 확진자 수가 달라질 때마다 resultCount를 증가시킴으로써 증가되는 일자 수를 구하는 코드
         int old = 0; // 현재 확진자 수
                  
         for(int i=0; i<count; i++) {
            
            // i 번째 행의 확진자 수
            int current = Integer.parseInt(rows[i][1]);
            
            // i 번재 확진자(current)와 이전 확진자수(old)가 다르다면
            if(old != current) {
               // 확진자 수가 달라지는 일자의 수를 증가
               resultCount++;
               
               old = current;   
            }
         }
         
         System.out.println(resultCount);
         
         results = new String[resultCount][];
         //이름표: 4바이트, 주소는 4바이트=32비트         
         String date = "";
         int diff = 0;
         
         old = 0; // 위에서 쓰였으므로 초기화시키기
         
         int index = 0;
         for(int i=0; i<count; i++) { //데이터 총 행인 76까지반복
            int current = Integer.parseInt(rows[i][1]); //제주 확진자
            
            if(old != current) {//기존확진자와 현재확진자비교
               
               diff = current - old;//차이 = 현재확진자-기존확진자
               date = rows[i][0]; //차이발생한 날
               old = current; //기존확진자->현재확진자
               
               String[] row = new String[2];
               row[0] = date;       // date
               row[1] = String.valueOf(diff); // 정수->문자열변환
               
               results[index] = row; //index++후 출력하면 인덱스1이 증가되어 다음인덱스가출력됨
               
               System.out.println(Arrays.toString(results[index]));
               
               index++;//results배열인덱스 증가
            }
         }         
         System.out.println("작업완료");
                  
      }

+ Recent posts