methodichkaA5
.pdfbyte short int long
float double
Рисунок 2 – Преобразование типов данных
Если хотя бы один из операндов имеет тип double, то второй тоже преобразовывается в число типа double. В противном случае, если хотя бы один из операндов имеет тип float. то второй тоже преобразовывается в число типа float. В противном случае, если хотя бы один из операндов имеет тип long,
то второй тоже преобразовывается в число типа long. В противном случае оба операнда преобразовываются в числа типа int.
1.6.Приведение числовых типов
Впредыдущем пункте было показано, что при необходимости значения типа int автоматически преобразовываются в значения типа double. С другой стороны, есть несколько очевидных ситуаций, когда число типа double
рассматривается как целое. Преобразования чисел в языке Java возможны,
однако, разумеется, при этом может происходить потеря информации. Такие преобразования называются приведением типа. Синтаксически приведение типа задается парой скобок, внутри которых указывается желательный тип, а
затем - имя переменной. Например,
double х = 9.997;
int nx = (int)x;
Теперь в результате приведения значения с плавающей точкой к целому типу переменная nx равна 9, поскольку при этом дробная часть числа отбрасывается.
Если нужно округлить число с плавающей точкой до ближайшего целого числа (что во многих случаях является намного более полезным),
используется метод Math.round.
double x = 9.997;
int nx = (int)Math.round(x) ;
11
Теперь переменная nx равна 10. При вызове метода round по-прежнему нужно выполнять приведение (int), поскольку возвращаемое им значение имеет тип long, и присвоить его переменной типа int можно лишь с помощью явного приведения.
При попытке привести число одного типа к другому результат может выйти за пределы допустимого диапазона. В этом случае результат будет усечен. Например, выражение (byte) 300 равно 44. Поэтому, рекомендуется явно проверять заранее, будет ли результат лежать в допустимом диапазоне после приведения типов.
1.7. Математические операции и вычисления
Язык программирования java предлагает программистам для использования мощный пакет математических функций. Функции хранятся в классе java.lang.Math. Следовательно, нужно подключить к программе пакет java.lang. Добавляем следующую строчку к началу программы: import java.lang.*;
Пример.
Требуется вычислить модуль числа (-5).
package prg1; import java.lang.*; public class FirstProg{
public static void main(String [] args){ System.out.println(Math.abs(-5));
}
}
Результат.
5
В программе выполняется обращение к классу математических функций java.lang. Math и, в частности к функции Math.abs, которая вычисляет абсолютное значение числа (-5). Для выполнения других математических операций можно использовать функции, представленные в таблице 6 (На самом деле в таблице представлен не весь список функций, предлагаемый java. За полным перечнем необходимо обратиться к официальной документации).
Таблица 6 – Математические операции
12
|
Тип |
|
|
|
|
|
|
возвращаемого |
Название функции и ее описание |
||||
|
значения |
|
|
|
|
|
|
|
|
|
|
|
|
|
double |
abs(double a) |
Возвращает модуль числа а |
|||
|
double |
ceil(double a) |
Вычисляет потолок числа. |
|||
|
|
Наименьшее целое число, которое больше заданного.. |
||||
|
|
|
|
|
|
|
|
double |
cos(double a) |
Вычисляет косинус. |
|||
|
double |
exp(double a) |
Возводит число е в степень числа а. |
|||
|
double |
floor(double a) |
Возвращает пол числа. Т.е. |
|||
|
|
наибольшее целое число, которое меньше заданного |
||||
|
|
|
|
|
|
|
|
double |
log(double a) |
Вычисляет натуральный логарифм по |
|||
|
|
основанию а |
|
|
|
|
|
|
|
|
|
|
|
|
double |
max(double a, double b) |
|
Выдает большее из |
||
|
|
заданных чисел. |
|
|
||
|
|
|
|
|
|
|
|
double |
min(double a, double b) |
|
Выдает меньшее из |
||
|
|
заданных чисел. |
|
|
||
|
|
|
|
|
|
|
|
double |
random() |
Возвращает случайное число с |
|||
|
|
положительным знаком, которое больше 0.0 и |
||||
|
|
меньше 1.0 |
|
|
|
|
|
|
|
|
|
|
|
|
double |
round(double a) |
Выполняет математическое |
|||
|
|
округление числа |
|
|
||
|
|
|
|
|
|
|
|
double |
sin(double a) |
Вычисляет синус |
|||
|
double |
sqrt(double a) |
Вычисляет положительный |
|||
|
|
квадратный корень |
|
|
||
|
|
|
|
|
|
|
|
double |
tan(double a) |
Вычисляет тангенс. |
|||
Пример. |
|
|
|
|
|
|
Программа вычисляет значение функции |
|
x y |
2x2 3x 7, при условии, |
|||
|
|
|
x y |
что x 2, |
y 4. |
package prg1; import java.lang.*;
public class MathProg{
public static void main(String [] args){ double x=2;
double y=4; double z;
13
z=(x+y)/(x-y)+2*Math.pow(x,2)*+3*x+7;
System.out.println(z);
}
}
Результат.
52.0
Пример.
|
1 |
|
2b |
|
|
|
|
||
Программа вычисляет значение функции |
e |
|
ab , при a 4 , |
b 1. |
|||||
|
a |
|
|||||||
|
|
|
|
|
|
|
|
public static void main(String [] args){
double z;
double a=4, b=1;
z=Math.abs(1/a)+Math.exp(2*b)+Math.sqrt(a*b);
System.out.println(z);
}
Результат.
9.63905609893065
Пример.
Программа вычисляет значение функции e a2 b2 , при a 4 , b 3 .
public static void main(String [] args){
double a=4, b=3;
System.out.println(Math.exp(Math.sqrt(Math.pow(a,2)+Math.pow(b,2))));
}
Результат.
148.4131591025766
2.Логические ветвления программ
2.1.Блоки операторов
Блок операторов - группа операторов, заключенных в фигурные скобки
{}. Также, есть возможность создавать блок, вложенный в другой блок и т.п.
Блок ограничивает диапазон действия переменных. Переменная, объявленная внутри блока, используется только в его пределах, за пределами блока ее использовать нельзя.
Пример.
Пример демонстрирует использование блоков операторов.
public static void main(String [] args){
14
int x = 10;
{// начало блока
int y = 50;
System.out.println("inside the block:");
System.out.println("x:" + x);
System.out.println("y:" + y);
}// конец блока
}
Если необходимо использовать переменную в блоке и за его пределами,
то следует объявить переменную перед блоком.
В примере показано, что переменная y может быть использована только внутри блока, а переменнаях – в любом месте метода main.
2.2. Оператор ветвления if
До этого момента все программы в примерах выполнялись последовательно, строчка за строчкой. Это неудобно, когда в зависимости от какого-то условия необходимо выполнить или не выполнить какие-то строки текста программы. Для задания примитивной логики программы применяется оператор if.
В общем виде оператор if имеет вид. if(условие){
блок операторов 1 }else{
блок операторов 2
}
В круглых скобках задается некоторое логическое условие. Если это условие выполняется (т.е. оно истинно), то выполняются операторы из первого блока, который следует за ключевым словом if, в противном случае выполняются операторы из второго блока, который следует за ключевым словом else.
15
истинно |
|
ложно |
|
Если УСЛОВИЕ |
|
|
|
|
ОПЕРАТОР |
ОПЕРАТОР |
|
если |
|
если |
истинно |
|
ложно |
продолжение
Рисунок 3 – Операторif else
Пример.
Программа, сравнивает две переменные и выдает на экран сообщение о том, какая из переменных больше.
int x=5,y=4; if (x < y){
System.out.println("x меньше y"); }else{
System.out.println("у меньше х");
System.out.println("или");
System.out.println("у равен х");
}
Результат.
уменьше х или
уравен х
Таблица 7 – Операторы сравнения
Оператор |
Значение |
Пример |
== |
Равно (два знака равно) |
x == 3 |
!= |
Неравно |
x != 3 |
< |
Меньше чем |
x < 3 |
> |
Больше чем |
x > 3 |
<= |
Меньше либо равно |
x <= 3 |
>= |
Больше либо равно |
x >= 3 |
|
16 |
|
Сокращенный оператор if использует только первую половину без else. В
общем виде он выглядит так. if(условие){
блок операторов 1
}
истинно ложно
Если УСЛОВИЕ
ОПЕРАТОР
продолжение
Рисунок 4 – Блок-схема сокращенного оператор if
Пример.
Программа проверяет переменную х, если она равна тройке, то на экран выдается надпись «тройка».
if(x==3){
System.out.println("тройка");
}
В операторе if можно задавать сложное условие, которое может состоять из нескольких простых условий, соединенных между собой логическими операторами.
Таблица 8 – Логические операторы
Буквенное значение |
Символьное значение |
Описание |
and |
&& |
И |
or |
| | |
ИЛИ |
not |
! |
Отрицание |
|
!= |
Неравно |
|
17 |
|
Оператор if со сложным условием в общем виде имеет следующий вид. if((условие1)&&(условие2)&&…&&(условиеN)){
блок операторов 1
}
Пример.
Программа проверяет переменную х. Если она окажется больше нуля и одновременно меньше десяти, то на экран будет выдана надпись «положительное число меньше десяти».
double x = Math.random()*100;
if((x>0)&&(x<10)){
System.out.println("положительное число меньше десяти");
}
Оператор if может быть вложен в другой оператор if. Тогда, если выполняется условие главного if, мы попадаем в первый блок операторов, в котором находится еще один if, принцип работы которого подобен главному if. Вложенность условных операторовif может быть бесконечной.
Пример.
Программа должна выдать на консоль в зависимости от значения переменной а следующие надписи: «a больше 0», «a меньше 0», «a равно 0».
if(a>0){
System.out.println(“a больше 0”);
}else{
if(a<0){
System.out.println(“a меньше 0”);
}else{
System.out.println(“a равно 0”);
}
}
Пример.
Программа «Калькулятор1», выполняет сложение, вычитание, умножение и деление двух переменных x и y. Значение операции задается в символьной переменной oper.
int x=5;
int y=3;
char oper=’+’;
int z=0;
if(oper==’+’){
z=x+y;
}
18
if(oper==’-’){
z=x-y;
}
if(oper==’*’){
z=x*y;
}
if((oper==’/’)&&(y!=0)){
z=x/y;
}
System.out.println(z);
В результате выполнения программы на консоль будет выдан результат «8». Если переменной oper присвоить значение «-», то результатом выполнения программы будет «2». Если «*», то результатом будет «15». Если же в переменную oper записать значение «%», то на экран будет выдан результат «0». Так как не одно условие оператора if не будет выполнено, компилятор не попадет не в один из внутренних блоков оператора if, следовательно, значение переменной z не будет изменено, и на экран будет выдано начальное значение z, т.е. «0».
Пример.
Программ отыскивает значения корней квадратного уравнения в зависимости от значений параметров a,b,c.
package equations; import java.lang.*; public class SEquation {
public static void main(String[] argv) { float a=3,b=4,c=5;
if(a==0){
System.out.println("Корень уравнения:"+(-c/b)); }else{
double d=b*b-4*a*c; if(d<0){
System.out.println("Корней нет"); }else{
double x1,x2;
x1 =(-b+Math.sqrt(d))/2*a; System.out.println("Корень уравнения 1: "+x1); x2 =(-b-Math.sqrt(d))/2*a; System.out.println("Корень уравнения 2: "+x2);
}
}
}
}
19
В данном примере сначала проверяем параметр а. Если он равен нулю, то квадратное уравнение превращается в линейное, следовательно, существует только один корень. В противном случае, если а не равно нулю, ищем дискриминант. Если дискриминант меньше нуля, то уравнение не имеет корней, иначе находим оба корня по соответствующим формулам.
2.3. Оператор варианта switch
Условный оператор if в зависимости от условия выполняет один из двух блоков операторов. Оператор варианта switch позволяет выполнить один или несколько блоков операторов из некоторого множества в зависимости от значений некоторой переменной. В общем виде оператор switch имеет вид. switch (Название переменной) {
case Значение1: Блок переменных 1; break;
case Значение2: Блок переменных 2; break;
case Значение3: Блок переменных 3; break;
...
default: Блок переменных выполняемых по умолчанию;
}
После ключевого слова switch в скобках указывается переменная, значения которой будут проверяться в каждом из case. В случае совпадения значения case со значением проверяемой переменной будут выполнены все блоки операторов, начиная с контрольного. Если необходимо выполнить только один блок, то в нем необходимо поставить оператор break, который закончит выполнение оператора switch, и проверки на этом закончятся.
Пример.
Программа выдает на консоль буквенную надпись цифры, которая хранится в переменной val.
String convertNum(int val) {
switch (val) {
case 0: return "нуль ";
20