الأعداد في جافا | Java numbers

مفهوم الأعداد في جافا

أعداد: تعني numbers في اللغة الإنجليزية, و نحن عادةً ما نستخدم أنواع البيانات البدائية ( Primitive Data Types ) لتخزين الأعداد.
أي لتعريف متغير بهدف تخزين عدد, نقوم بتعريفه كـ int أو float أو double إلخ..

 

مثال

int    a = 10;
short  b = 50;
float  c = 10.5f;
double d = 37.002;
		

أحياناً يضطر المبرمج أن يستخدم الكائن للنوع و ليس الشكل البدائي للنوع.
من أجل ذلك, جافا تقدم لنا wrapper classes.


ما معنى wrapper classes ؟

كل نوع بيانات بدائي في جافا له كلاس يمثله, و يكون من نفس إسمه, أمثلة:

  • النوع int يمكن تمثيله بالكلاس Integer.

  • النوع float يمكن تمثيله بالكلاس Float.

  • النوع byte يمكن تمثيله بالكلاس Byte.

  • النوع double يمكن تمثيله بالكلاس Double.

  • النوع short يمكن تمثيله بالكلاس Short.

  • النوع long يمكن تمثيله بالكلاس Long.


إذاً الـ wrapper classes هم كل الكلاسات التي تمثل أنواع البيانات البدائية.
هذه الصورة تظهر لك جميع الكلاسات التي تمثل الأعداد.


ما هي فائدة الـ wrapper classes ؟

فكرة الـ wrapper classes جعلنا قادرين على معاملة هذه الأنواع ككائنات و بناء دوال خاصة لهم و لكن المبرمج العادي قد لا يتعامل بتاتاً مع الـ wrapper classes لأنه نادراً ما يحتاج لهم.

مصطلحات هامة

  • عملية تحويل النوع البدائي لكائن من نفس النوع تسمى boxing.

  • عملية إرجاع قيمة الكائن إلى النوع البدائي لهذا الكائن تسمى unboxing.

مثال

Integer a = 10;     // int و ليس Integer هنا ستكون a لأن نوع القيمة التي خزنها المتغير boxing هذه العملية تسمى

int b = a + 15;     // 15 قبل إضافتها على int لأنه سيتم تحويل قيمته للنوع a بالنسبة للمتغير unboxing هذه العملية تسمى
		

شرح الكود

  • Integer a = 10:
        a يمثل كائن نوعه Integer قيمته 10.


  • int b = a + 15:
        هنا سيتم تحويل قيمة الكائن a إلى النوع int ثم إضافة 15 عليها و تخزين الناتج في المتغير b.


دوال الأعداد في جافا التي تستخدم مع كائنات الـ wrapper classes

ذكرنا بعض الدوال التي تستخدم مع الـ wrapper classes في هذا الجدول.

إسم الدالة مع تعريفها
public ... xxxValue() عبارة عن مجموعة دوال تستخدم لتحويل قيمة الكائن ( الذي يمثل عدد ) لقيمة بدائية تحددها الدالة التي تم إستدعاءها من الكائن و ترجعها.
تابع القراءة »
public int compareTo(T o) تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.
ترجع 0 إن كانت قيمتهما متساوية, و ترجع 1 إن كانت قيمة الكائن الذي إستدعاها أكبر, و ترجع 1- إن كانت قيمة الكائن الذي إستدعاها أصغر.
تابع القراءة »
public boolean equals(Object o) تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.
ترجع true إن كانت قيمتهما متساوية, و ترجع false إن لم تكن كذلك.
تابع القراءة »
public static Integer valueOf(String s) تحول قيمة الكائن s التي نمررها لها و التي تمثل عدد في الأساس لقيمة نوعها Integer.
تابع القراءة »
public String toString() ترجع قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما كـ String.
ملاحظة: تحويل القيمة العددية لقيمة نصية مفيد جداً في بعض الحالات و يجعل المبرمج يستفيد من دوال هي في الأصل ليست للتعامل مع الأعداد.
تابع القراءة »
public ... parseXxx(String s) عبارة عن مجموعة دوال تستخدم للحصول على القيمة البدائية لعدد مخزن كـ String.
تابع القراءة »
__________&&&______;&&&___________;&&&



Java الدالة xxxValue()

تعريفها

عبارة عن مجموعة دوال لهم نفس العمل و هو تحويل قيمة العدد المتمثلة بكائن لقيمة بدائية تحددها الدالة التي تم إستدعاءها من الكائن و ترجعها.

 

