JavaRush /בלוג Java /Random-HE /כיתת Java Math ושיטותיה

כיתת Java Math ושיטותיה

פורסם בקבוצה
במאמר זה, אנו נותנים סקירה קצרה של כיתת המתמטיקה בג'אווה. בואו נדבר על השיטות של מחלקה זו וכיצד להשתמש בהן. הכיתה Math שוכנת בחבילת java.lang ומספקת סט של שיטות סטטיות לביצוע מספר חישובים מתמטיים שונים. להלן דוגמאות לחישובים שעבורם כיתה מתמטיקה עשויה להיות שימושית:
  • חישוב ערכים מוחלטים (ערכי מודולו)
  • חישוב ערכי פונקציות טריגונומטריות (סינוס, קוסינוס וכו')
  • גובה בדרגות שונות
  • חילוץ שורשים בדרגות שונות
  • יצירת מספרים אקראיים
  • עיגול
  • וכו.
להלן ננסה להסתכל כיצד שיעור Java Math מסייע בפתרון הבעיות המפורטות לעיל. כיתת Java Math ושיטותיה - 1בואו נתחיל לנתח את המחלקה בשיטות המאפשרות לחשב ערך מודולו. שיטת שרירי הבטן אחראית לכך. שיטה זו עמוסה מדי ולמחלקת Math יש את ההבדלים הבאים:
  • בטן כפולה סטטית (כפול a)
  • סטטי float abs(float a)
  • סטטי int abs(int a)
  • שרירי בטן ארוכים סטטיים (ארוך a)
דוגמה לשימוש:
public static void main(String[] args) {
        System.out.println(Math.abs(-1));      // 1
        System.out.println(Math.abs(-21.8d));  // 21.8
        System.out.println(Math.abs(4532L));   // 4532
        System.out.println(Math.abs(5.341f));  // 5.341
    }

חישוב ערכי פונקציות טריגונומטריות

כיתת המתמטיקה מאפשרת לך לחשב פונקציות טריגונומטריות שונות - סינוסים, קוסינוסים, טנג'ים וכו'. רשימה מלאה של שיטות ניתן למצוא באתר התיעוד הרשמי . להלן רשימה של שיטות אלה:
  • חטא כפול סטטי (כפול א)
  • cos כפול סטטי (כפול a)
  • שיזוף כפול סטטי (כפול א)
  • סטטי כפול אסין (כפול א)
  • סטטי double acos(double a)
  • אטאן כפול סטטי (כפול א)
שיטות חישוב: סינוס, קוסינוס, טנגנס, ארקסינוס, ארקוסינוס, ארקטנגנט. כל שיטה מחשבת ערך לזווית `a`. פרמטר זה מועבר לכל שיטה ובכל מקרה נמדד ברדיאנים (ולא במעלות, כפי שהורגלנו). יש כאן שתי חדשות, טובות ורעות. נתחיל עם הטוב. לכיתה מתמטיקה יש שיטות להמרת רדיאנים למעלות ומעלות לרדיאנים:
  • כפול סטטי למעלות (אנגרד כפול)
  • כפול סטטי toRadians(כפול angdeg)
כאן שיטת toDegrees תמיר את הזווית אנגראד, הנמדדת ברדיאנים, למעלות. שיטת toRadians, להיפך, ממירה את הזווית angdeg, הנמדדת במעלות, לרדיאנים. החדשות הרעות הן שזה קורה עם שגיאה כלשהי. הנה דוגמה לחישוב סינוסים וקוסינוסים:
public static void main(String[] args) {
        System.out.println(Math.sin(Math.toRadians(0)));
        System.out.println(Math.sin(Math.toRadians(30)));
        System.out.println(Math.sin(Math.toRadians(90)));

        System.out.println(Math.cos(Math.toRadians(0)));
        System.out.println(Math.cos(Math.toRadians(30)));
        System.out.println(Math.cos(Math.toRadians(90)));
    }
התוכנית תוציא:

0.0
0.49999999999999994
1.0

1.0
0.8660254037844387
6.123233995736766E-17
מה שלא לגמרי מתאים לטבלאות הסינוסים והקוסינוסים, בין היתר בגלל טעויות בהמרה ממעלות לרדיאנים.

אקספוננציה

כדי להעלות מספר לחזקה, הכיתה Math מספקת שיטת pow, בעלת החתימה הבאה:
static double pow(double a, double b)
שיטה זו מעלה את הפרמטר `a` לחזקת `b`. דוגמאות:
public static void main(String[] args) {
        System.out.println(Math.pow(1,2)); // 1.0
        System.out.println(Math.pow(2,2)); // 4.0
        System.out.println(Math.pow(3,2)); // 9.0
        System.out.println(Math.pow(4,2)); // 16.0
        System.out.println(Math.pow(5,2)); // 25.0

        System.out.println(Math.pow(1,3)); // 1.0
        System.out.println(Math.pow(2,3)); // 8.0
        System.out.println(Math.pow(3,3)); // 27.0
        System.out.println(Math.pow(4,3)); // 64.0
        System.out.println(Math.pow(5,3)); // 125.0
    }

חילוץ שורשים

כיתת המתמטיקה מספקת שיטות לנטילת שורשים מרובעים וקוביות. השיטות הבאות אחראיות להליך זה:
  • סטטי כפול sqrt(double a)
  • סטטי כפול cbrt(כפול a)
שיטת sqrt לוקחת את השורש הריבועי, ושיטת cbrt לוקחת את שורש הקובייה. דוגמאות:
public static void main(String[] args) {
        System.out.println(Math.sqrt(4));   // 2.0
        System.out.println(Math.sqrt(9));   // 3.0
        System.out.println(Math.sqrt(16));  // 4.0

        System.out.println(Math.cbrt(8));   // 2.0
        System.out.println(Math.cbrt(27));  // 3.0
        System.out.println(Math.cbrt(125)); // 5.0
    }

יצירת מספרים אקראיים

כדי ליצור מספרים אקראיים, המחלקה Math מספקת את השיטה האקראית. שיטה זו יוצרת מספר ריאלי חיובי אקראי (כפול) בטווח שבין 0.0 ל-1.0. חתימת השיטה נראית כך:
public static double random()
בואו נסתכל על דוגמאות:
public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println(Math.random());
    }
}
לאחר ביצוע השיטה הראשית, הוצגו במסוף הדברים הבאים:

