2017-12-10 19 views
-2

저는 Java에 대해 초보자이므로 도움이 필요합니다. 텍스트 파일에서 값을 가져온 다음 개체의 변수와 값을 비교하기 만하면됩니다. 그러나 어쨌든, 그것은 잘못된 방식으로 작동합니다. 나는 4-5 시간 이상을 보냈다. 여기에 내 코드가있다. String.equals()가 작동하지 않습니다. 어떤 문자열이 텍스트 파일입니까?

public void setUndergraduates(Undergraduate undergraduates) { 
    ArrayList<Undergraduate> students = this.undergraduates; 
    students.add(undergraduates); 
    this.undergraduates = students; 
} 

클래스

과정에서

public class Course { 
private String courseID; 
private ArrayList<Undergraduate> undergraduates = new ArrayList<>(); 

setUndergraduates 그리고 여기에 텍스트 파일 구조

BIM101 % 1백11억1천1백11만1천1백11퍼센트 파파 %입니다 : 여기

private List<Course> hs = new ArrayList<>(); 
    private List<String> list = new ArrayList<>(); 
    private String[] properties; 

public void readLines() { 
    try (BufferedReader br = Files.newBufferedReader(Paths.get(Instructor.root.toString()), StandardCharsets.UTF_8)) { 
     list = br.lines().collect(Collectors.toList()); 

     for(int i = 0; i < list.size(); i++) { 
      properties = list.get(i).split("%"); 
      Course course = new Course(properties[0]); 
      Undergraduate undergraduate = new Undergraduate(properties[0],properties[1], properties[2], properties[3]); 
      if(hs.size() != 0 && isObjectInSet(course, hs)) { 
       getIfObjectInSet(course, hs).setUndergraduates(undergraduate); 
      }else { 
       course.setUndergraduates(undergraduate); 
       hs.add(course); 
      }} 
    }catch (IOException e) { 
     System.err.println(e); 
    } 
    //System.out.println(hs.size()); 
} 

    public boolean isObjectInSet(Course object, List<Course> hs) { 
    boolean result = false; 


    for (int i = 0; i < hs.size(); i++) { 
     String arrayedCourse = hs.get(i).getCourseID(); 
     String objectsID = object.getCourseID(); 
     if (objectsID.equals(arrayedCourse)) { 
      result = true; 
      break; 
     } 
    }return result; } 

public Course getIfObjectInSet(Course object, List<Course> set) { 
    Course result = null; 

    for (int i = 0; i < set.size(); i++) { 
     if (isObjectInSet(object, set)) { 
      result = set.get(i); 
      break; 
     } }return result; 
}} 

는 코스 클래스 '변수입니다 25

여기에 디버그가 있습니다. 두 문자열은 동일하지만 그들이

https://i.stack.imgur.com/BOO5d.jpg

+0

를 정확하게 작동하는 잘못된 방법입니다 무엇? 또한,'getIfObjectInSet()'과'setUndergraduates()'에 대한 코드를 추가하십시오. – xs0

+0

물론, 나는 그들을 추가했다. – Metomania

+0

우리가 [mcve] (a.k.a. [SSCCE] (http://sscce.org))를 필요로하거나 더 쉽게 도와 줄 수 있도록. * 전체 * 코드를 게시 할 필요는 없지만 직면 한 문제와 관련이없는 부분을 제거하더라도 코드 예를 완료해야합니다 (복사하여 붙여 넣을 수있는 방식으로). 컴퓨터를 수정하고 아무 것도 수정/추가 할 필요없이 실행). – Pshemo

답변

1

비교할 원하는 필드를 추가하여 클래스 Course의 방법 equals를 오버라이드 (override) 해주십시오 없습니다 알려줍니다. Hint

0

나는 문제가 당신의 getIfObjectInSet()에 생각 - 그것은 isObjectInSet()를 사용하지만, 요소 중 하나가 바로 현재의 요소가 일치하지 않을 경우 일치하는 경우 그 true를 반환합니다. 어떤 경우

, 당신은 여기에지도를 사용하여 더 나을 것 - 당신은 완전히 이러한 두 가지 기능을 방지 할 수 있습니다

private Map<String, Course> courses = new TreeMap<>(); 

public void readLines(Path file) { 
    try (BufferedReader br = Files.newBufferedReader(file, StandardCharsets.UTF_8)) { 
     br.lines().forEach(line -> { 
      String[] parts = line.split("%"); 
      String courseId = parts[0]; 

      Undergraduate undergraduate = new Undergraduate(courseId, parts[1], parts[2], parts[3]); 

      Course course = courses.get(courseId); 
      if (course == null) { 
       course = new Course(courseId); 
       courses.put(courseId, course); 
      } 

      course.setUndergraduates(undergraduate); // rename to addUndergraduate? 
     }); 
    } catch (IOException e) { 
     throw new RuntimeException(e); // don't just continue on errors.. 
    } 
} 
+0

더 유용하지만 문제는 전체 프로젝트입니다. 내 말은 다른 프로젝트를 만들어 거기에 코드를 입력했다는 것입니다. 그렇다면 내 코드가 제대로 작동합니다. 도와 줘서 고마워. – Metomania