بناؤها

                  // الدالة الأولى
                  public byte byteValue()

                  // الدالة الثانية
                  public short shortValue()

                  // الدالة الثالثة
                  public int intValue()

                  // الدالة الرابعة
                  public long longValue()

                  // الدالة الخامسة
                  public float floatValue()

                  // الدالة السادسة
                  public double doubleValue() 
                


باراميترات

لا يقبلون أي باراميتر.



قيمة الإرجاع

يرجعون القيم البدائية للكائنات.



مثال

Main.java
                    public class Main {

                    public static void main(String[] args) {

                    Integer a = 10;

                    System.out.println( a.byteValue() );    // byte هنا سيتم تحويل قيمة المتغير للنوع
                    System.out.println( a.shortValue() );   // short هنا سيتم تحويل قيمة المتغير للنوع
                    System.out.println( a.intValue() );     // int هنا سيتم تحويل قيمة المتغير للنوع
                    System.out.println( a.longValue() );    // long هنا سيتم تحويل قيمة المتغير للنوع
                    System.out.println( a.floatValue() );   // float هنا سيتم تحويل قيمة المتغير للنوع
                    System.out.println( a.doubleValue() );  // double هنا سيتم تحويل قيمة المتغير للنوع

                    }

                    }
                  

سنحصل على النتيجة التالية عند التشغيل.

                    10
                    10
                    10
                    10
                    10.0
                    10.0
                  
__________&&&______;&&&___________;&&&&________;

Java الدالة compareTo()

تعريفها

تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.
يمكن إستخدام هذه الدالة لمقارنة أي نوع من أنواع البيانات المرجعية (Object Data Types) التي تمثل أعداد مثل: Integer - Float - Double إلخ..

 

ملاحظة: الكائن الذي يستدعيها و الكائن الذي نمرره لها يجب أن يكونا من نفس النوع.



بناؤها

                  public int compareTo(T o)
                


باراميترات

نضع لها كائن يمثل عدد كباراميتر.



قيمة الإرجاع

  • ترجع 0 إذا كانت قيمة الكائن الذي قام باستدعائها تساوي قيمة الكائن الذي نمرره لها مكان الباراميتر o.

  • ترجع 1 إذا كانت قيمة الكائن الذي قام باستدعائها أكبر من قيمة الكائن الذي نمرره لها مكان الباراميتر o.

  • ترجع 1- إذا كانت قيمة الكائن الذي قام باستدعائها أصغر من قيمة الكائن الذي نمرره لها مكان الباراميتر o.



مثال

Main.java
                    public class Main {

                    public static void main(String[] args) {

                    Integer a = 10;
                    Integer b = 20;
                    Integer c = 5;
                    Integer d = 10;

                    System.out.println( a.compareTo(b) );    // b أصغر من a هنا سترجع 1- لأن
                    System.out.println( a.compareTo(c) );    // c أكبر من a هنا سترجع 1 لأن
                    System.out.println( a.compareTo(d) );    // d تساوي من a هنا سترجع 0 لأن

                    }

                    }
                  

سنحصل على النتيجة التالية عند التشغيل.

                    -1
                    1
                    0
                  
__________&&&______;&&&___________;&&&&________;

Java الدالة equals()

تعريفها

تقارن قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما مع قيمة الكائن التي نمررها لها مكان الباراميتر o.
يمكن إستخدام هذه الدالة لمقارنة أي نوع من أنواع البيانات المرجعية (Object Data Types) التي تمثل أعداد مثل: Integer - Float - Double إلخ..

 

ملاحظة: الكائن الذي يستدعيها و الكائن الذي نمرره لها يجب أن يكونا من نفس النوع.



بناؤها

                  public boolean equals(Object o)
                


باراميترات

نضع لها كائن من نفس النوع كباراميتر.



قيمة الإرجاع

  • ترجع true إذا كانت قيمة الكائن الذي قام باستدعائها تساوي قيمة الكائن التي نمررها لها مكان الباراميتر o.

  • ترجع false إذا كانت قيمة الكائن الذي قام باستدعائها لا تساوي قيمة الكائن التي نمررها لها مكان الباراميتر o.



مثال

