2017-03-31 1 views
0

내가 읽는 CSV 파일이 있습니다. 필자는 여섯 개의 필드를 초기화하기위한 여섯 가지 인수와 문자열을 필요한 형식으로 변환하기위한 공용 문자열 메서드를 사용하여 생성자를 만들었습니다.Java 파일을 읽고 각 해당 행에 대한 개체를 만듭니다.

public Hill(int number, String name, String countyName, double height, double latitude, double longitude) { 
    this.number = number; 
    this.name = name; 
    this.countyName = countyName; 
    this.height = height; 
    this.latitude = latitude; 
    this.longitude = longitude; 
} 

이제는 파일을 열고 읽은 후 해당 개체를 만든 다음 항목 목록을 반환합니다.

내가 내가 내가 바로 그 일을 한 경우 확실하지 않았기 때문에 단순히에서 새 개체를 만들려고 줄을 주석 한 public static List<Hill> readHills()

의 inital 방법 주어졌다, 그래서 난 그냥 인쇄 내 코드가 무엇을하는지 알기위한 테스트로서 새로운 객체 라인이 중복 된 것으로 보인다. 현재 내 코드입니다 : 내가 샘플 값을 넣어하지만 객체를 만드는 코드에서

public static List<Hill> readHills() { 
    Scanner fileName = null; 
    try { 
     fileName = new Scanner(new File("C:/Users/TOSHIBA/Desktop/hills.csv")); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    Scanner finalFileName = fileName; 
    List<Hill> list = new ArrayList<Hill>() { 
     { 
       for(int i = 0; i < 21; i++) { 
        String line = finalFileName.nextLine(); 
        String[] splitted = line.split(","); 
        //add(new Hill(1, "", "", 100, 100, 100)); 
        System.out.println(Arrays.toString(splitted)); 
       } 

      } 
    }; 
    return list; 
} 

기술적 나는 새 개체의 여섯 개 분야가 내가 읽은 파일에서가되고 싶어요. 필드 이름을 추가하려고하면 빨간 선이 표시됩니다. Non static method cannot be referenced from a static method

어디로 가고 있습니까? 그리고 왜 코드 라인이 쓸모 없습니까?

나는 코드를 가지고 놀려고했지만 아무데도 갈 수 없다. 나는 내 문제가 내가 주어진 메소드 이름을 이해하지 못한다고 생각한다; 즉, 왜, public static List<Hill> readHills()은 무엇을합니까?

나는 Hill newHill = new Hill(int number, String name, String countyName,double height, double latitude, double longitude);를 사용하여 시도하지만 우선 정적 컨텍스트

+0

http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced-from-a-static-context – TmTron

답변

1

에서 비 정적 필드를 참조하지 못할 수 없기 때문에이 여기

List<Hill> list = new ArrayList<Hill>() { 

유효한 구문은, 그러나 전혀 하지 원하는 것을 선택하십시오. 대신

List<Hill> list = new ArrayList<>(); 

:

그냥 갈. 당신이하는 일은 익명의 내부 클래스를 생성합니다. 여기서는 전혀 필요하지 않습니다. 그 대신에 당신이 보게되는 많은 이슈로 이어집니다.

그런 다음 : 올바른 형식으로 문자열을 설정해야 :

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

당신에게 문자열 객체의 배열을 제공합니다. 당신은 그것들을 변환해야합니다; 그에 따라 생성자에 전달할 수 있도록 (생성자는 첫 번째 매개 변수로 INT 값이 아닌 예를 들어 문자열을 기대!) 등

Hill hill = new Hill(Integer.parseInt(splitted[0]), splitted[1], ... 

하고 있습니다.

list.add(hill); 

그러나 까다로운 부분은 다음과 같습니다 :

그리고는 당신이 할 같은 는 "올바른"입력에 의존 구문 분석. 따라서 모든 종류의 오류 처리에 대비해야합니다.

이상 : 숙제가 아니면 이 아니며은 자신의 CSV 파서를 구현해야합니다. 기존 라이브러리를 사용하십시오 (아이디어는 here 참조). 보십시오 : 올바른 CSV 파싱,이 형식의 모든 미묘한 단점과 함께 작동 아니야입니다. 이 작업에 쉽게 시간을 할애 할 수 있습니다. 다음으로 작업 할 다음 CSV 파일이 ... 자체 파서를 깨뜨리는 또 다른 (유효한!) 유사 CSV 입력을 포함하고 있음을 확인하십시오. (나를 믿어 라, 나는 거기에 갔다)

그리고 마지막으로 만일 그런 것들이 이미 당신에게 과장되어 있다면, 진짜 테이크 아웃은 : 당신이 아직 거기 있지 않다는 것을 받아들이십시오. 뒤로 물러서 라. 학습 모드로 돌아가서 모든 기본적인 자바 것들을 이해하십시오.

+0

나는 내 코드의 시작부터'List list = new ArrayList () {'내 목록이 초기화되지 않았습니다. 그래서 내 코드를 다른 형식으로 다시 작성해야합니까? 내 목록이 초기화 되었어도했기 때문에. –

+0

내 업데이트보기; 방금 대부분의 문제를 일으키는 코드에 구문 오류가 있음을 알았습니다. – GhostCat

+0

예, 그리고 또 다른 downvote. 말씀해주세요. 나는 왜이 대답이 하향 회선을 가질만한 가치가 있다고 생각하는지 전혀 모른다. – GhostCat

관련 문제