| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1420 人关注过本帖
标题:大量if else的程序优化建议
只看楼主 加入收藏
十里八乡俊生
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2022-10-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
大量if else的程序优化建议
程序需要大量的这种if
程序代码:
        if ( == 0) {
            setXAxis(20);
        }
        if (() == 1 ) 
        {    
            setXAxis(50);
        }
        else if (() == 2) 
        {
            setXAxis(100);

我觉得很麻烦,但是新手没啥可优化的方案,看看大佬们怎么解决这个问题!
程序是俺写的,后面可能也是我在改,一想到后面我要是看这个大量if 就很烦
求大佬们意见。
2022-11-03 11:29
十里八乡俊生
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2022-10-13
收藏
得分:0 
如果这样写,我差不多需要写1个if 和他的35个else if兄弟,

别说写了,我tm想想都难受
我网上搜点看看吧,
欢迎有经验得佬们踊跃交流。
2022-11-03 11:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:20 
首先,你的数据有没有规律?

如果有规律,你就写成公式,比如( y = 10*(i*i+2*i)+20
    setXAxis( 10** + 20* + 20 );
如果没有规律,你就用列表,比如
    auto ys[] = { 20, 50, 100 };
    setXAxis( ys[] );
如果它就不仅仅是数值上的差异
    那你不用 if else 或 switch,想得美
2022-11-03 13:33
十里八乡俊生
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2022-10-13
收藏
得分:0 
回复 3楼 rjsp
哈哈,感谢您的回复建议,很抱歉我贴的代码误导了你

我现在的问题比如:

这个帖子下面有1--8,8楼分别是8个不同的人
如果我选择第一个帖子,然后和他有一些互动操作
如果我选择第二个帖子,然后和他有一些互动操作
如果我选择第三个帖子,然后和他有一些互动操作
如果我选择第四个帖子,然后和他有一些互动操作
。。。
可能互动操作的内容一样,我可能统一回复:大佬,你真帅啊, 这句话(每次只能选择一个帖子)

这种if情况有优化的可能吗?

2022-11-03 14:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
听不懂,你把代码贴出来,具体问题具体分析
2022-11-03 14:52
十里八乡俊生
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2022-10-13
收藏
得分:0 
好的,老哥
主体代码如下:
程序代码:
#include "pico_6_0.h"
#include<Qchartview.h>
#include<qdebug.h>
#include<cstdlib>
#include<qtimer.h>
using namespace QtCharts;
pico_6_0::pico_6_0(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    spc_one = new SPC;    
        // combobox_x改变索引时,改变坐标系
        connect(,QOverload<int>::of(&QComboBox::currentIndexChanged),this,&pico_6_0::on_comboBox_x_currentIndexChanged);
        chart->addAxis(mAxY, Qt::AlignLeft);
        chart->addAxis(mAxX, Qt::AlignBottom);
        //将图表绑定到视图
        ui.datawidget->setChart(chart);
}    
void pico_6_0::on_comboBox_x_currentIndexChanged(int index)
{
        if (() == 0) {
            setXAxis(20);
        }
        else if (() == 1 ) 
        {    
            setXAxis(50);
        }
        else if (() == 2) 
        {
            setXAxis(100);
        }
        else if (() == 3) 
        {
            setXAxis(200);
        }
}
//设置X轴,参数为总刻度
void pico_6_0::setXAxis(int x_scale)
{
    if (x_scale < qPow(10,3)) 
    {
         x_title = "ns";
    }
    else if (x_scale < qPow(10,6) && x_scale >= qPow(10, 3))
    {
         x_title = "us";
         x_scale = x_scale / 1000;
    }
    mAxX->setTitleText(x_title);
    mAxX->setRange(0, x_scale);
    mAxX->setTickCount(11);
}
2022-11-03 15:16
十里八乡俊生
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2022-10-13
收藏
得分:0 

根据下拉框 每次选定的值,对坐标轴x轴进行对应的变动设置

我想看看多if结构有没有更新改进的可能性,要不if太多看的有点杂
2022-11-03 15:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
你不是说有36个if嘛
2022-11-03 19:39
十里八乡俊生
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2022-10-13
收藏
得分:0 
回复 8楼 rjsp
对的
这个函数里的void pico_6_0::on_comboBox_x_currentIndexChanged(int index)
我暂时只写了3,5个暂代一下
2022-11-04 09:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用十里八乡俊生在2022-11-4 09:27:36的发言:

对的
这个函数里的void pico_6_0::on_comboBox_x_currentIndexChanged(int index)
我暂时只写了3,5个暂代一下

就像我在3楼的回复,如果你这个数值有规律,那就用公式,只需要一条语句
如果没规律,那就定义一个列表,只需求两条语句
2022-11-04 09:37
快速回复:大量if else的程序优化建议
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019142 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved