2014-02-16 3 views
0

ArrayList에 분수를 입력하는 방법이 필요합니다. 그러나 문제를 겪고 있습니다. 왜냐하면 나중에 어떻게 비교할 수 있을지 확신 할 수 없기 때문에 나중에 비교하여 분류 할 수 있습니다.분수 목록을 만드는 방법은 무엇입니까?

참고 : 나는 4 개 이상의 분수를 사용하는 것입니다 내가 (그것의 가능한 경우) 예를 들어보다 2

을 위해 그것을하기 위해 유사한 클래스를 사용하는 방법을 너무 잘 모르겠어요 : I 1/1, 3/4, 7/4, 2/8을 입력해야합니다.

그런 다음 목록에서 가장 작은 것부터 가장 큰 것까지 정렬해야합니다.

도움을 주시면 감사하겠습니다.

+2

잘 당신은 당신이 이미 가지고있는 우리를 보일 수 있는가? – Mozzie

+1

분수의 원래 표현을 유지 하시겠습니까, 아니면 부동 소수점 숫자로 변환해도 괜찮습니까? –

+0

프로젝트의 시작이기 때문에 가치가별로 없습니다. 그리고 시각적 인 목적을 위해 표현을 보존해야하지만, 순서를 바꾸기 위해 변환 된 경우 차이가별로 없을 것이라고 생각합니다. – user3006216

답변

1
public class Fraction implements Comparable<Fraction> { 
    private int x1, x2; // implement get/set 

    public int compareTo(Fraction o) { 
     double tmp = Math.abs((double)x1/x2 - (double)o.x1/o.x2); 
     if (tmp < 0) return -1; 
     if (tmp < 1e-9) return 0; 
     return 1; 
    } 
} 

지금 :

ArrayList<Fraction> f; 
Collections.sort(f); 
2

분수라는 두 개의 변수 인 분자와 분모를 저장하는 클래스를 만듭니다. 그런 다음 분수의 ArrayList를 만들 수 있습니다.

쉽게 정렬하려는 경우 가장 좋은 방법은 Comparable을 구현하는 것입니다.

1

은 먼저 당신이 그렇지 않으면 다른 클래스 다음 정렬 컬렉션를 사용 인터페이스 비교기 수다 좋은 구현할 수 있도록 다음 분수 값을 나타내는 클래스를 만들 플로트 값으로 분수를 취할 수 그것은 두 가지 방법으로 할 수 있습니다.

관련 문제