[Java] الطرق المختلفة لفحص النصوص و الارقام و التاكد من انها قيم متناظرة أم لا Palindrome In Java

اذهب الى الأسفل

[Java] الطرق المختلفة لفحص النصوص و الارقام و التاكد من انها قيم متناظرة أم لا Palindrome  In Java Empty [Java] الطرق المختلفة لفحص النصوص و الارقام و التاكد من انها قيم متناظرة أم لا Palindrome In Java

مُساهمة من طرف أحمد مناع في السبت فبراير 16, 2019 7:49 pm

اهلا بكم 

تحقق ما إذا كان النص أو الرقم المعطى متناظر أم لا؟ ...من أكثر الاسئلة التى تواجه الطلبة الاكاديميين وهناك عدة طرق لفعل ذلك ...فى هذا المقال سنحاول شرحها 

ما هو التناظر ؟

الارقام أو الكلمات او حتى الجمل المتناظرة هى التى يمكنك قرائتها من اليمن أو من الشمال و تعطيك نفس النتيجة بمعنى أخر هو نفس الرقم او الكملة بشكل عسكي  على سبيل المثال 545 ، 151 ، 34543 ، 343 ، 171 ، 48984 هي أرقام متناظرة ....ليبيا , Radar, Madam كلمات متناظرة ...ومن الجمل المتناظرة Was it a car or a cat I saw 

كيف يمكن كتابة برنامج JAVA لفحص النص او الرقم المعطى متناظر أم لا ؟

توجد عدة طرق لفعل ذلك على النحو التالى :

1_باستخدام التحقق من طول المدخلات 

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

الكود:


public class Test1 {

    static boolean isItPalindrome(String S)
    {
        
       //اذا كان النص اقل من حرفين فمعنى ذلك انه متناظر ويتم ارجاع ذلك
       if(S.length() < 2)
        {
            return true;
        }
        else
        {
            //التحقق من مساواة طرفى النص
            
            if(S.charAt(0) != S.charAt(S.length()-1))
            {
                //اذا كان الطرفين غير متساويات يتم ارجاع خاطئ
                
                return false;
            }
            else
            {
                //اذا كان الطرفين متساويين يتم ارجاع الطريقة يتم حذف الطرفين ثم العودة لفحص الطرفين الجديدن
                
                return isItPalindrome(S.substring(1, S.length()-1));
            }
        }
        
    }
  
    public static void main(String[] args) {
      
       String S ="Rotator";
       //قبل التاكد من النص نقوم بحذف اى فارغ قد يوجد ونفى حالة الاحرف حتى نتمكن من مقارنة النص سواء كان باحرف كبيرة او صغيرة
       String cleanInputString = S.replaceAll("\\s+", "").toLowerCase();
        
        if (isItPalindrome(cleanInputString))
        {
            System.out.println(" is a palindrome");
        }
        else
        {
            System.out.println(" is not a palindrome");
        }
      
    }
    
}


2_باستخدام الطريقة StringBuffer

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

الكود:


public class Test1 {

  
    public static void main(String[] args) {
      
       String S ="Rotator";
      
       // استخدام الطريقة لعكس النص المدخل
       String S2  = new StringBuffer(S).reverse().toString();
        
        
      
       //مقارنة النص الاصلى مع النص المعكوس للتاكد المساواة بينهم من عدمة
        if (S.equalsIgnoreCase(S2))
        {
            System.out.println(" is a palindrome");
        }
        else
        {
            System.out.println(" is not a palindrome");
        }
      
    }
    
}


3_ استخدام الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

منذ الاصدار 8 للجافا يمكنك استخدام الدالة أو الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] للتحقق مما إذا كانت السلسلة المعطاة متناظرة أم لا وذلك على النحو التالى :

الكود:

import java.util.stream.IntStream;


public class Test1 {

  
    public static void main(String[] args) {
      
       String S ="Rotator";
      
        boolean isItPalindrome = IntStream.range(0, S.length()/2).
                noneMatch(i -> S.charAt(i) != S.charAt(S.length() - i -1));
        
        if (isItPalindrome)
        {
            System.out.println(" is a palindrome");
        }
        else
        {
            System.out.println(" is not a palindrome");
        }    }
    
}

4_ الطريقة الاخيرة و التى تسخدم فى الارقام فقط

الكود:

public class Test1 {

  
    public static void main(String[] args) {
      
       int n = 171;
       int sum = 0, r;
    int temp = n;    
       while(n>0)
      {    
        r = n % 10;  
        sum = (sum*10)+r;    
        n = n/10;    
       }    
      if(temp==sum)    
        System.out.println("It is a Palindrome number.");    
      else    
        System.out.println("Not a palindrome");
    
    }
    
}

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 994
النقاط : 201783
التقيم : 119
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى