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

你能帮我修一下吗?

4

1 回答 1

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

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

于 2013-04-02T08:29:02.590 回答