자바는 포인터가없고 값변수, 참조변수가 있다.

값 변수와 참조변수 :

값변수는 담는 공간을 가지는 변수

참조변수는 담을 공간이 없으며 객체를 가리키는 변수, 객체의 주소를 담고있다. 객체에 이름을 부여.

hailey라는 글자가 주소를 갖고있는게 아닌것처럼, hailey는 참조변수(이름)이다.

String name = "hailey";

자료형 이름     객체(가 공간을가지고있다)

다양한 hailey중 이름을 붙여 구별할수있게한다.


Q. 데이터 4번째 컬럼의 총 합을 구하시오.

데이터 값 출력하기

 

원본데이터

반복해야할 구문 :

1.문자열 한줄을 불러온다.

2.문자열을 쉼표로 구분한다.

3.구분한 문자열을 배열에 넣는다.

4. 인덱스3번의  문자를 숫자로 변환하고 누적값을 구한다.

1~4번을 반복하면 전체 누적수가 나온다.


 

FileInputStream fis = new FileInputStream("파일상대경로");

하드디스크에는 암이라는게있고, 트랙이있다.트랙어딘가에 데이터가있다.

어플리케이션에서 데이터를 사용한다. 어플리케이션은 일정한 버퍼를 통해 데이터를 가져온다.

 

 

Scanner scan = new Scanner(fis);

fis을 사용하는 Scanner의 이름을 scan이라부른다.

데이터를 가져올때 fis.read()를 통해 가져올 수 있다. read는 코드를 하나씩읽어온다.

fis로 Scanner를 이용하면 문자열로 (단어,라인) 읽어올 수 있다.

 

 

String line = scan.nextLine();

nextLine()은 데이터의 일부만 가져오는데, 엔터(13번)까지 가져온다.

line은 "문자열"(scan.nextLine()이 가져온 것)의 이름이다.

문자열 객체인 [기준일자,제주 확진자,제주 사망자,제주 검사진행자수,자가격리중,..]을 가져온다.

line은 [..]을 가리킨다.

 

 

line = scan.nextLine();

line은 첫번째행을 읽어들였는데, 이번엔 두번째 라인을 불러온다.

[2020-10-01,59,0,28,0,0,58,8,230,2020-12-14]을 가져온다.

line은 더이상 위의 scan.nextLine() 을 가르키지않고 현재 scan.nextLine()을 가리킨다.

참조하는게없는 데이터공간을 가비지라고 부른다.

첫번째scan.nextLine()은 메모리누수를 방지하기위해 런타임환경에서 가비지콜렉션이 수거해간다.

즉, 참조하는게없는것은 자바실행환경이 수거해간다.

 

 

String[] cols = line.split(",");

line을 가지고 split이 넣어준 구분자","로 문자열을 쪼갠 후 각각을 문자열로 만든다.

문자열들의 배열이 새로 만들어진다. line.split(",")에 의해 line안에있었던 문자열들이 문자배열이 되었다.

이 문자배열을 참조하기 위해 새로운 String[]배열 이름 cols을 만들어준다.

cols도 line.splite을 가르키는 이름이다.

["2020-10-02","59","0","35","0","0","58","7","230","2020-12-14"]

cols는 공간이아니다. line.split(",");을 참조한다.

 

 

System.out.println(Integer.parseInt([cols[3]);

합계를 구하기위해선 "28" 문자열이기때문에 형변환을 해줘야한다.

 

 

while(scan.hasNextLine())

scan.가 다음라인을 가지고오면 hasNextLIne이 true를 반환한다.

가져올 데이터유무에 따라 true, false값을 반환한다. 이것을  while의 조건으로쓴다.

true를 반환하는동안 while이 반복한다.

끝까지읽고 더이상 읽어올게없으면 false를 반환한다.

 

 

 

추가문제 : 제주 검사진행자수 컬럼의 총합을 구하시오

 

package ex3.array.test2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;

public class Jeju {

	public static void main(String[] args) throws IOException {

		FileInputStream fis = new FileInputStream("res/corona.csv"); //파일위치지정
		Scanner scan = new Scanner(fis); //파일불러오기
		String line = scan.nextLine(); // 1행불러온것

		int total = 0;

		// 2020-10-01,59,0,28,0,0,58,8,230,2020-12-14 

		while (scan.hasNextLine()) {// 다음에읽어올게있어?
			line = scan.nextLine();
			String[] cols = line.split(",");		// [2020-10-01,59,0,28,0,0,58,..]
			total += Integer.parseInt(cols[3]);
		}		
		System.out.println(total);

		scan.close();
		fis.close();
		System.out.printf("10월 1일부터 12월14일까지 검사진행자수:%d",total);
	}

}
//10월 1일부터 12월14일까지의 누적검사진행자수
//누적 검사진행수
//첫번째열읽고

 

 

 

 

 

+ Recent posts