2013-04-02 49 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))。由于所有这三款智能手机都代表相同的公司名称,因此您将得到错误的值(以先到者为准)。
对于这种问题,最好不要根据公司名称(这里是苹果智能手机)进行检查。想想你将如何设计一个数据库。
如果您为相同的表示设计数据库,您将永远不会使用公司名称作为主键吗?因为一家公司可以在市场上拥有多部手机。
我的建议使用的是一个bean而不是普通的字符串。该bean包含公司名称和一个id。重写bean的equals方法。像下面这样,

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; 
     } 
    } 

这只是一个例子。您可以按照自己的算法进行均衡。