برنامج رقم Palindrome في Java استخدام while & for Loop
⚡ ملخص ذكي
برنامج رقم Palindrome في Java تُحدد هذه الخوارزمية ما إذا كانت القيمة تُقرأ بشكل صحيح من اليمين إلى اليسار ومن اليسار إلى اليمين عن طريق عكس أرقامها. يُقدم هذا المقال الخوارزمية، ونسخة منها باستخدام حلقة while، ونسخة أخرى باستخدام حلقة for، وطريقة تعتمد على السلاسل النصية، بالإضافة إلى الاستدعاء الذاتي، والحالات الحدية، وتحليل التعقيد مع مخرجات مُثبتة.

ما هو العدد المتناظر؟
A رقم متناظر العدد المتناظر هو عدد يبقى كما هو عند عكس ترتيب حروفه. على سبيل المثال، العدد 131. فعند عكس ترتيب أرقامه، يبقى كما هو. يتميز العدد المتناظر بتناظر انعكاسي حول المحور الرأسي. وينطبق المبدأ نفسه على الكلمة التي تبقى بنفس التهجئة عند عكس ترتيب حروفها.
أمثلة على الأعداد المتناظرة في Java
121, 393, 34043, 111, 555, 48084
أمثلة على الكلمات المتناظرة
LOL, MADAM
كل قيمة رقمية من 0 إلى 9 هي قيمة متناظرة بحكم التعريف، لأن عكس رقم واحد ينتج نفس الرقم.
خوارزمية الرقم المتناظر
فيما يلي منطق خوارزمية الأرقام المتناظرة Java:
- قم بإحضار رقم الإدخال الذي يحتاج إلى التحقق من كونه a الفرعية العكسية.
- انسخ الرقم إلى متغير مؤقت واعكسه.
- قارن بين الرقم المعكوس والرقم الأصلي.
- إذا كانا متطابقين، فإن الرقم هو "رقم متناظر".
- وإلا فإن الرقم ليس "رقمًا متناظرًا".
عملية الانعكاس نفسها هي الجزء الوحيد الذي يحتاج إلى عناية. عمليتان حسابيتان تقومان بكل العمل، والجدول أدناه traces them for the value 171.
| تجاوز | أ (العدد المتبقي) | آخرDigit = a % 10 | المجموع = (المجموع * 10) + الأخيرDigit | أ = أ / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
بعد المرور الأخير، يكون المجموع 171، وهو ما يساوي المدخلات الأصلية، لذلك تم تأكيد أن الرقم هو عدد متناظر.
كيفية التحقق مما إذا كان رقم الإدخال هو Palindrome أم لا
فيما يلي برنامج للكلمات المتناظرة Java باستخدام حلقة WHILE. تستمر الحلقة طالما بقيت الأرقام، وتُظهر عبارات الطباعة حالة كل متغير خلال كل دورة.
package com.guru99; public class PalindromeNum { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 171; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number while(a > 0) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; a = a / 10; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code الإخراج:
Input Number 171 Last Digit 1 Digit 1 was added to sum 0 Input Number 17 Last Digit 7 Digit 7 was added to sum 10 Input Number 1 Last Digit 1 Digit 1 was added to sum 170 Number is palindrome
برنامج للتحقق من Palindrome باستخدام حلقة
وفيما يلي Java برنامج لقراءة وقراءة الكلمات المتناظرة باستخدام حلقة تكرارية (for loop). يحتوي رأس البرنامج على اختبار الخروج وعملية القسمة، لذا يجب ألا يقوم جسم الحلقة بالقسمة مرة أخرى.
package com.guru99; public class PalindromeNumForLoop { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 185; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number for( ; a != 0; a /= 10 ) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code الإخراج:
Input Number 185 Last Digit 5 Digit 5 was added to sum 0 Input Number 18 Last Digit 8 Digit 8 was added to sum 50 Input Number 1 Last Digit 1 Digit 1 was added to sum 580 Number is not palindrome
⚠️ تحذير: من الأخطاء الشائعة الاحتفاظ بـ a = a / 10; داخل جسم حلقة for بينما يحتوي الرأس بالفعل a /= 10ثم يتم تقسيم الرقم مرتين في كل تمريرة، ويتم تخطي نصف الأرقام، ويتم الإبلاغ عن العدد المتناظر الحقيقي مثل 121 بشكل غير صحيح على أنه ليس عددًا متناظرًا.
برنامج Palindrome في Java استخدام السلاسل النصية Reverse
يُمكّن تحويل القيمة إلى نصّ StringBuilder من عكسها في استدعاء واحد. وتعمل الطريقة نفسها مع الكلمات، التي لا تستطيع الطريقة الرقمية التعامل معها.
package com.guru99; public class PalindromeString { public static boolean isPalindrome(String text) { // ignore case so MADAM and madam behave identically String clean = text.toLowerCase(); String reversed = new StringBuilder(clean).reverse().toString(); return clean.equals(reversed); } public static void main(String[] args) { System.out.println(isPalindrome("121")); System.out.println(isPalindrome("MADAM")); System.out.println(isPalindrome("Java")); } }
Code الإخراج:
true true false
برنامج Palindrome في Java استخدام التكرار
تقارن الدالة التكرارية الزوج الخارجي من الأحرف ثم تستدعي نفسها على الجزء الأوسط المتقلص. تتوقف الدالة عندما يتبقى أقل من حرفين.
package com.guru99; public class PalindromeRecursion { public static boolean isPalindrome(String text, int left, int right) { // base case: pointers met or crossed if (left >= right) { return true; } if (text.charAt(left) != text.charAt(right)) { return false; } return isPalindrome(text, left + 1, right - 1); } public static void main(String[] args) { String value = "34043"; System.out.println(value + " is palindrome: " + isPalindrome(value, 0, value.length() - 1)); String other = "12345"; System.out.println(other + " is palindrome: " + isPalindrome(other, 0, other.length() - 1)); } }
Code الإخراج:
34043 is palindrome: true 12345 is palindrome: false
الحالات الحدية ومقارنة الأساليب
ثلاثة مدخلات تُعطل التطبيقات البسيطة، لذا يجب اختبار كل إصدار مقابلها قبل الاستخدام.
- الأرقام السالبة: لا تُعتبر قيم مثل -121 متناظرة أبدًا، لأن علامة الطرح ليس لها مقابل في النهاية. استخدم الحماية مع
if (inputNumber < 0) return false;. - الأصفار اللاحقة: القيمة 100 تنعكس إلى 1، لذا فإن المقارنة تُرجع خطأً بشكل صحيح. الرقم 0 وحده هو الذي يمر بين القيم التي تنتهي بصفر.
- تجاوز سعة العدد الصحيح: Revقد يؤدي إدخال قيمة عددية كبيرة مثل 1,999,999,999 إلى تجاوز نطاق الأعداد الصحيحة. لذا، يُنصح بتعريف المتغير sum كعدد صحيح طويل (long) عندما تقترب القيمة المدخلة من الحد الأقصى.
يقارن الجدول أدناه بين الأساليب الأربعة الموضحة في هذه الصفحة.
| الأسلوب | تعقيد الوقت | تعقيد الفضاء | أعمال للكلمات | ملاحظة |
|---|---|---|---|---|
| حائط اللوب | O (تسجيل ن) | يا (1) | لا | أوضح مثال على عكس الأرقام |
| لحلقة | O (تسجيل ن) | يا (1) | لا | منطق متطابق، تقسيم في العنوان فقط |
| عكس StringBuilder | O (ن) | O (ن) | نعم | أقصر كود، يُخصص سلسلة نصية جديدة |
| العودية | O (ن) | مكدس O(n) | نعم | مفيد لمناقشات المقابلات حول التكرار |
الرقم extracيتكرر نمط tion المستخدم هنا في العديد من التمارين. تابع مع متسلسلة فيبوناتشي Javaأطلقت حملة Java برنامج للتحقق من الأعداد الأولية، و Bubblه خوارزمية الفرز في Javaأما بالنسبة لصيغة الحلقة نفسها، فراجع لكل حلقة في Java وعلى نطاق أوسع Java البرنامج التعليمي، ونرى Java سلاسل بالنسبة للطريقة القائمة على النصوص.
