达到 "Boolean" 预期 "LongInt" 帕斯卡
Got "Boolean" expected "LongInt" pascal
我的插入排序算法出现这个错误:
insertionsort.lpr(19,17) Error: Incompatible types: got "Boolean" expected "LongInt"
这是我的代码的第 19 行
while j > 0 and A[j]>key do
我尝试在整个互联网上进行谷歌搜索,但找不到任何语法错误或任何内容。
如果对您有帮助,请查看完整代码:
program instert;
uses crt;
const
N = 5;
var
i:integer;
j:integer;
key:integer;
A : Array[1..N] of Integer;
procedure insertionsort;
begin
for i := 2 to N do
begin
key := A[1];
j:= i - 1;
while j > 0 and A[j]>key do
begin
A[j+1] := A[j] ;
j := j-1;
end;
A[j+1] := key ;
end;
end;
begin
A[1]:= 9;
A[2]:= 6;
A[3]:= 7;
A[4]:= 1;
A[5]:= 2;
insertionsort;
end.
我在冒泡排序算法上也遇到了同样的错误。这是错误行
bubblesort.lpr(26,14) Error: Incompatible types: got "Boolean" expected "LongInt"
这是我的算法的第 26 行:
until flag = false or N = 1 ;
完整代码如下:
program bubblesort;
uses crt;
var
flag:boolean;
count:integer;
temp:integer;
N:integer;
A : Array[1..N] of Integer;
procedure bubblesort ;
begin
Repeat
flag:=false;
for count:=1 to (N-1) do
begin
if A[count] > A[count + 1] then
begin
temp := A[count];
A[count] := A[count + 1];
A[count] := temp;
flag := true;
end;
end;
N := N - 1;
until flag = false or N = 1 ;
end;
begin
A[1]:= 9;
A[2]:= 6;
A[3]:= 7;
A[4]:= 1;
A[5]:= 2;
N := 5;
bubblesort;
end.
在Pascal中,布尔运算符and
和or
的优先级高于比较运算符>
、=
等。所以在表达式中:
while j > 0 and A[j] > key do
鉴于 and
具有更高的优先级,Pascal 将其视为:
while (j > (0 and A[j])) > key do
0 and A[j]
被计算为按位 and
(因为参数是整数),结果是一个整数。然后比较 j > (0 and A[j])
被评估为布尔结果,留下 > key
的检查,即 boolean > longint
。然后你会得到一个错误,即预期 longint
而不是 boolean
用于算术比较。
修复方法是括号:
while (j > 0) and (A[j] > key) do ...
同样的问题适用于此语句:
until flag = false or N = 1 ;
会产生错误,因为 or
的优先级高于 =
。所以你可以加上括号:
until (flag = false) or (N = 1);
或者,对于布尔值更规范:
until not flag or (N = 1); // NOTE: 'not' is higher precedence than 'or'
当对运算符的优先级有疑问时,加括号是个好主意,因为它消除了对运算顺序的疑虑。
我的插入排序算法出现这个错误:
insertionsort.lpr(19,17) Error: Incompatible types: got "Boolean" expected "LongInt"
这是我的代码的第 19 行
while j > 0 and A[j]>key do
我尝试在整个互联网上进行谷歌搜索,但找不到任何语法错误或任何内容。
如果对您有帮助,请查看完整代码:
program instert;
uses crt;
const
N = 5;
var
i:integer;
j:integer;
key:integer;
A : Array[1..N] of Integer;
procedure insertionsort;
begin
for i := 2 to N do
begin
key := A[1];
j:= i - 1;
while j > 0 and A[j]>key do
begin
A[j+1] := A[j] ;
j := j-1;
end;
A[j+1] := key ;
end;
end;
begin
A[1]:= 9;
A[2]:= 6;
A[3]:= 7;
A[4]:= 1;
A[5]:= 2;
insertionsort;
end.
我在冒泡排序算法上也遇到了同样的错误。这是错误行
bubblesort.lpr(26,14) Error: Incompatible types: got "Boolean" expected "LongInt"
这是我的算法的第 26 行:
until flag = false or N = 1 ;
完整代码如下:
program bubblesort;
uses crt;
var
flag:boolean;
count:integer;
temp:integer;
N:integer;
A : Array[1..N] of Integer;
procedure bubblesort ;
begin
Repeat
flag:=false;
for count:=1 to (N-1) do
begin
if A[count] > A[count + 1] then
begin
temp := A[count];
A[count] := A[count + 1];
A[count] := temp;
flag := true;
end;
end;
N := N - 1;
until flag = false or N = 1 ;
end;
begin
A[1]:= 9;
A[2]:= 6;
A[3]:= 7;
A[4]:= 1;
A[5]:= 2;
N := 5;
bubblesort;
end.
在Pascal中,布尔运算符and
和or
的优先级高于比较运算符>
、=
等。所以在表达式中:
while j > 0 and A[j] > key do
鉴于 and
具有更高的优先级,Pascal 将其视为:
while (j > (0 and A[j])) > key do
0 and A[j]
被计算为按位 and
(因为参数是整数),结果是一个整数。然后比较 j > (0 and A[j])
被评估为布尔结果,留下 > key
的检查,即 boolean > longint
。然后你会得到一个错误,即预期 longint
而不是 boolean
用于算术比较。
修复方法是括号:
while (j > 0) and (A[j] > key) do ...
同样的问题适用于此语句:
until flag = false or N = 1 ;
会产生错误,因为 or
的优先级高于 =
。所以你可以加上括号:
until (flag = false) or (N = 1);
或者,对于布尔值更规范:
until not flag or (N = 1); // NOTE: 'not' is higher precedence than 'or'
当对运算符的优先级有疑问时,加括号是个好主意,因为它消除了对运算顺序的疑虑。