* java.lang.Math
Публикувано на 07 октомври 2009 в раздел ПИК3 Java.
Нека разгледаме още един клас с доста статични методи, който се използва сравнително често. Това е класът Math - с него можем да достъпваме голямо количество математически функции. Ето по-голямата част от тях:
- Абсолютна стойност на число: метод abs връщащ double и приемаш за входен параметър всякакъв тип число:
int i = 7; int j = -2; double x = -12.4; double y = 6; System.out.println("i = "+i+", |" + i + "| = " + Math.abs(i)); System.out.println("j = "+j+", |" + j + "| = " + Math.abs(j)); System.out.println("x = "+x+", |" + x + "| = " + Math.abs(x)); System.out.println("y = "+y+", |" + y + "| = " + Math.abs(y));
- Минимум и максимум - методи min и max, приемащи всякакъв тип двойки числа за входни параметри и връщащ по-малкото/по-голямото от тях:
int i = 7; int j = -2; double x = -12.4; double y = 6.9; System.out.println("min(" + i + "," + j + ") = " + Math.min(i,j)); System.out.println("max(" + i + "," + j + ") = " + Math.max(i,j)); System.out.println("min(" + x + "," + y + ") = " + Math.min(x,y)); System.out.println("max(" + x + "," + y + ") = " + Math.max(x,y));
Възможно е обаче и да "смесваме" типовете данни и да сравняваме цели числа с числа с плаваща запетая (резултатът е число с плаваща запетая):
System.out.println("min(" + i + "," + x + ") = " + Math.min(i,x)); System.out.println("max(" + i + "," + x + ") = " + Math.max(i,x)); System.out.println("min(" + y + "," + j + ") = " + Math.min(y,j)); System.out.println("max(" + j + "," + y + ") = " + Math.max(j,y));
- Долна граница - метод floor, работещ с числа от тип double:
double x = -12.6; double y = 6.9; System.out.println("Floor("+x+") = "+Math.floor(x)); // -13 System.out.println("Floor("+y+") = "+Math.floor(y)); // 6
- Горна граница - метод ceil, работещ с числа от тип double:
double x = -12.6; double y = 6.9; System.out.println("Ceil("+x+") = "+Math.ceil(x)); // -12 System.out.println("Ceil("+y+") = "+Math.ceil(y)); // 7
- Закръгляване - метод round, работещ с числа от тип double за входни параметри, но връщащ като резултат число от тип long:
double x = -12.6; double y = 6.9; System.out.println("Round(x) = " + Math.round(x)); // -13 System.out.println("Round(y) = " + Math.round(y)); // 7
Всъщност Math.round(x) е еквивалентно на Math.floor(x+0.5d).
- Тригонометрични функции (параметрите се дават в радиани като числа от тип double и връщат резултат също число от тип double):
System.out.println(Math.sin(Math.PI/4)); System.out.println(Math.cos(Math.PI/4)); System.out.println(Math.tan(Math.PI/4));
- Обратни тригонометрични функции (отново работят с числа от тип double):
System.out.println(Math.asin(0.7d)); System.out.println(Math.acos(0.7d)); System.out.println(Math.atan(0.7d));
- Превръщане на радиани в градуси (работи с числа от тип double):
System.out.println(Math.toDegrees(Math.PI));
- Превръщане на градуси в радиани (работи с числа от тип double):
System.out.println(Math.toRadians(180.0));
- Повдигане на степен (връща числа от тип double, а приема всякакви):
System.out.println(Math.pow(2,6));
- Натурален логаритъм (работи с числа от тип double):
System.out.println(Math.log(Math.E));
- Експоненциална функция (работи с числа от тип double):
System.out.println(Math.exp(2));
- Корен квадратен (работи с числа от тип double):
System.out.println(Math.sqrt(8));
- Произволно число от тип double с плаваща запетая в интервала [0, 1):
System.out.println(Math.random());
Eто как можем да го превърнем в цяло число в интервала [A,A+B]:
int A=5; int B=7; System.out.println((int)(Math.round(Math.random()*B)) + A);
Пример: статичен метод, който генерира произволни пароли от малки букви, големи букви и цифри:
public static void main(String[] args){ StringBuffer strb = genpass(8); System.out.println(strb.toString()); } public static StringBuffer genpass(int len){ StringBuffer strb = new StringBuffer(len); int c = 0; for (int i=0; i<len; i++){ int r = (int)Math.round(Math.random()*2); switch(r){ case 0: c = (int)'0' + (int)(Math.floor(Math.random()*10)); break; case 1: c = (int)'a' + (int)(Math.floor(Math.random()*26)); break; case 2: c = (int)'A' + (int)(Math.floor(Math.random()*26)); break; } strb.append((char)c); } return strb; }
Задача: Вероятността да се падне цифра е 1/3. Вероятността да се падне цифрата 1 е (1/3)*(1/10). Ще забележите, че това е доста по-голяма вероятност, отколкото да се падне буквата 'a' например - (1/3)*(1/26). Преправете програмата така, че цифрите и буквите да имат равни вероятности.
Добави коментар