2012-01-28 2 views
1

지도에 넣으려는 int 배열이 있습니다. 배열의 각 값은 배열의 다른 값으로 놓여 야합니다. 그래서 배열에 0, 2, 4, 7이 있으면 모든 조합 (예 : [0, 2], [0, 4], [0 , 7]뿐만 아니라 [2, 0], [4, 0]과 [7,0] 그리고 나머지 값들에 대해서도 마찬가지이다. 나는 Map으로 그것을 달성하려고 노력하고있다. 그리고 나는 그것을 표시하려고 노력한다. 그러나 나는 그것에 몇 가지 문제가있다. 그 문제를 어떻게 해결해야합니까? 아니면이를 달성하기위한 더 좋은 방법이 있습니까?배열의 값을지도에 넣기

import java.util.*; 
import java.util.Map; 

public class Prac1 { 
    public Map<Integer, Integer> count(int[] A){ 
     int k = A.length;  
     Map<Integer,Integer> m = new HashMap<Integer,Integer>(); 

     for (int i = 0; i < A.length; i++){ 
      for (int j = 0; j < A.length; j++){ 
       m.put(i, j); 
      } 
     }  
     return m; 
    } 
    public static void main(String[] args){ 
     int[] A = {0, 2, 4, 7}; 
     Map<Integer,Integer> m = new HashMap<Integer,Integer>(); 

     for (int i = 0; i < A.length; i++){ 
      for (int j = 0; j < A.length; j++){ 
       m.put(A[i], A[j]); 
      } 
     }   

     for (int i = 0; i < m.size(); i++){ 
      System.out.println(m.get(i)); 
     }  
    } 
} 
+3

지도 당신은, 고유 키를 가질 수 있도록 더 [0,1] [0,2] 당신은 무엇을 달성 할 수 있음을 무엇 맵 –

+0

에 남아있을 것입니다 마지막으로,하지 –

+0

제공된 배열로 확장되고 서로 결합 된 기본 배열의 값을 포함 할 2 차원 배열 int [] []를 생성하려고합니다. 그런 다음 그것을 표시하고 싶습니다. – aretai

답변

2

저는 여기에 답변하는 것이 처음인데, 두뇌 훈련보다 낫습니다. 나는 당신의 문제로부터 어떤 의미를 추측하려고 노력했고, 당신이 팀 목록을 가지고 있고 조명기 목록을 생성하려고하는 것처럼 들리는 것으로 결정했습니다. int 대신 String을 사용하지만 작업을 수행하는 코드는 약간 있지만, 당신은 요점을 알아야합니다 ...

결과는 모든 조명기가 "조명기"목록에 저장되며 모두가 줄의 문장이 39

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class FixtureGen 
{ 
    class Fixture 
    { 
     public Fixture(String teamA, String teamB) 
     { 
      this.teamA = teamA; 
      this.teamB = teamB; 
     } 

     String teamA; 
     String teamB; 

     public String toString() 
     { 
      return teamA +" vs. "+teamB; 
     } 
    } 

    public static void main(String args[]) 
    { 
     FixtureGen gen = new FixtureGen(); 

     String[] teams = {"Spurs","Chelsea","Arsenal","Fulham","QPR","Palace"}; 
     List<String> teamList = Arrays.asList(teams); 
     List<Fixture> fixtures = new ArrayList<Fixture>(); 

     for (String team : teamList) 
     { 
      fixtures.addAll(gen.getHomeFixtures(team, teamList)); 
     } 

     for (Fixture fixture : fixtures) 
     { 
      System.out.println(fixture.toString()); 
     } 
    } 

    private List<Fixture> getHomeFixtures(String team, List<String> teamList) 
    { 
     List<Fixture> fixtures = new ArrayList<Fixture>(); 
     Fixture fixture = null; 
     for (String aTeam : teamList) 
     { 
      if (team != null && !team.equals(aTeam)) 
      { 
       fixture = new FixtureGen.Fixture(team, aTeam); 
       fixtures.add(fixture); 
      } 
     } 
     return fixtures; 
    } 
} 
2

자바지도는 키 당 하나 값을 지원합니다. 따라서 [0,2]를 넣으면 나중에 [0,7]에 넣으면 첫 번째 키 - 값 쌍이 바뀝니다. 그것이 당신이 넣는 마지막 값인 7을 볼 수있는 이유입니다.

각 키에 대해 다중 값을 지원하는 타사 구현 인 MultiMaps가 있습니다.

다른 데이터 구조를 사용할 수도 있습니다. 예를 들어, 모든 값이 정수인 경우 Map<Integer, BitSet>을 사용하고 Bitset에 비트를 추가 할 수 있습니다. 처음으로 null Bitset을 테스트해야합니다.

2

인쇄용으로 사용하는 경우 Map이 필요하지 않습니다. 루프에서 조합을 인쇄 할 수 있습니다.

당신이 그들을 저장할 않고, (그 2 int 초 동안 용기) 자신의 컨테이너 개체를 작성 고려해 단지 Map 대신 List에 넣어 멀티 맵을 사용하는 타사 libs가에 의존 할 수없는 경우 . 괜찮은 toString 구현과 함께 컨테이너 객체를 결합하면 인쇄가 쉬워 질 것입니다.

+0

예. – aretai

관련 문제