You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ada编程:计算距周六剩余天数的代码优化与输入校验问题

问题解答

1. 简化多分支逻辑的实现方案

你完全可以不用写大量elsif分支,这里有两种符合「不使用数组」要求的更简洁实现:

  • 方案1:直接用算术公式计算
    你设定的规则可以直接提炼为表达式:if Days <=5 then 6 - Days else 13 - Days end if,一行就能完成计算,不需要多分支匹配。
  • 方案2:用Ada的case语句替换elsif
    即使需要分支匹配,case语句的结构也比多层elsif更清晰易读,性能也更稳定。

2. 输入校验逻辑的调整建议

你当前的代码确实存在逻辑漏洞:即使输入超出1-7的范围,打印错误提示后仍然会继续调用Week函数,而Week没有处理非法输入,会触发运行时异常。推荐你把校验逻辑移入子程序内,原因有两个:

  • 校验逻辑和业务逻辑绑定,放在函数内可以保证所有调用这个函数的场景都自动有校验能力,不用每次调用都重复写校验代码
  • 避免外部调用时忘记校验传入非法值导致的异常
    你可以在函数内自定义异常,输入非法时直接抛出,主程序捕获异常做错误提示即可。

优化后完整代码示例

with Ada.Text_IO;         use Ada.Text_IO;                          
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

procedure Test3 is
    -- 自定义参数非法异常
    Invalid_Day_Error : exception;

    function Week (Days : in Integer) return Integer is
    begin
        -- 校验逻辑移入函数内
        if Days not in 1 .. 7 then
            raise Invalid_Day_Error with "输入的星期值必须在1-7之间";
        end if;
        -- 直接用算术公式计算结果
        return (if Days <= 5 then 6 - Days else 13 - Days);
    end Week;
      
    Input_Day : Integer;
    
begin
    Put("What day is it: ");
    Get(Input_Day);
    Put("It's ");
    Put(Week(Input_Day), Width => 1);
    Put_Line(" days until Saturday.");          
exception
    when Invalid_Day_Error =>
        Put_Line("Wrong Value");
    when Data_Error =>
        Put_Line("Wrong Value: 请输入合法整数");
end Test3;

这个版本还额外加了输入非整数的异常捕获,避免输入字符等内容时程序崩溃。

内容的提问来源于stack exchange,提问作者leun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:57:03