Main.java
                    public class Main {

                    public static void main(String[] args) {

                    Integer a = 10;
                    Integer b = 10;
                    Integer c = 50;

                    System.out.println( a.equals(b) );    // b تساوي قيمة a لأن قيمة true هنا سترجع
                    System.out.println( a.equals(c) );    // c لا تساوي قيمة a لأن قيمة false هنا سترجع

                    }

                    }
                  

سنحصل على النتيجة التالية عند التشغيل.

                    true
                    false
                  
__________&&&______;&&&___________;&&&&________;

Java الدالة Integer valueOf()

تعريفها

تحول القيمة التي نمررها لها عند إستدعائها كقيمة نوعها Integer و ترجعها.
القيمة التي نمررها لها يمكن أن يكون نوعها int أو String.

 

بناؤها

هناك ثلاث أشكال من هذه الدالة. أي يمكن إستدعاءها بثلاث طرق مختلفة.

                  // الشكل الأول
                  public static Integer valueOf(int i)

                  // الشكل الثاني
                  public static Integer valueOf(String s)

                  // الشكل الثالث
                  public static Integer valueOf(String s, int radix)
                


باراميترات

  • الباراميتر i نوعه int و يمثل العدد الذي سيتم إرجاعه ككائن من الكلاس Integer.

  • الباراميتر s نوعه String و يمثل العدد ( كنص ) الذي سيتم إرجاعه ككائن من الكلاس Integer.

  • الباراميتر radix نوعه int و هو عدد عادي يستخدم لتحديد طريقة تحويل قيمة الباراميتر s لكائن من الكلاس Integer.
    ملاحظة: عند إضافة radix فإن قيمة الباراميتر s التي نمررها تمثل عدد binary أو octal أو decimal أو hexadecimal.
    الـradix يمكن أن يكون 2 أو 8 أو 10 أو 16 بالترتيب كما فوق.



قيمة الإرجاع

  • valueOf(int i): ترجع قيمة العدد التي نمررها مكان المتغير i ككائن نوعه Integer.

  • valueOf(String s): ترجع قيمة العدد التي نمررها كنص مكان الكائن s ككائن نوعه Integer.

  • valueOf(String s, int radix): ترجع قيمة العدد التي نمررها كنص مكان الكائن s ككائن نوعه Integer على حسب قيمة المتغير radix.



مثال

Main.java
                    public class Main {

                    public static void main(String[] args) {

                    // a و خزنها في الكائن Integer لقيمة نوعها int هنا قمنا بتحويل القيمة 14 التي تعتبر من النوع
                    Integer a = Integer.valueOf(14);

                    // b و خزنها في الكائن Integer لقيمة نوعها String هنا قمنا بتحويل القيمة 80 التي تعتبر من النوع
                    Integer b = Integer.valueOf("80");

                    // b و خزنها في الكائن Integer لقيمة نوعها Hexadecimal و تمثل عدد مكتوب بالوحدة String هنا قمنا بتحويل القيمة 80 التي تعتبر من النوع
                    Integer c = Integer.valueOf("80", 16);

                    // c و b و a هنا قمنا بطابعة القيم التي تم تخزينها في الكائنات
                    System.out.println( a );
                    System.out.println( b );
                    System.out.println( c );

                    }

                    }
                  

سنحصل على النتيجة التالية عند التشغيل.

                    14
                    80
                    128
                  
__________&&&______;&&&___________;&&&&________;

Java الدالة toString()

تعريفها

ترجع قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما كـ String.
أي تجعلك قادر على معاملة الكائن (الذي يمثل عدد) كنص و هذا الشيء مهم جداً و سترى فائدته في الأمثلة.

  

بناؤها

                  public String toString()
                


باراميترات

لا تقبل أي باراميتر.



قيمة الإرجاع

ترجع قيمة الكائن الذي قام باستدعائها و الذي يمثل عدد ما كـ String.



المثال الأول

Main.java
                    public class Main {

                    public static void main(String[] args) {

                    Integer a = 1000;

                    // ثم قمنا بعرضها String لقيمة نوعها a هنا قمنا بتحويل قيمة الكائن
                    System.out.println( a.toString() );

                    }

                    }
                  

سنحصل على النتيجة التالية عند التشغيل.

                    1000
                  


الآن, بما أن القيمة التي ترجعها الدالة toString() عبارة عن قيمة نصية String نستطيع إستخدام جميع الدوال الخاصة بالـString على هذا القيمة.
في المثال التالي سنستخدم الدالة length() على النص الذي سترجعه الدالة toString() لمعرفة عدد الأحرف التي يتألف منها هذا الـ String.

المثال الثاني

Main.java
                    public class Main {

                    public static void main(String[] args) {

                    Integer a = 1000;

                    // من هذا الكائن الجديد و طبعنا ما أرجعتهlength() ثم قمنا باستدعاء الدالة String لقيمة نوعها a هنا قمنا بتحويل قيمة الكائن
                    // سترجع عدد أحرف هذا النص length() سترجع نص و الدالة toString() إذاً الدالة
                    System.out.println( a.toString().length() );

                    }

                    }
                  

سنحصل على النتيجة التالية عند التشغيل.

                    4
                  

إذاً إستطعنا معرفة حجم هذا العدد بكل سهولة بواسطة الدالة toString() التي سمحت بمعاملة العدد كنص.

__________&&&______;&&&___________;&&&&________;

Java الدالة parseXxx()

تعريفها

عبارة عن مجموعة دوال تستخدم للحصول على القيمة البدائية لعدد مخزن كـ String.

نوعها static تأخذ argument واحد أو اثنين.

 

بناؤها

ذكرنها هنا بعض الدوال مع الإشارة إلى أنه يوجد دوال أخرى لتحويل الأعداد المخزنة كـ String لنوع بدائي.

                  public static int parseInt(String s)
                  public static int parseInt(String s, int radix)

                  public static long parseLong(String s)
                  public static long parseLong(String s, int radix)

                  public static float parseFloat(String s)
                  public static float parseFloat(String s, int radix)

                  public static double parseDouble(String s)
                  public static double parseDouble(String s, int radix) 
                


باراميترات

  • في كل الدوال نلاحظ أنه يوجد باراميتر إسمه s نوعه String. قيمة هذا الباراميتر يجب أن تكون موافقة للنوع الذي سترجعه الدالة كالتالي:

    • في الدالة parseInt() يجب أن تكون قيمة الباراميتر s تمثل عدد نوعه int, أي عدد صحيح.

    • في الدالة parseLong() يجب أن تكون قيمة الباراميتر s تمثل عدد نوعه long, أي عدد صحيح.

    • في الدالة parseDouble() يجب أن تكون قيمة الباراميتر s تمثل عدد نوعه float, أي عدد عشري.

    • في الدالة parseDouble() يجب أن تكون قيمة الباراميتر s تمثل عدد نوعه double, أي عدد عشري.


  • في بعض الدوال نلاحظ أنه يوجد باراميتر إسمه radix نوعه int.
    الـ radix عبارة عن عدد عادي يستخدم لتحديد طريقة تحويل قيمة الباراميتر s لقيمة بدائية.
    ملاحظة: عند إضافة radix فإن قيمة الباراميتر s التي نمررها تمثل عدد binary أو octal أو decimal أو hexadecimal.
    الـradix يمكن أن يكون 2 أو 8 أو 10 أو 16 بالترتيب كما فوق.



قيمة الإرجاع

  • parseInt(String s): ترجع النص S كعدد صحيح نوعه int, أي عدد لا يحتوي على فاصلة عشرية.

  • parseInt(String s, int radix): ترجع النص S كعدد صحيح نوعه int, أي عدد لا يحتوي على فاصلة عشرية.

  • parseLong(String s): ترجع النص S كعدد صحيح نوعه long, أي عدد لا يحتوي على فاصلة عشرية.

  • parseLong(String s, int radix): ترجع النص S كعدد صحيح نوعه long, أي عدد لا يحتوي على فاصلة عشرية.

  • parseFloat(String s): ترجع النص S كعدد عشري نوعه float, أي عدد يحتوي على فاصلة عشرية.

  • parseFloat(String s, int radix): ترجع النص S كعدد عشري نوعه int, أي عدد يحتوي على فاصلة عشرية.

  • parseDouble(String s): ترجع النص S كعدد عشري نوعه double, أي عدد يحتوي على فاصلة عشرية.

  • parseDouble(String s, int radix): ترجع النص S كعدد عشري نوعه int, أي عدد يحتوي على فاصلة عشرية.



مثال

Main.java
                    public class Main {

                    public static void main(String[] args) {

                    System.out.println( Integer.parseInt("20") );
                    System.out.println( Integer.parseInt("20", 8) );

                    }

                    }
                  

سنحصل على النتيجة التالية عند التشغيل.

                    20
                    16
                  
__________&&&______;&&&___________;&&&&________; __________&&&______;&&&___________;&&&&________;