2011-12-30 3 views
2

좋아요, 그래서 숫자의 요인을 찾고 싶습니다. for 루프와 arraylist를 사용하여이를 수행하는 방법을 알고 있습니다. 내 문제는 (그리고 나는 이것에 대해 어떻게 생각하는지 모르겠다.) 나는 쌍을 이루는 요소를 원한다. (원래의 번호를 얻기 위해 함께 번식한다.) 나는 각각 변수가 2 개인 여러 arraylists에서 인자를 얻을 수 있다고 가정한다. 다른 숫자는 다른 수의 요소를 가지므로 매우 다루기 힘듭니다. (물론, 나는 이것을 어떻게하는지 모른다.)여러 arraylists를 사용하여 숫자 요소를 필터링하는 방법은 무엇입니까?

이것 이후로, 나는 그 변수들을 좁혀서 방정식에 시험해보고 싶다. 말해봐, 어떤 쌍이든지 주어진 숫자에 합쳐지는 것이 내가 사용하기를 원하는 것입니다. 나는 자습서를 사용하여이 모든 것들을 어떻게 수행하는지 알아 내려고 노력해 왔지만, Java에 다소 익숙하기 때문에 완전히 잃어 버렸습니다.

는 주셔서 감사합니다 모든 당신은 한 쌍의 각면에 대한 필드를 가지고 자신 만의 클래스를 만들 수 있습니다 :-)

+0

정확한 방법을 알지 못합니다. 지금까지 작성한 코드를 게시 할 수 있습니까? – Taymon

+0

그래서 'a'로 배가되고 'b'까지 더하는 두 개의 숫자를 찾고 있습니다. 내가 정확히 이해 했니? 그렇다면 'a'의 모든 요소를 ​​반복해야합니까? 또 다른 방법은 그 숫자를 2 차 방정식의 근원으로 표현하고 2 차 방정식을 적용하는 것입니다. 그것은 반복없이 코드의 한 두 라인을 가져 가야합니다. 이것을 당신이하려는 일에 대한 유효한 접근 방식이라고 생각한다면, 다시 게시하십시오. 나는 완전한 답을 제공 할 것입니다. –

답변

3

도움이되지만 그것은 허용하고 Map<Integer, Integer> 사용하기 편리 할 것입니다. 여기

private static Map<Integer, Integer> factorize(int number) { 
    Map<Integer, Integer> factors = new HashMap<Integer, Integer>(); 
    for (int i = 1; i < Math.sqrt(number); i++) { 
     if (number % i == 0) 
      factors.put(i, number/i); 
    } 
    return factors; 
} 

가 호출 할 것입니다 방법을 보여줍니다 몇 가지 테스트 코드의 결과는 무엇 : 기본 구현 될

public static void main(String[] args) { 
    Map<Integer, Integer> factorPairs = factorize(12345); 
    for (Map.Entry<Integer, Integer> factor : factorPairs.entrySet()) 
     System.out.println(factor.getKey() + " x " + factor.getValue()); 
} 

출력 :

1 x 12345 
3 x 4115 
5 x 2469 
15 x 823 

하는 것은 충분해야한다 당신을 시작하게하십시오

+0

나는 그것을 지금 시험해 볼 것이다 ... 고마워! – Wilson

+0

+1 나를 이길. – Paulpro

+0

factorPent.entrySet()은 factors.entrySet()이 아니어야합니까? –

0

숫자의 요인을 원한다 x :

y = √x

그런 다음 요인을 찾기 위해 1에서 y까지 반복하십시오.

는 내가 아주 잘 자바를 기억하지 않기 때문에 그냥 Javaish 의사를 쓸 것이다 번호 (218)이 말 :

int x = 218; 
int y = Math.sqrt(218); // 14 
for(int i = 1; i <= y; i++){ 
    if i is a factor of x 
    Add it to the list 
} 
// Your list will now be: 1, 2 

요인을 각 요소와 쌍 귀하의 목록은 단지 해당 요소로 나눈 것입니다.

그래서 (1)의 페어링 요인 = 218 1분의 218이며, 2의 페어링 요인은 2분의 218 = 109

0

정수의 목록의 목록 사용하여이 같은 시도입니다 :

import java.util.*; 
public class Main { 
    static List<Integer> findListThatSumsTo10(List<List<Integer>> list) { 
     for (List<Integer> l : list) { 
      int sum = 0; 
      for (Integer i : l) 
       sum += i; 
      if (sum == 10) return l; 
     } 
     return null; 
    } 
    public static void main(String[] args) { 
     List<List<Integer>> list = new LinkedList<List<Integer>>(); 
     Integer[] factorsOf15 = { 3, 5 }; 
     Integer[] factorsOf30 = { 2, 3, 5 }; 
     list.add(Arrays.asList(factorsOf15)); 
     list.add(Arrays.asList(factorsOf30)); 
     System.out.println(list); 
     System.out.println(findListThatSumsTo10(list)); 
    } 
} 
0

쌍을 저장할 필요가 없습니다.

N은 원래 숫자이고 F1F2은 한 쌍의 요소입니다. 즉 N = F1 x F2입니다.

N이 알려지면 F1만을 저장하면됩니다. F2은 다음을 사용하여 쉽게 다시 계산할 수 있습니다.

int f2 = n/f1; 
관련 문제