2016-06-30 9 views
0

for 루프를 반복하고 목록 반복 요소를 설정하려고 시도하고 있지만 반복 유형은 다음과 같은 형식이 아닙니다. 목록 나는For 루프 반복자 형식이 액세스하려고 시도한 형식이 아닙니다.

private List<Double> myBeaconDistances = new ArrayList<>(); 

private List getBeaconDistances(List<Beacon> beacons){ 
    for (Beacon beacon : beacons) { 
     double distance = Utils.computeAccuracy(beacon); 
     this.myBeaconDistances.set(beacon, distance); 

    } 

    return myBeaconDistances; 
} 

표시되는 오류가 비콘이 정수 있어야하는데, 올바른 유형되지 않는 것입니다 액세스하기를 원하지만 비콘은 정수되지 않습니다. 누구든지 다른 반복자를 추가하거나 비컨을 정수로 임시 설정하는 방법을 알고 있습니까?

Btw 비컨은 UUID, 주 번호 및 부 번호로 구성되어 있습니다. 이것은 부적절 할 수도 있지만, 알고 싶다는 생각이들 때만입니다. 고맙습니다!

+4

당신이 비콘과의 거리 구성된 키 - 값 쌍을 저장하려고 : 추가 검사를 추가하거나 적절한 ==에 대한 equals()를 대체? 그렇다면'Map '가 필요합니다.'List'가 아닙니다. 또한 그렇다면'Beacon'은'equals()'와'hashCode()'를 올바르게 구현해야합니다. –

+0

그냥 조금 nitpicking : 정말 컴파일러가 제공하는 오류 메시지를 이해하려고 노력하는 데 도움이! 짐 개리슨 말이 맞아. –

+0

@ JimGarrison 네, 그게 내가하려는 일입니다. – Wongesse

답변

3

보기 "평등"이 무엇이든간에, 그들은 서로 일치해야합니다. Map 인터페이스에 대한 Javadoc을 읽으십시오.

"같음"은 UUID와 주/부 버전 번호를 고려해야합니다. 다음은 major/minor가 기본 유형이고 해당 UUID가 null 일 수 없다고 가정합니다. 당신이 거리를 조회 할 수있는 비콘을 부여하도록,

@Override 
public boolean equals(Object other) 
{ 
    if (this == other) return true; 
    if (other == null || !this.isAssignableFrom(other)) return false; 
    Beacon b = (Beacon) other; 
    return this.uuid.equals(b.uuid) && this.major == b.major && this.minor == b.minor; 
} 

@Override 
public int hashCode() 
{ 
    return 2047*this.major + this.minor + this.uuid.hashCode(); 
} 
-1

당신은 ArrayList에 set을 호출하고 있습니다. 첫 번째 인수는 유형 비컨이 아닌 int 여야합니다. 당신은 또한에 기반 Beaconequals()hashCode()를 구현해야이 작업을 수행 할 때

private Map<Beacon,Double> myBeaconDistances = new HashMap<>(); 

private Map<Beacon,Double> getBeaconDistances(List<Beacon> beacons){ 
    for (Beacon beacon : beacons) { 
     double distance = Utils.computeAccuracy(beacon); 
     this.myBeaconDistances.put(beacon, distance); 

    } 

    return myBeaconDistances; 
} 

:

this.myBeaconDistances.set(beacon, distance);

에서 당신은 Map 대신 List의를 사용할 필요가 https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)