我来自Java / C ++到Ada,我很难搞清楚这些小东西。是否可以声明一个数组并询问用户最小/最大值然后初始化它?我不喜欢为MIN和MAX定义常量值,似乎应该有办法做到这一点。

您可以定义无约束类型,但仍需要在程序启动之前初始化声明块中的大小。我是否需要拥有包体,然后是程序声明,然后在实际完成工作的过程中的声明块,如下所示?

PACKAGE BODY Build_Graph IS
    TYPE Graph_Box IS ARRAY(Integer RANGE <>, Integer RANGE <>) of Character;

    PROCEDURE Print_Graph(Min, Max, Height, Width: IN Integer) IS
    BEGIN
        DECLARE
            Graph: Graph_Box(0..Height, 0..Width);
        BEGIN
            Do_Stuf(Graph);
        END;
    END Print_Graph;

END Build_Graph;
有帮助吗?

解决方案

你在那里展示的应该是有效的。但是,“声明”是指block是完全不受欢迎的,除非你想在数组变量声明或其他东西上捕获范围异常。我把它改为:

procedure Print_Graph(Min, Max, Height, Width: in Integer) is
    Graph: Graph_Box(0..Height, 0..Width);
begin
    Do_Stuf(Graph);
end Print_Graph;

(我也不喜欢在大写字母中保留单词。)


我还应该提一下:Ada数组 不像cish语言那样基于0。他们可以,但你也可以让他们从1,或200开始,或任何你想要的。

我提出这个问题的原因是我看到你定义Graph_Box的方式实际上是Height + 1个元素高和Width + 1个元素宽。你可能不希望这样,因为它可能会让某些人后来混淆(甚至可能是你)。

我的典型习惯是将数组索引设为1,除非我有充分的理由不这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top