首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于两个Vector模拟二维数组的行列转置问题MatrixChange,急着,给100分 [已结贴,结贴人:lifetragedy]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 11:40:31 楼主
    要求是这样的
    有两个Vector,结构是这样的
            Vector format = new Vector();
            Vector v = new Vector();
    ----------------------------------------------
            v.addElement("x");
            v.addElement("y");
            v.addElement("x");
            format.addElement(v);
    ----------------------------------------------
            v=new Vector();
            v.addElement("a");
            v.addElement("b");
            v.addElement("c");
            format.addElement(v);
    ----------------------------------------------
            v=new Vector();
            v.addElement("d");
            v.addElement("e");
            v.addElement("f");
            format.addElement(v);
    ----------------------------------------------
            v=new Vector();
            v.addElement("1");
            v.addElement("2");
            v.addElement("3");
            format.addElement(v);
    ----------------------------------------------

    这样就有一个如下的两维数组了
    x  y  x
    a  b  c
    d  e  f
    1  2  3

    现在要求将这个format((Vector)v)里的数据行变列,列变行转成这样的形状

    x  a  d  1
    y  b  e  2
    x  c  f  3

    我是这样转的

    public void change(){
            Vector t_format=new Vector();
            Vector t_style=new Vector();
            for(int i=0;i <format.size();i++){
                Vector rowV=new Vector();
                rowV=(Vector)format.elementAt(i);
                for(int j=0;j <rowV.size();j++){
                  Object obj=rowV.elementAt(j);
                  t_style=new Vector();
                  for(int index=0;index <format.size();index++){
                      Vector tmpV = new Vector();
                      tmpV=(Vector)format.elementAt(index);
                      t_style.addElement(tmpV.elementAt(j));
                  }
                  t_format.addElement(t_style);
                }
                break;
            }
        }

    总觉得这边的一个break;不太好,我本来想不要最外层那个for,第二层for写成for(int j=0;j <format.element(0).size;j++)

    各位高手有什么意见?
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 12:48:261楼 得分:50
    Java code
    /** * project_name: Test * package_name: csdn_Test_20071126 * package_declaration: package csdn_Test_20071126; * filename: VertorChangeTest.java * author: yuhaiming * date: 2007-11-30 */ package csdn_Test_20071126; import java.util.*; public class VertorChangeTest { /** * 打印出来 * @param vec */ public static void display(Vector vec){ for(int i=0;i<vec.size();i++){ Vector curvec = (Vector)vec.elementAt(i); for(int j=0;j<curvec.size();j++){ System.out.print(curvec.elementAt(j)+" "); } System.out.println(""); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Vector total= new Vector(); initVector(total); display(total); total = changeVector(total); display(total); } /** * 改变向量位置 * @param total */ public static Vector changeVector(Vector total){ Vector result = new Vector(); int row = total.size();//得到行数 if(total.size()>0){ Vector curvec = (Vector)total.get(0); int col = curvec.size();//得到列数 System.out.println("行数:"+row+"列数:"+col); //交换是将行数列数对换 //第一次循环是得到原来向量列数数量的向量,也就是说原来有4列的话,将得到4个向量 for(int i=0;i<col;i++){ //初始一个对象,这个对象将放到结果集中 Vector curvector = new Vector(); //第二次循环,是对该对象赋值,赋值的数量是原来的行数 for(int j=0;j<row;j++){ curvec = (Vector)total.elementAt(j); String value = (String)curvec.elementAt(i);//得到该列上的值 curvector.addElement(value); } result.addElement(curvector); } }else{ System.out.println("元素太少"); } return result; } /** * 初始化元素 * @param total * @param ele */ public static void initVector(Vector total){ for(int i=0;i<4;i++){ Vector curvector = new Vector(); for(int j=0;j<3;j++){ //System.out.println("a"+i+j); curvector.addElement("a"+i+j); } total.addElement(curvector); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 13:03:252楼 得分:0
    seaforce
    如果我的组据结构是这样的,怎么办?

    x      y       
    a      b      c
    d              f
    1      2      3

    也就是行或列有可能会缺一个或多一个或者换句话说,行列数不定的情况下怎么办?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 13:19:143楼 得分:0
    不用反复循环,可以用数组

    Java code
    public Vector change(Vector v) { if (v.size() == 0) return new Vector(); Vector tv = (Vector)v.get(0); int colLen = tv.size(); //假设原来列是等长的,否则应该取最长的 Vector col = new Vector[colLen]; for (int i=0; i<col.length; i++) { col = new Vector(); } for (int i=0; i<v.size(); i++) { tv = (Vector)v.get(i); for (int j=0; j<tv.size(); j++) { col[j].addElement(tv.get(j)); } } Vector rst = new Vector(); for (int i=0; i<col.length; i++) { rst.addElement(col[i]); } return rst; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-30 13:24:444楼 得分:50
    如果原来列不等长
    Java code
    public Vector change(Vector v) { if (v.size() == 0) return new Vector(); Vector tv; // = (Vector)v.get(0); //int colLen = tv.size(); //假设原来列是等长的,否则应该取最长的 int maxLen = 0; for (int i=0; i<v.size(); i++) { tv = (Vector)v.get(i); if (tv.size()>max) max = tv.size(); } Vector col = new Vector[maxLen]; for (int i=0; i<col.length; i++) { col = new Vector(); } for (int i=0; i<v.size(); i++) { tv = (Vector)v.get(i); for (int j=0; j<tv.size(); j++) { col[j].addElement(tv.get(j)); } for (int j=tv.size(); j<maxLen; j++) { col[j].addElement(""); //这里要补齐 } } Vector rst = new Vector(); for (int i=0; i<col.length; i++) { rst.addElement(col[i]); } return rst; }
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved