여기 내 코드의 일부가 for 루프로 정렬 된 문자열 목록을 만들지 만 어떤 이유로 숫자 중 하나에 잘못된 대답을 제공합니다.왜 내 compareTo()가 잘못된 답변을 제공합니까?
public static void main(String[] args) {
List<String> answer = new ArrayList();
List<String> n = new ArrayList<>();
int w = 1327;
int x = 17;
int y = 15;
int z = 12;
n.add(Integer.toString(x));
n.add(Integer.toString(y));
n.add(Integer.toString(z));
n.add(Integer.toString(w));
while (n.size() > 0) {
String smallest = null;
for (String f : n) {
if (smallest == null || smallest.compareTo(f)>0) {
smallest = f;
}
}
answer.add(smallest);
n.remove(smallest);
예상 출력은 다음과 같습니다
12
15
17
1327
1327
17
15
12
코드 출력 대신입니다 :
12
1327
15
17
17
15
1327
12
그것뿐만 아니라 반대로 인쇄 때문에 코드의 다른 부분이며에 예상되는 이유 그런 식으로. 1327에 잘못된 int를주는 이유 때문에 compareTo (f)> 0을 이미 디버깅했습니다. 누군가 잘못된 일을하는 사람을 알고 있습니까?
당신이 사용할 수있는, 당신의 알고리즘을 작성 방지 할 수 있습니다. 당신은 * 문자열 *을 비교하고 있습니다. "1327"은 "15"보다 이전 문자열입니다. 대신 '목록'을 만드십시오 ... –
숫자가 아니라 문자열을 정렬합니다 (알파벳 순서). – assylias
그것은 완전히 맞습니다. "1327"< "15" – Li357