2013-04-02 3 views
0

에 행을 변환 복잡한 :나는이 코드를 가지고 열 배열

String[] s1={"Samsung Smarphone","20MB"}; 
      String[] s11={"Apple Smarphone","25MB"}; 

      String[] s2={"Samsung Smarphone","3 in"}; 
      String[] s22={"Apple Smarphone","6 in"}; 

      String[] s3={"Samsung Smarphone","3GB"}; 
      String[] s33={"Apple Smarphone","2 GB"}; 




      String[] s4={"Apple Smarphone","iphone1"}; 
      String[] s44={"Apple Smarphone","iphone2"}; 
      String[] s444={"Apple Smarphone","iphone3"}; 

      List<String[]> l1=new ArrayList<String[]>(); 
      l1.add(s1); 
      l1.add(s11); 

      List<String[]> l2=new ArrayList<String[]>(); 
      l2.add(s2); 
      l2.add(s22); 

      List<String[]> l3=new ArrayList<String[]>(); 
      l3.add(s3); 
      l3.add(s33); 

      List<String[]> l4=new ArrayList<String[]>(); 
      l4.add(s4); 
      l4.add(s44); 
      l4.add(s444); 

      Vector<List<String[]>> myV=new Vector<List<String[]>>(); 
      myV.add(l1); 
      myV.add(l2); 
      myV.add(l3); 
      myV.add(l4); 


      List<String[]> resultL=new ArrayList<String[]>(); 


      String[] mainS={"Samsung Smarphone","Apple Smarphone","Apple Smarphone","Apple Smarphone"}; 
      for (int i=0; i<mainS.length; i++){ 


       String[] theRow=new String[myV.size()+1]; 

       for (int k=0; k<myV.size(); k++){ 
        List<String[]> smallList=(List<String[]>)myV.elementAt(k); 
        String[][] small2DArr=new String[smallList.size()][2]; 
        smallList.toArray(small2DArr); 

        String strMain=mainS[i]; 
        int rows=small2DArr.length; 



        int cols=2; 

        for(int y=0; y<rows; y++) 
        { 
         for(int z=0; z<cols; z++){ 
          String str=small2DArr[y][z]; 
          if(strMain.equals(str)) 
          { 
           theRow[0]=strMain; 
           theRow[k+1]=small2DArr[y][1]; 
          } 
         } 
        } 
       } 
       resultL.add(theRow); 
      } 

      for(int u=0; u<resultL.size(); u++) 
      { 
       String[] myR=resultL.get(u); 
       //int ddd=xxx.length; 
       System.out.println("\n----------------\n"); 
       for (String s : myR) 
       { 
        System.out.print(s +"\t"); 
       } 

      } 

결과는 다음과 같습니다

Samsung Smarphone 20MB 3 in 3GB null  
---------------- 

Apple Smarphone 25MB 6 in 2 GB iphone3 
---------------- 

Apple Smarphone 25MB 6 in 2 GB iphone3 
---------------- 

Apple Smarphone 25MB 6 in 2 GB iphone3 

위의 결과는 정확하지 않습니다. 결과는 다음과 같습니다.

Samsung Smarphone 20MB 3 in 3GB null  
---------------- 

Apple Smarphone 25MB 6 in 2 GB iphone1 
---------------- 

Apple Smarphone 25MB 6 in 2 GB iphone2 
---------------- 

Apple Smarphone 25MB 6 in 2 GB iphone3 

수정 해 주시겠습니까?

+0

여기에 게시하기 전에 디버그 모드에서 테스트 해 보셨습니까 ?? – MissingNumber

+0

사용 된 데이터 구조가 필수입니까, 아니면 자유롭게 변경할 수 있습니까? –

+0

그 결과는 무엇입니까? 당신이 제공 한 결과를 어떻게 인쇄 했습니까? 해당 코드 스 니펫을 표시 할 수 있습니까? – sp00m

답변

0

여기서 주요 문제는 등호 검사 if(strMain.equals(str))입니다. 3 개의 스마트 폰이 모두 동일한 회사 이름을 나타내므로 잘못된 값을 얻습니다 (둘 중 빠른 날짜 적용).
이런 종류의 문제는 회사 이름 (여기서는 애플 스마트 폰)을 기준으로 확인하지 않는 것이 좋습니다. 데이터베이스를 설계하는 방법을 생각해보십시오.
동일한 표현으로 데이터베이스를 디자인하는 경우 회사 이름을 기본 키로 사용하지 마십시오. 한 회사가 시장에 여러 개의 전화를 가질 수 있기 때문입니다.
내 제안은 일반 문자열 대신 빈을 사용합니다. bean에는 회사 이름과 ID가 들어 있습니다. bean의 equals 메소드를 오버라이드 (override)합니다. 아래에있는 것,

class MyBean{ 
     private String company; 
     private int id; 
     public MyBean(int id, String company) { 
      this.id = id; 
      this.company = company; 
     } 

     @Override 
     public boolean equals(Object obj) { 
      return id == ((MyBean)obj).id; 
     } 

     @Override 
     public String toString() { 
      return company; 
     } 
    } 

이것은 단지 예입니다. 균등화 알고리즘을 따를 수 있습니다.

관련 문제