-
枚舉型
鎖定
- 中文名
- 枚舉型
- 外文名
- enumeratedtype
- 定 義
- 將變量的值一一列出來,變量的值只限於列舉出來的值的範圍內
枚舉型類型定義
類型定義的語法格式:
type
<標識符1>=<類型1>;
<標識符2>=<類型2>;
……
<標識符n>=<類型n>;
枚舉型枚舉類型
通過預定義列出所有值的標識符來定義一個有序集合,這些值的次序和枚舉類型説明中的標識符的次序是一致的。枚舉類型的形式:(標識符1,……,標識符n)
例如: type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)
type daystype=('sun','mon','tue','wed','thu','fri','sat')
type daytype1=(monday,tuesday);
daytype2=(monday,wednesday);
可以將枚舉類型的定義和變量的定義結合在一起。例如:var a:(monday,tuesday,sunday)
枚舉類型屬於順序類型。根據定義類型時各枚舉元素的排列順序確定它們的序列,序列號從0開始
例如:已經定義daystype
ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday
但是枚舉類型中的第一個元素沒有前驅,最後一個元素沒有後繼。Turbo Pascal不允許直接讀寫枚舉值,所以枚舉值的輸出常用case語句間接的輸出。枚舉值的輸入,則要一一判斷讀入字符是否是枚舉類型的標識符。若是才能賦給枚舉變量,否則就會出錯。
例如:枚舉值的輸出
case day of
sunday:write('sunday');
monday:write('monday');
tuesday:write('tuesday');
wednesday:write('wednesday');
thursday:write('thursday');
friday:write('friday');
saturday:write('saturday');
end;
枚舉型子界類型
常量..常量 兩個常量必須是同一種順序類型。例如:a..b,要求a<=b
例如:
type a=1..3;
b='a'..'d';
例 按月、日、年順序讀入一日期,輸出該日期是這一年中的第幾天。
program date;
var year:0..2010;
month,i:1..12;
day:1..31;
dayth:integer;
begin
read(month,day,year);
dyath:=0;
for i:=1 to month-1 do
case i of
1,3,5,7,8,10,12:dayth:=dayth+31;
2:if (year mod 4=0)and(year mod 100<0)or(year mod 400 =0)
then dayth:=dayth+29
else dayth=:=dayth+28;
4,6,9,11:dayth:=dayth+30;
end;
dayth:=dayth+day;
writeln(dayth)
end.
枚舉型類型相容
類型相容是對參加同一運算的兩個對象的類型要求。設有兩個變量,如果滿足下列條件之一,就説這兩個變量的類型相容。
(1)兩個變量的類型相同
a.兩個變量被同一類型説明。
例如:var a,b:1..30;
b.兩個變量的類型是同一類型標識符。
例如:var a:1..30; b:1..30;
c.兩個變量的類型是不同的類型標識符,但在類型定義中已經説明兩個標識符相同。
例如:type date=1..100; range=date;
var m:data;n:range;
(2)一個變量的類型是另一個變量的子界。
(3)兩個變量的類型都是同一基類型的子界。
(4)兩個變量的類型是基類型相容的集合類型。
(5)兩個變量的類型是成分相同的串類型。
枚舉型賦值相容
(1)T和E是相同的類型,而且類型不是文件類型,也不是具有文件類成分的構造類型。
(2)T是實型,而E是整型或整型的子界。
(3)T和E是類型相容的順序類型,並且E的值不超出T所定義的值的範圍
(4)T和E是類型相容的集合類型,並且E的值不超出T所定義的值的範圍
(5)T和E是類型相容的串類型。
當T和E是順序類型或都是集合類型時,不僅要求這兩個類型是相容的,而且要求E的值不超出T所定義的值的範圍;否則將產生類型溢出,而這種錯誤只能在你運行程序時進行檢查,因此你必須要避免不發生這種錯誤。
在java中枚舉類型一般定義格式如下:
enum 枚舉類名
清單對象1, [清單對象2....];
java中的枚舉類可以有構造函數、可以實現接口,但不能繼承任何類,其在編譯以後默認繼承jdk內部的枚舉類。