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))。3 つのスマートフォンはすべて同じ会社名を表しているため、間違った値が取得されます (いずれか早い方)。
この種の問題については、会社名 (ここではアップル スマートフォン) に基づいてチェックしない方がよいでしょう。データベースをどのように設計するかを考えてみてください。
同じ表現用のデータベースを設計する場合、会社名を主キーとして使用することはありませんよね? 1 つの企業が複数の電話を市場に出すことができるからです。
私の提案では、プレーンストリングの代わりに 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 に答える