注册 登录
编程论坛 C++教室

大量if else的程序优化建议

十里八乡俊生 发布于 2022-11-03 11:29, 1825 次点击
程序需要大量的这种if
程序代码:

        if ( == 0) {
            setXAxis(20);
        }
        if (() == 1 )
        {   
            setXAxis(50);
        }
        else if (() == 2)
        {
            setXAxis(100);

我觉得很麻烦,但是新手没啥可优化的方案,看看大佬们怎么解决这个问题!
程序是俺写的,后面可能也是我在改,一想到后面我要是看这个大量if 就很烦
求大佬们意见。
10 回复
#2
十里八乡俊生2022-11-03 11:40
如果这样写,我差不多需要写1个if 和他的35个else if兄弟,

别说写了,我tm想想都难受
我网上搜点看看吧,
欢迎有经验得佬们踊跃交流。
#3
rjsp2022-11-03 13:33
首先,你的数据有没有规律?

如果有规律,你就写成公式,比如( y = 10*(i*i+2*i)+20
    setXAxis( 10** + 20* + 20 );
如果没有规律,你就用列表,比如
    auto ys[] = { 20, 50, 100 };
    setXAxis( ys[] );
如果它就不仅仅是数值上的差异
    那你不用 if else 或 switch,想得美
#4
十里八乡俊生2022-11-03 14:39
回复 3楼 rjsp
哈哈,感谢您的回复建议,很抱歉我贴的代码误导了你

我现在的问题比如:

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

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

#5
rjsp2022-11-03 14:52
听不懂,你把代码贴出来,具体问题具体分析
#6
十里八乡俊生2022-11-03 15:16
好的,老哥
主体代码如下:
程序代码:

#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);
}
#7
十里八乡俊生2022-11-03 15:20

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

我想看看多if结构有没有更新改进的可能性,要不if太多看的有点杂
#8
rjsp2022-11-03 19:39
你不是说有36个if嘛
#9
十里八乡俊生2022-11-04 09:27
回复 8楼 rjsp
对的
这个函数里的void pico_6_0::on_comboBox_x_currentIndexChanged(int index)
我暂时只写了3,5个暂代一下
#10
rjsp2022-11-04 09:37
以下是引用十里八乡俊生在2022-11-4 09:27:36的发言:

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

就像我在3楼的回复,如果你这个数值有规律,那就用公式,只需要一条语句
如果没规律,那就定义一个列表,只需求两条语句
#11
十里八乡俊生2022-11-04 09:49
回复 10楼 rjsp
好的老哥
1