2014-04-15 4 views
-1

간단한 Java 프로그램에서 roomtypes의 이름을 비교하려하지만 작동하지 않습니다.Java 배열을 비교하십시오.

지금까지 나는이 있습니다

public class Main { 
public static void main(String[] args) { 
    RoomType[] ar = new RoomType[10]; 
    String s = ""; 
    String duplicate = ""; 

    ar[0] = new RoomType("Standaard", 2, 60.0); 
    ar[1] = new RoomType("DeLuxe", 2, 85.0); 
    ar[2] = new RoomType("DeLuxe", 4, 125.0); 
    ar[3] = new RoomType("Hiker", 2, 35.0); 

    for (int i = 0; i < ar.length; i++) { 
     if (ar[i] != null) { 
      s += ar[i] + "\n"; 
     } 

     for (int j = 0; j < ar.length -1; j++) { 
      if (ar[i] == ar[j] && ar[i] != null && ar[j] != null) { 
       duplicate = ar[i] + " has the same name as " + ar[j]; 
      } 
     } 
    } 

    System.out.println("These are the roomtypes: \n" + s + "\n"); 
    System.out.println(duplicate); 
} 

}

나는 복식가있는 경우들과 나는 SYSOUT을 필요로하는 모든 ar[] '의 이름 (배열의 첫 번째 요소)을 비교하려면 복식의 위치 (ar[])를 제공합니다. getTypeName() 메소드는 다른 클래스 RoomType에 있습니다.

+0

우선, 당신은'for' 루프 종류가 잘못되었습니다. 배열을 실행하는 올바른 개념이 있지만 비교할 getTypeName() 메소드를 호출하지는 않습니다. 'ar [i] == ar [j]'명령문은 두 객체를 비교합니다. 'RoomType' 클래스의'equals (Object obj)'를 오버라이드 (override) 해, 그것들이 동등한 지 어떤지를 판정 할 필요가 있습니다. 그 문을 변경하지 않았다면, 이전에 'ar [i] .getTypeName(). equals (ar [j] .getTypeName())'과 같은 문을 변경하기 위해 – 3kings

+0

을 변경하려고 시도했지만 nullpointerexception을 얻었습니다. – spacewalk92

+0

물론 당신은 다음과 같이합니다 : P. if 문에서 널 (NULL)이 아닌지 검사하여 처음으로 널 (NULL)인지 점검하십시오. – 3kings

답변

0

내가 당신을 위해 무엇을 요구하는 것으로 해석 것입니다 :

for(int i = 0; i < ar.length; i++) 
{ 
    if(ar[i] != null) 
    s += ar[i].getTypeName()+"\n"; 
for(int j = 1; j < ar.length; j++) 
    { 
    if(ar[i] != null && ar[j] != null && ar[i].getTypeName().equals(ar[j].getTypeName())) 
    { 
     duplicate += i+" has the same name as "+j+"\n"; 
    } 
    } 
} 
System.out.println("These are the roomtypes: \n"+s+"\n"); 
System.out.println(duplicate); 
+0

네, 고맙습니다. – spacewalk92

2

는 "나는의 [] 아칸소 모든 의 이름 (배열의 첫 번째 요소)를 비교하려는 복식가 있는지 나는의 ([] 아칸소)이 위치를 제공하는 SYSOUT 필요 복식 "

당신의 접근 방식이 잘못된 것처럼 보입니다. RoomType은 요구 사항에 따라 equalshashcode을 구현 한 다음 java.util.Set과 같은 중복을 허용하지 않는 데이터 구조에 추가 할 수 있습니다. 세트에 중복 요소를 삽입하려고하면 false이 반환되며 이것이 도움이 될 수 있습니다. 자바로 배열을 연습하거나 놀지 않는 한, 표준 데이터 구조는 이러한 종류의 문제를 해결할 것입니다.

+0

학교 과제물이기 때문에 같은 방 이름이 있는지 테스트해야합니다. 우리는 해시 코드에 대해 아직 아무 것도하지 않았기 때문에 그들이 내가 원하는 것을 의심하고 있습니다. – spacewalk92

+0

프로그래밍의 같음과 hashCode는 객체의 한 측면을 설명하기위한 좋은 제안이 아닙니다. Set로 이것을하려면, 커스텀 Comparator를 사용해 TreeSet를 사용합니다. – Radiodef

+0

주어진 예제에 대해 equals와 hashcode를 구현하는 것은 좋지 않습니다. 숙제에 허용되면 arraylist를 사용하는 것이 더 나은 선택이 될 것입니다. 또는 RadioDef가 제안한 옵션도 도움이 될 수 있습니다. – SonalKhodiyar

1

몇 가지 참고 사항 : http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html 문자열 "성장"을 :

  • StringBuilder 사용하는 효율적인 훨씬 더 많은 공간/시간입니다.
  • "=="및 "! ="은 문자열을 value 대신 참조로 비교합니다. 대신 .equals()을 사용하십시오.
  • 중복 정보를 효율적으로 저장하기 위해 HashMap<String, ArrayList<Integer>>을 사용할 수 있습니다. 우리는 타입 이름을 배열의 위치에 매핑합니다. 나는 함수 아래 작성했습니다 :
  • 여기

public void printDuplicateInfo(RoomType[] roomList) { 

    HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>(); 
    for(int i = 0; i < roomList.length; i++) { 
    ArrayList<Integer> pos; 
    String name = roomList[i].getTypeName() 
     if(!map.containsKey(name)) 
     pos = new ArrayList<Integer>(); 
     else 
     pos = map.get(name); 
    pos.add(i); 
    map.put(name, pos); 
    } 

    Set<String> keys = map.keySet(); 
    StringBuilder strBuf = new StringBuilder(); 
    strBuf.append("***Duplicate Info***\n"); 
    for(String name : set) { 
    ArrayList<Integer> pos = map.get(name); 
    int size = pos.size(); 
    if(size == 1) 
     continue; 
    strBuf.append(name).append(": present at indices "); 
    for(int i = 0; i < size; i++) 
     strBuf.append(pos.get(i)).append(" "); 

    strBuf.append("\n") 
    } 

    System.out.print(strBuf); 
} 
+0

고마워요, 확실히 확인해 보겠습니다. – spacewalk92

-1

비교할의 ArrayList를 사용하여 시도하고 .Contains. 그것은 당신의 삶을 더 편하게 만들 것이고 당신은 자바로 더 많은 데이터 구조를 소개 받게 될 것입니다.

학교와 가장 잘 어울립니다. 이것은 성장하기에 좋은 곳입니다. 활성 상태가 되라.

+0

고마워요! 확실히 더 많은 데이터 구조를 살펴볼 것입니다. – spacewalk92

관련 문제