برنامج Java Enum التعليمي: ما هو وكيف يتم تنفيذه؟



ستزودك هذه المقالة حول Java Enum Tutorial بمعرفة مفصلة عن ثوابت Enum جنبًا إلى جنب مع أمثلة عملية لفهم أفضل.

ال العد في هي طريقة لتعريف فئة ذات ثوابت ثابتة ومسمية مع كل منها باستخدام الكلمة تعداد. في هذا ' برنامج Java Enum التعليمي 'المادة ، سوف نتعلمتحديد التعداد معأمثلة لفهم أفضل.

ما هو العد؟

جافا Enums هي فئات لها مجموعة ثابتة من الثوابت أو المتغيرات التي لا تميل إلى التغيير. يتم التعداد في Java باستخدام الكلمة الأساسية تعداد. جافا تعداد الثوابت ثابتة و نهائي بشكل ضمني. ميزة Enum متاحة منذ ذلك الحين JDK الإصدار 1.5.





لماذا نحتاج إلى العد؟

تعداد يحسن أمان الكتابة في فحص وقت الترجمة لتجنب الأخطاء في وقت التشغيل عن طريق تجنب التعليمات البرمجية المعيارية. على سبيل المثال ، إذا كان عليك تحديد احتمال واحد من أقل عدد من الخيارات المتاحة ، على سبيل المثال ،

مهنة اكتب: (عقد / مؤقت / دائم)



جافا تعداد الموظف التعليمي

ثم يكون الخيار الأفضل هو استخدام ملف تعداد. لان تعداد يمكن استخدامها بسهولة في التبديل. تعداد يمكن اجتيازها. تعداد يستطيع يملك المجالات والمنشآت والأساليب. بالتالي، فهو يزيد من فحص وقت الترجمة ويتجنب الأخطاء بسبب تمرير ثوابت غير صالحة ، لأنك قمت بالفعل بتوثيق القيم القانونية التي يجب استخدامها.

الاختلافات بين Enum و Class

على الرغم من أن الفصل والتعداد لهما وظائف مماثلة في بيئة Java ، إلا أنهما يختلفان في جوانب قليلة. دعونا نناقش الاختلافات



تعداد صف دراسي
لا يمكن تجاوز ثوابت التعداديمكن تجاوز ثوابت الفئة
لا يدعم Enum إنشاء الكائناتالطبقة تدعم إنشاء الكائنات
لا يمكن لـ Enum توسيع الفئات الأخرىيمكن للفصل أن يمتد إلى الفئات الأخرى
تعداد جواجهة تنفيذيمكن للفئة تنفيذ الواجهة


أمثلة عملية على Enum

الآن ، لفهم التعداد بطريقة أفضل بكثير ، دعونا ننفذ بعض الأمثلة العملية بناءً على ما يلي.

تعريف التعداد في جافا

يمكن التصريح عن Enum إما داخل فصل دراسي أو خارج cدع. لكن ، لا يمكن التصريح به داخل أي طريقة. لنأخذ مثالًا صغيرًا لفهم تركيبه وتعريفه وإعلانه.

بناء الجملة:

تعداد اسم {ثوابت}

في هذا المثال ، أعلنا عن الأساسية() طريقة في داخل تعداد

تعريف الحزمة فئة عامة Edureka {enum Level {BAJA، KTM، YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

في هذا المثال ، فإن ملف الأساسية() الطريقة المعلنة في الخارج من تعداد.

تعريف الحزمة ، تعداد اللون {BAJAJ، KTM، YAMAHA} فئة عامة Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//انتاج:

ياماها

Enum المستخدم في حالة التبديل

يمكن استخدام التعداد في بيان التبديل أيضًا. من المهم أن تستخدم جميع عبارات الحالة ثوابت من نفس التعداد كما هو مستخدم بواسطة تعليمة التبديل. دعونا نتحقق من مثال على هذا الأساس.

هنا ، سنعلن عن تعداد بأيام الأسبوع كعناصره وسنقوم بتمرير البيانات في شكل سلسلة لطباعة بيانات الحالة المطابقة.

تم تبديل الحزمة في التعداد يوم {الأحد ، الاثنين ، الثلاثاء ، الأربعاء ، الخميس ، الجمعة ، السبت} الطبقة العامة Edureka {Day day public Edureka (Day day) {this.day = day} public void dayIsLike () {switch (day) {case الإثنين: System.out.println ('مرحبًا ، اليوم هو الإثنين') كسر حالة TUESDAY: System.out.println ('مرحبًا ، اليوم هو الثلاثاء') حالة الاستراحة يوم الأربعاء: System.out.println ('مرحبًا ، اليوم هو الأربعاء' ') كسر حالة الخميس: System.out.println ('مرحبًا ، اليوم هو الخميس') حالة كسر الجمعة: System.out.println ('مرحبًا ، اليوم هو الجمعة.') حالة كسر السبت: System.out.println (' مرحبًا ، اليوم هو عطلة نهاية الأسبوع ') حالة الفاصل الأحد: System.out.println (' مرحبًا ، اليوم عطلة ') الفاصل الافتراضي: System.out.println (' الرجاء إدخال يوم صالح. ') break}} عام ثابت void main (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//انتاج:

خطة مراقبة ومراقبة المشروع

مرحبا اليومالإثنين

الميراث باستخدام التعداد

في الأساس ، أي تعداد يتم تمثيله كفئة تمتد لفئة الملخص java.lang. تعداد وله عدة أعضاء ثابتة. لذلك ، فإن تعداد لا يمكن تمديد أي فئة أخرى أو تعداد لا يوجد مضاعف الميراث . دعونا ننفذ مثالاً لنفهمه بطريقة أفضل.

هنا ، سوف نرث نظام التشغيل بناءً على صانع الهاتف.

حزمة توريث الاستيراد java.util.ArrayList import java.util.List public class Edureka {public static void main (String [] args) {List inherit = new ArrayList () ورث.add (LibraryEnum.FIRST) ورثت (ClientEnum. google) لـ (HTTPMethodConvertible element: وراث) {System.out.println (element.getHTTPMethodType ())}} واجهة ثابتة HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum implements HTTPMethodConvertOND {FIRST ('Google Pixel' 'Huawei')، THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} التعداد الثابت ClientEnum يقوم بتنفيذ HTTPMethodConvertible {huawei ('HongMing OS') ('iOS')، google ('Android One') String httpMethodType ClientEnum (سلسلة) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

//انتاج:

جوجل بيكسل
Android One

تعداد القيم المخصصة

Enums لها قيم سلسلة خاصة بها بشكل افتراضي ، يمكننا أيضًا تعيين بعض القيم المخصصة للتعدادات. دعونا ننظر في المثال أدناه.

تعداد حركة المرور {RED (“STOP”)، ORANGE (“WAIT”)، GREEN (“GO”)}

في المثال أعلاه ، يمكننا أن نرى أن Traffic enum لها ثلاثة أعضاء. يسمى،

برتقالة حمراء و أخضر مع القيم المخصصة المختلفة الخاصة بهم توقف ، انتظر و اذهب على التوالي.

الآن لاستخدام نفس النوع من التعداد في الكود ، من المتوقع أن نتبع بعض النقاط وهي:

  • نحن بحاجة لخلق مُنشئ معلمات لفئة التعداد هذه. لأننا نعرف ذلك تعداد لا يمكن إنشاء كائن class بشكل صريح ، لذا من أجل التهيئة ، نستخدم مُنشئ معلمات.
  • ال باني لا يمكن أن تكون عامة أو محمية يجب أن تكون نشر أو إفتراضي الصفات التعريفية. إذا أنشأنا عامًا أو محميًا ، فسيسمح ذلك بتهيئة أكثر من عنصر واحد معارضة تمامًا تعداد الوظائف.
  • علينا إنشاء طريقة getter للحصول على قيمة تعداد.

دعونا ننفذ برنامجًا بناءً على هذا.

package traffic enum TrafficSignal {RED ('STOP')، GREEN ('GO')، ORANGE ('WAIT') private String action public String getAction () {return this.action} private TrafficSignal (String action) {this.action = الإجراء}} فئة عامة Edureka {public static void main (String args []) {TrafficSignal [] signal = TrafficSignal.values ​​() لـ (TrafficSignal signal: signal) {System.out.println ('name:' + signal.name () + 'إجراء:' + signal.getAction ())}}}

//انتاج:

الاسم: RED الإجراء: STOP
الاسم: العمل الأخضر: GO
الذكره: ORANGE action: WAIT

عد في عبارات if-else-if

الآن ، دعونا ننفذ برنامجًا يعتمد على تعداد في عبارات if-else-if. هنا ، سنجد اتجاه الاجتياز بتمرير قيم الاتجاهات المتاحة في التعداد.

تعداد اتجاهات الحزمة {EAST، WEST، NORTH، SOUTH} فئة عامة Edureka {public static void main (String args []) {الاتجاهات dir = direction.NORTH if (dir == direction.EAST) {System.out.println ( 'Direction: East')} else if (dir == direction.WEST) {System.out.println ('Direction: West')} else if (dir == direction.NORTH) {System.out.println ('Direction : North ')} else {System.out.println (' Direction: South ')}}}

//انتاج:

قلction: الشمال

الطرق المختلفة المستخدمة مع التعداد

القيم(): عند إنشاء تعداد ، فإن ملف مترجم جافا يضيف داخليا ال القيم() طريقة. تقوم هذه الطريقة بإرجاع ملف مجموعة مصفوفة تحتوي على جميع قيم التعداد.

//بناء الجملة:

قيم نوع التعداد العام الثابت [] ()

سنكتشف قيمة الفهرس لعنصر معين في المصفوفة.

قيم الحزمة تعداد اللون {RED، GREEN، BLUE} فئة عامة Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() لـ (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//انتاج:

هي درجة الماجستير بعد التخرج

RED في الفهرس 0
GREEN في الفهرس 1
أزرق في الفهرس 2
شبكة

قيمة ال(): هذهتُستخدم طريقة لإرجاع ثابت العد الذي تساوي قيمته مرت كحجة أثناء استدعاء هذه الطريقة.

//بناء الجملة:

valueOf من نوع التعداد العام الثابت (String str)

هنا ، سنجد تكلفة هاتف معين بناءً على المدخلات التي نمررها إلى السلسلة.

قيم الحزمة من enum Mobile {Samsung (1099) و Apple (1250) و Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} public class Edureka {public static void main (String args []) {System.out.println ('CellPhone List:') لـ (Mobile m: Mobile.values ​​()) {System.out.println (m + 'cost' + m.showPrice () + 'dollar' )} Mobile ret = Mobile.valueOf ('Samsung') System.out.println ('Selected:' + ret)}}

//انتاج:

سامسونج تكلف 1099 دولار
أبل 1250 دولار
جوجل تكلف 1325 دولار
المحدد: سامسونج

ترتيبي(): يضيف مترجم جافا الامتداد ترتيبي() الطريقة داخليًا عند إنشاء ملف تعداد. ترجع الطريقة الترتيبية () فهرس من قيمة التعداد.

//بناء الجملة:

ترتيبي نهائي عام ()

هنا ، سنكتشف قيمة الفهرس لعنصر معين في المصفوفة. وكذلك موضع ثمرة الكرز.

التعداد الترتيبي للفاكهة {Apple، Banana، Cherry، Date، Elderberry} تعداد الخضروات {الجزر والشمندر والفاصوليا والطماطم والبصل} فئة عامة Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. القيم () لـ (Fruits fru: fru) {System.out.println (fr + ':' + fr.ordinal ())} الفواكه f1، f2، f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'come after' + f1)} Vegetables v1 = Vegetables.Beetroot if (f1.equals (v1)) {System.out.println (' غير صحيح') } } }

//انتاج:

أبل: 0
الموز: 1
الكرز: 2
التاريخ: 3
إلدربيري: 4
الكرز يأتي بعد التفاح

مزايا Enum

  • يتم تحسين Enum in Java اكتب السلامة
  • تم تصميم Enum ليكون سهل الاستخدام في تبديل الحالات
  • يمكن أن يكون Enum اجتازت
  • يمكن أن يكون لدى Enum المجالات والأساليب و الصانعين
  • يمكن تنفيذ Enum واجهات
  • لا يمكن لـ Enum تمديد ملف صف دراسي لأنه يمتد داخليا تعداد صف دراسي

استخدام Enum: Rock ، Paper ، Scissors Game

سوف نستخدم تعداد في جافا لإنشاء لعبة طفولتنا ، الصخر (الحجر) الورق والمقص . يشرح الكود التالي كيف.

package Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR، PAPER، STONE} public class SPS {public static void main (String [] args) {Random random = new Random () boolean gameOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = new Scanner (System.in) System.out.println ('n دعونا نبدأ ... n') أثناء (! gameOver) {System.out.printf ('٪ nScissor-Paper-Stonen') منطقي صالح Input do {System.out.print ('n دورك (الرجاء إدخال s للمقص ، p للورق ، t للحجر ، q للخروج): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} else if (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} else if (inChar == 'p') {playerMove = HandSign.PAPER} else if (inChar == 't') {playerMove = HandSign.STONE} else {System.out.println ( 'n الرجاء التحقق من الإدخال وحاول مرة أخرى! n') validInput = false}} بينما (! val idInput) إذا (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('ليس دوري: SCISSORn')} وإلا إذا (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's My: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIt's My: STONEn')} إذا (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor يقطع الورق ، لقد فزت! n ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper يلتف الحجر ، لقد فزت! n ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone كسر المقص ، لقد فزت! n') ++ numComputerWon} else {System.out.println ('n تهانينا. ..! لقد فزت! n ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('٪ n عدد المحاولات: '+ numTrials) System.out.printf (' فزت٪ d (٪. 2f ٪٪) . لقد ربحت٪ d (٪. 2f ٪٪).٪ n '، numComputerWon ، 100.0 * numComputerWon / numTrials ، numPlayerWon ، 100.0 * numPlayerWon / numTrials) System.out.println ('إلى اللقاء !، أتمنى أن تكون قد استمتعت ..!' )}}

//انتاج:

لنبدأ ...
مقص ورق حجر
دورك (الرجاء إدخال s للمقص ، p للورق ، t للحجر ، q لإنهاء):
س
حان دوري: STONE
حجر يكسر المقص ، لقد فزت!
مقص ورق حجر
دورك (الرجاء إدخال s للمقص ، p للورق ، t للحجر ، q لإنهاء):
ماذا
عدد المحاولات: 1 فزت 1 (100.00٪). لقد ربحت 0 (0.00٪).
وداعا !، أتمنى أن تكون قد استمتعت ..!

مع هذا ، وصلنا إلى نهاية هذا البرنامج التعليمي Java Enum. آمل أن تكون قد فهمت Enum في Java وتنفيذه من خلال بعض الأمثلة في الوقت الفعلي.

الآن بعد أن فهمت تعداد الأساسيات من خلال هذا 'برنامج Java Enum التعليمي' تحقق من من Edureka ، شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250.000 متعلم راضٍ منتشرين في جميع أنحاء العالم تم تصميم دورات تدريب وإصدار شهادات Java J2EE و SOA من Edureka للطلاب والمهنيين الذين يرغبون في أن يصبحوا مطوري Java. تم تصميم الدورة التدريبية لمنحك السبق في برمجة Java وتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & ربيع .

لديك سؤال لنا؟ اذكرها في قسم التعليقات في مدونة 'Java Enum Tutorial' وسنعاود الاتصال بك في أقرب وقت ممكن.