0.37057465028778513
0.2516253742011597
0.9315649439611121
0.6346725713527239
0.7442959932755443
עם קצת מניפולציה, אתה יכול להשתמש בשיטה האקראית של המחלקה Math כדי להשיג מספרים אקראיים שלמים הנמצאים בטווח מסוים. הנה דוגמה לפונקציה שלוקחת שני ארגומנטים min ומקס ומחזירה מספר שלם אקראי שנמצא בטווח מ-min (כולל) עד ​​מקסימום (כולל):
static int randomInARange(int min, int max) {
    return  (int) (Math.random() * ((max - min) + 1)) + min;
}
בוא נכתוב שיטה ראשית בה נבדוק את שיטת randomInARange:
public class MathExample {


    public static void main(String[] args) {
        // Карта, в которой мы будем хранить количество выпадений Howого-то числа
        Map<Integer, Integer> map = new TreeMap<>();

        // За 10000 операций
        for (int i = 0; i < 10000; i++) {

            // Сгенерируем рандомное число от -10 включительно до 10 включительно
            final Integer randomNumber = randomInARange(-10, 10);


            if (!map.containsKey(randomNumber)) {
                // Если карта еще не содержит "выпавшего случайного числа"
                // Положим его в карту с кол-вом выпадений = 1
                map.put(randomNumber, 1);
            } else {
                // Иначе, увеличим количество выпадений данного числа на 1
                map.put(randomNumber, map.get(randomNumber) + 1);
            }
        }

        // Выведем на экран содержимое карты в формате ключ=[meaning]
        for (Map.Entry<Integer, Integer> entry : map.entrySet()){
            System.out.println(String.format("%d=[%d]", entry.getKey(), entry.getValue()));
        }
    }

    static int randomInARange(int min, int max) {
        return  (int) (Math.random() * ((max - min) + 1)) + min;
    }
}
לאחר הפעלת השיטה הראשית, הפלט עשוי להיראות כך:

-10=[482]
-9=[495]
-8=[472]
-7=[514]
-6=[457]
-5=[465]
-4=[486]
-3=[500]
-2=[490]
-1=[466]
0=[458]
1=[488]
2=[461]
3=[470]
4=[464]
5=[463]
6=[484]
7=[479]
8=[459]
9=[503]
10=[444]

Process finished with exit code 0

עיגול

לעיגול מספרים ב-Java, אחד הכלים הוא השיטות של הכיתה Math. ליתר דיוק, שיטות העגול, התקרה והרצפה:
  • עגול ארוך סטטי (כפול א)
  • סטטי int round(float a)
  • רצפה כפולה סטטית (כפול א)
  • תקרה כפולה סטטית (כפול a)
שיטת העגול - סיבוב כרגיל לאדם הממוצע. אם החלק השברי של המספר גדול או שווה ל-0.5, המספר יעוגל כלפי מעלה, אחרת יעוגל כלפי מטה. שיטת הרצפה תמיד, ללא קשר לערכי החלק השברי, מעגלת את המספר כלפי מטה (לכיוון אינסוף שלילי). שיטת התקרה, להיפך, ללא קשר לערכי החלק השברי, מעגלת מספרים כלפי מעלה (לכיוון אינסוף חיובי). בואו נסתכל על דוגמאות:
public static void main(String[] args) {
    System.out.println(Math.round(1.3)); // 1
    System.out.println(Math.round(1.4)); // 1
    System.out.println(Math.round(1.5)); // 2
    System.out.println(Math.round(1.6)); // 2

    System.out.println(Math.floor(1.3)); // 1.0
    System.out.println(Math.floor(1.4)); // 1.0
    System.out.println(Math.floor(1.5)); // 1.0
    System.out.println(Math.floor(1.6)); // 1.0

    System.out.println(Math.ceil(1.3)); // 2.0
    System.out.println(Math.ceil(1.4)); // 2.0
    System.out.println(Math.ceil(1.5)); // 2.0
    System.out.println(Math.ceil(1.6)); // 2.0
}

סיכום

במאמר זה, הסתכלנו באופן שטחי על כיתת המתמטיקה. בדקנו כיצד באמצעות מחלקה זו תוכל:
  • חשב ערכים מודולו;
  • חשב ערכים של פונקציות טריגונומטריות;
  • להעלות מספרים לכוחות;
  • חלץ שורשי ריבוע וקוביות;
  • צור מספרים אקראיים;
  • מספרים עגולים.
יש עוד הרבה שיטות מעניינות בכיתה זו. אשר ניתן למצוא באתר התיעוד הרשמי . ובכן, עבור ההיכרות הראשונה, השיטות המפורטות לעיל מספיקות למדי.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION