关于长度单位换算  (内有代码)
tonghuamy2012/12/14软件综合 IP:四川
不是现在很多软件都有单位换算吗?就拿长度来说吧,比如每一个框填上你要换算的数字,然后选单位(米,千米,英里....等),然后再选择需要转成什么单位,所以还需要选择一次(还是 米,千米,英里....等),那好 比如你想算一下120米等于多少英寸,那你在每一个框填120,然后选择“米”,然后再选择需要转换成的“英寸” ,然后第二个框里就会显示出转换后的结果,实现起来简单还是复杂?

我的方案有两种
一、switch case实现 ,嵌套  通过第一个单位选择进入第一个switch,然后第二个单位选择进入第二个switch
二、用if else 类似上面的  if(第一个选择 && 第二个选择)

伪代码:
一、if else
  XXXXXXXXXXXXXXXXXXd("千米");  //初始化输入单位标签
            XXXXXXXXXXXXXXXXXXd("米");
            XXXXXXXXXXXXXXXXXXd("分米");

            XXXXXXXXXXXXXXXXXXd("千米");  //初始化输出单位标签
            XXXXXXXXXXXXXXXXXXd("米");
            XXXXXXXXXXXXXXXXXXd("分米");

            string I = comboBox1.Text;   //输入单位选择
            string O = comboBox2.Text;   //输出单位选择

            string Ix_ = textBox1.Text;   //输入数值
            string Ox_ = textBox2.Text;   //输出数值

            int Ix = 0;

            if (Ix_ != string.Empty)
                Ix = XXXXXXXXrse(Ix_);

            if (I == "千米" && O == "米")
               Ox_ = (Ix * 1000).ToString();
            else if (I == "千米" && O == "分米")
                Ox_ = (Ix * 10000).ToString();
             ............
              textBox2.Text =  Ox_;
            ................
}

二、用switch case实现
XXXXXXXXXXXXXXXXXXd("千米");  //初始化输入单位标签
            XXXXXXXXXXXXXXXXXXd("米");
            XXXXXXXXXXXXXXXXXXd("分米");

            XXXXXXXXXXXXXXXXXXd("千米");  //初始化输出单位标签
            XXXXXXXXXXXXXXXXXXd("米");
            XXXXXXXXXXXXXXXXXXd("分米");

            string I = comboBox1.Text;   //输入单位选择
            string O = comboBox2.Text;   //输出单位选择

            string Ix_ = textBox1.Text;   //输入数值
            string Ox_ = textBox2.Text;   //输出数值

            int Ix = 0;

            if (Ix_ != string.Empty)
                Ix = XXXXXXXXrse(Ix_);
            switch(I)
            {
                case "千米":
                    switch(O)
                    {
                        case "米": Ox_ = (Ix * 1000).ToString(); break;
                        case "分米": Ox_ = (Ix * 10000).ToString(); break;
                    }
                    break;
                case "米":
                    switch (O)
                    {
                        case "千米": Ox_ = (Ix * 0.001).ToString(); break;
                        case "分米": Ox_ = (Ix * 10).ToString(); break;
                    }
                    break;
                   //...............
            }
               textBox2.Text =  Ox_;
不晓得还有没有更好的方法?
来自:计算机科学 / 软件综合
5
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
我说要有光
12年1个月前 IP:未同步
479040
这貌似不是现代程序设计领域里该考虑的问题啊。。。

你说的两种方案都可以,现在大多数语言的库里都有一种叫hashtable的实现,直接把名称存成Key,比率存成Value即可,当然,嵌入式领域另算
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
相对论万岁
12年1个月前 IP:未同步
479151
没学vb……
表示曾经想过其它的方法
先选择输入单位,然后输入数字
之后根据输入单位将输入的单位换成一个标准单位,例如输入cm先换成m,用一个变量保存
then
选择输出单位,再从标准单位换成所需单位
例如5cm换成dm
先将5cm换成0.05m
再换成0.5dm
在单位比较多的情况下应该比较简单……
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tonghuamy作者
12年1个月前 IP:未同步
479215
见笑了 ,其实我之前搞JAVA 惭愧啊!都没想到一楼说的hashTable(因为现在在弄C#,上面代码也是C#写的)。  还有二楼说的也不错,转正一个单位,所有的都用那个再转换。终于明白为什么有编程高手了,他们写的代码确实让人看不懂,简单的几句 能做很多事情
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kesshei
12年1个月前 IP:未同步
482007
简单明了,学习了   高手众多啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}