我正在写一个解决数独难题的Ada程序。现在我只是想让阵列正确填充和输出。我接受了这样的文本文档:
4 5 7 89
2 5 6
79 542
35 6489
3 8
6847 91
238 59
79 3 2 1
1 6 7 3
其中空格为空方块。 数组声明:
Sudoku_Array : array (1..9, 1..9) of Integer;
这是为数组赋值的代码。 Is_Char_Number检查字符是否为0-9,并且ConverttoNum将Char转换为整数。数组应该只有空格所在的空值。
Open(File, In_File, Argument(1));
while not End_Of_File(File) loop
for R in 1..9 loop
for C in 1..9 loop
Get(File, Char);
if Is_Char_Number(Char) then
Sudoku_Array(R,C) := ConverttoNum(Char);
end if;
end loop;
end loop;
end loop;
所以,如果我输入上面未完成的数独谜题,我就把它拿出来(放宽度为2):
4 0 5 0 732630 8 9-1620489328
326304196088 2 0 56846 6 0 0
-161330220832630 7 91163006750 0 5 4 2
32767-1613303064 3 532630 6 4 8 9
1 1 0 3 1 8-161330306432630 0
0 6 8 4 7-1613314008 9 1 1
0 2 3 8-161330220832630 5 9-1623044096
32630 7 94198472 31264732688 2-1615461819 1
1 0 6 6-162053872032630 732630 3
我假设疯狂的数字是空数组实例,但其中一些是零,因为它们被设置为整数0。
那么,有没有办法将整数数组值正确设置为null? 并且,有没有办法更好地在屏幕上显示结果?显示空格而不是疯狂的数字。
由于
编辑:谢谢你们,我可能会以错误的方式来做这件事。我没有尝试将空格设置为空数组值,而是将其设置为零。因为数独中没有零,所以无论如何它们都必须被改变。多谢你们!非常感谢。答案 0 :(得分:4)
两种简单的方法:选一个。
1)初始化数组:
Sudoku_Array : array (1..9, 1..9) of Integer := (others => (others => 0));
这可能看起来很奇怪,但是(others => 0)
将1-D数组中的每个元素设置为0,而另一个others =>
子句为每一行执行此操作。
2)在else
子句中添加默认操作。
if Is_Char_Number(Char) then
Sudoku_Array(R,C) := ConverttoNum(Char);
else
Sudoku_Array(R,C) := 0;
end if;
我认为初始化在这里比较简洁,但两种方式都有其用途。
答案 1 :(得分:2)
我不知道Ada是如何工作的,但你似乎只检查是否有一个带
的字符if Is_Char_Number(Char) then
Sudoku_Array(R,C) := ConverttoNum(Char);
end if;
所以如果它是一个char转换它并将它放在数组中,如果不是?然后你插入一个零,你会想做我想要的