Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

methodichkaA5

.pdf
Скачиваний:
17
Добавлен:
02.02.2015
Размер:
801.83 Кб
Скачать

byte 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]