문제

다음 코드가 있는데,이 코드는 벡터를 문자열 벡터 (키로 사용하기 위해)와 끝의 정수 (값으로 사용하기 위해)로 나눕니다.

payoffs.put(new Vector<String>(keyAndOutput.subList(0, keyAndOutput.size() - 1)), Integer.parseInt(keyAndOutput.lastElement()));

문제의 Treemap은 다음 방법을 갖는 비교기를 사용하여 구성되며,이 방법은 길이를 고려하는 사전, 사례 독립 순서를 부과합니다 (더 긴 벡터는 항상 더 짧은 벡터보다 "더 큽니다).

public int compare(Vector<String> arg0, Vector<String> arg1) {
        int sgn = 0;
        if (arg0.size() > arg1.size()) {
            return 1;
        } else if (arg0.size() < arg1.size()) {
            return -1;
        }
        for (int i = 0; i < arg0.size(); i++) {
            if (arg0.elementAt(i).compareToIgnoreCase(arg1.elementAt(i)) == 1) {
                sgn = 1;
                break;
            } else if (arg0.elementAt(i).compareToIgnoreCase(arg1.elementAt(i)) == -1) {
                sgn = -1;
                break;
            } else {
                continue;
            }
        }
        return sgn;
    }

이제 문제의 경우 ... 텍스트 파일에 8 개의 항목이 있음에도 불구하고,이 글은 읽고 있지만,지도는 최대 2 개의 항목 만 얻습니다. 한 항목 (키)이 입력되면 스캔 프로세스의 모든 반복 (파일의 라인에서 새 벡터에서 읽을 때마다 값이 변경되면 값이 변경됩니다. 그것은 둘을 제외하고 다른 모든 키를 버립니다.

이것이 내 비교기의 문제입니까? 아니면 treemap이 put ()로 이해하지 못하는 일을하고 있습니까?

도움이 되었습니까?

해결책

대답 대답하지 않습니다 질문 하지만 코드 외에 몇 가지 사소한 포인트 :

  1. 비교를 두 번 수행해서는 안됩니다. 한 번 비교하고 결과를 SGN에 할당하십시오. 그런 다음! = 0을 끊습니다
  2. 당신의 다른 계속은 중복됩니다.
  3. -1 또는 1을 비교해서는 안되지만 <0 또는> 0; 많은 비교 방법은 (x1-x2)를 기준으로 반환되며, 이는 음수 또는 양수를 줄 수 있습니다.

편집 : doh! 물론 String.comparetoignorecase ()에 대한 반환은 (3) 비교기 중 하나입니다. 내 다른 대답이 내 지적한 것과 동시에 게시 한 것처럼, 그것은 당신의 오류의 원인 일 것입니다.

EDIT2 : 질문을 반영하기 위해 수정 된 개방 문이 실제로 답변되었습니다.

다른 팁

이것이 당신의 문제의 원인인지는 모르겠지만, Java의 함수를 비교하면 일반적으로 음의 또는 양수 또는 0을 반드시 1 또는 -1 일 필요는 없습니다.

나는 당신이 어떻게 든 Comparetoignorecase에서 0이 아닌 값을 얻고 있다고 생각하지만, 1 또는 -1이 아니기 때문에 배열의 길이가 동일하고 콘텐츠가 아닌 경우에도 0을 반환합니다. > 0과 <0에 대해 확인하십시오

또한이 코드를 더 잘 구성 할 수 있습니다. 예를 들어, 한 번의 비교를하고 결과를 저장 한 다음 결과를 켜십시오. 이런 식으로 당신은 두 가지 비싼 비교를하지 않을 수 있습니다.

실제로, 비결은 실제로 비교 ()에 대한 문서화가 실제로 말한 것을 잘못 읽었다는 것입니다 ... 일단 테스트 한 후에보고 할 것입니다.

AAAND, 그게 다야. 감사합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top