2014-12-31 6 views
0

을 반환은인쇄 및 나는 현재 아래의 질문에 일하고 있어요 올바른 목록

// It should return the greatest common factor 
    // between two numbers. 
    // 
    // Examples of greatestCommonFactor: 
    // greatestCommonFactor(6, 4) // returns 2 
    // greatestCommonFactor(7, 9) // returns 1 
    // greatestCommonFactor(20, 30) // returns 10 
    // 
    // Hint: start a counter from 1 and try to divide both 
    // numbers by the counter. If the remainder of both divisions 
    // is 0, then the counter is a common factor. Continue incrementing 
    // the counter to find the greatest common factor. Use a while loop 
    // to increment the counter. 

내 코드는 내가 올바른 출력을 얻는 문제에 봉착

public static List greatestCommonFactor(int a, int b){ 
     int i = 1 ; 
     List topnum = new ArrayList(); 
     ArrayList <Integer> factor = new ArrayList<Integer>(); 
     while (i <= a || i <= b){ 
      i++; 
     } 
     if (a%i == 0 && b%i == 0){ 
      factor.add(i); 
     } 
     else if (a%i <= 1 || b%i <= 1){ 
      Collections.sort(factor); 
      List<Integer> topnum1 = factor.subList(factor.size() - 1, factor.size()); 

     } 
     return topnum; 
    } 

아래에 표시됩니다. 현재 이상한 출력으로 []이 표시됩니다. 오류가 발생하지 않고 행에 topnum을 가져올 수 없습니다. 따라서이 항목을 관리 할 수 ​​있습니다.

누구나 topnum1에서 요소를 인쇄하여이 자습서를 해결할 수있는 팁이 있습니까?

+0

을 당신이 그것을 만든 후에 당신이 topnum''뭔가를하지 않을! 물론 그것은 빈 반환됩니다. –

+1

작업과 코멘트를 이해할 때 함수 greaterCommonFactor()는 목록 대신 int를 반환해야합니다. 맞습니까? –

답변

3

while 루프는 아무 작업도 수행하지 않습니다. 당신은 아마 당신의 상태를 그 안에 넣어야 만합니다, 아니면 그것은 i의 마지막 값에 대해서만 테스트 될 것입니다. 그 옆에

while (i <= a || i <= b){ 
    if (a%i == 0 && b%i == 0){ 
     factor.add(i); 
    } 
    i++; 
} 

, 당신은 factor 목록에 요소를 추가 (적어도 당신은 수정 후 것), 그리고 topnum1에 그리스트의 마지막 요소를 넣어,하지만 방법은 비어 topnum 반환합니다.

마지막으로 귀하의 else if (a%i <= 1 || b%i <= 1)은 제게 불분명합니다. 그리고 factor 목록을 정렬 할 필요가 없습니다. 그것은 이미 분류 될 것입니다. 사실, 당신은 그리스트를 전혀 필요로하지 않고 단지 가장 큰 숫자 인 i을 공통적 인 요소로 유지하고 그것을 반환합니다.

이 훨씬 더 간단한 코드를 만들 것입니다 :

public static int greatestCommonFactor(int a, int b) 
{ 
    int result = 1; 
    int i = 1 ; 
    while (i <= a && i <= b){ 
     if (a%i == 0 && b%i == 0){ 
      result = i; 
     } 
     i++; 
    } 

    return result; 
} 
+0

당신은 @ ++ – migue02

+0

@ migue02를 잊어 버렸습니다! – Eran

0

당신은 실제로 어디 topnum의 값을 변경하지 마십시오는 ...

당신이 한 모든 후, List topnum = new ArrayList();와 상단에 그것을 만들 return topnum;와 함께 바닥에 그것을 반환합니다. 당신은 아무것도 추가하지 않았습니다. 당신이 목록에 무언가를 추가하는 방법을 모르는 경우

, 당신은 .add()를 사용

topnum.add(7); 

7에서 topnum에 대한 것입니다.

관련 문제