【问题标题】:Complicated Converting Row into Column Array复杂的将行转换为列数组
【发布时间】:2013-04-02 08:01:06
【问题描述】:

我得到了这些代码:

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

你能帮我解决吗?

【问题讨论】:

  • 在这里发帖之前,你有没有试过在调试模式下测试它??
  • 使用的数据结构是强制的还是可以随意更改?
  • 结果是什么?你是如何打印你提供的输出的?可以显示对应的代码sn-p吗?
  • 如果我明白你在做什么,我不得不说这是我见过的最糟糕的代码之一
  • @iberbeu 您正在使用“Ad hominem”谬误。 “Ad hominem”是个人针对对手而不是针对他们的论点提出的论点。 (wiki)如果你说它是 worat,你必须争论为什么它是最糟糕的,而不是仅仅因为没有任何证据而说?

标签: java arrays loops multidimensional-array


【解决方案1】:

这里的主要问题是平等检查,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;
        }
    }

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

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2022-01-21
    • 1970-01-01
    • 2021-11-04
    • 2023-03-14
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多