首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MATLAB:如何为非标量返回值-1

MATLAB:如何为非标量返回值-1
EN

Stack Overflow用户
提问于 2016-08-11 10:36:57
回答 3查看 808关注 0票数 0

编写一个名为day_diff的函数,它接受四个标量正整数输入,month1、day1、month2、day2。这是2015年出生的两个孩子的生日。该函数返回一个正整数标量,该正整数标量等于两个孩子的年龄(以天为单位)的差异。确保检查输入值的类型是否正确,并且它们表示有效日期。如果他们是错误的,返回-1。对该函数的一个示例调用是:

代码语言:javascript
运行
复制
dd = day_diff(1,30,2,1);

这将使dd等于2,不允许使用内置函数datenumdatetime

代码语言:javascript
运行
复制
function dd = day_diff(month1, day1, month2, day2)

if (month1 && month2 > 0) || (month1 && month2 <= 12)

    if month1 == 1 && month2 == 1
        if day1 == day2
            total1 = day1;
            total2 = day2;
        elseif day1 ~= day2
            total1 = max(day1,day2);
            total2 = min(day1,day2);
        end
    elseif month1 == 1 && month2 == 2
        total1 = day1;
        total2 = day2 + 31;
    elseif (month1 == 2 && day1 <= 28) && month2 == 1
        total1 = day1 + 31;
        total2 = day2;
    elseif month1 == 1 && month2 == 12
        total1 = day1;
        total2 = day2 + 334;
    elseif month1 == 2 && month2 == 3
        total1 = day1 + 31;
        total2 = day2 + 59;
    elseif month1 == 7 && month2 == 9
        total1 = day1 + 181;
        total2 = day2 + 243;
    elseif month1 == 1 && month2 == 4
        total1 = day1;
        total2 = day2 + 90;
    else
        dd = -1;
        return
    end
end

if (day1<1 || day1>31) || (month1<1 || month1>12)
    dd = -1;
    return

elseif day2<1 || day2>31 || (month2<1 || month2>12)
    dd = -1;
    return

else
    dd = (max(total1,total2)) - (min(total1,total2));
end

除非我有一个向量作为输入参数(比如(12,3,3,4,5),否则我的函数表现得很好。我试过使用~isscalar,但它似乎不像我那样工作。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-11 10:58:03

若要检查任何输入是否不是数组,请执行以下操作:

代码语言:javascript
运行
复制
if any([length(month1)~=1, length(month2)~=1, length(day1)~=1, length(day2)~=1;])
   dd=-1;
   return;
end
票数 0
EN

Stack Overflow用户

发布于 2016-08-11 12:29:28

我会做这样的事:

代码语言:javascript
运行
复制
function dd = day_diff(varargin)

if nargin~= 4 || any(~cellfun(@isscalar,varargin))
  dd = -1; return;
end

month1 = varargin{1};
day1 = varargin{2};
month2 = varargin{3};
day2 = varargin{4};

... rest of your code
票数 1
EN

Stack Overflow用户

发布于 2017-01-17 22:28:50

解决办法是不正确的。例如,如果您要使用(8,29,8,25),您必须有4天,但在您的程序中,您将有-1。所有的程序都写错了

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38893979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档