Логічні оператори

Іноді, щоб прийняти рішення, необхідно перевірити більше одного умовного виразу Наприклад, якщо назва штату Техас (Texas) або Каліфорнія (California), потрібно додати податок штату до ціні кожного товару в магазині Це прикладлогічного чи – Або Техас або Каліфорнія Це працює так – якщо будь-яке з двох умов істинно (true), результат всього виразу – теж істина (true)

У Java знаклогічного  або позначається однією або двома вертикальними лініями У наступному прикладі я буду використовувати змінну типу String У цього классa в Java є метод equals () для перевірки рядків на рівність і я буду використовувати його, щоб перевірити чи дорівнює змінна state (штат) Техас абоКаліфорнія:

if (stateequals(&quotTexas&quot) | stateequals(&quotCalifornia&quot))

Можна також використовувати дві вертикальні лінії в операторі if:

if (stateequals(&quotTexas&quot) || stateequals(&quotCalifornia&quot))

Різниця між цими умовами в тому, що якщо ви використовуєте дві вертикальні лінії, і вираз стоїть ліворуч істинно (true), то праве – навіть не перевіряється Якщо використовується одна вертикальна риса, JVM завжди буде обчислювати результат обох виразів

Логічне і задається одним або двома амперсандом (&&) Всі вираз істинно, якщо істинна кожна частина цього виразу Наприклад, знімає податок штату, тільки якщо цей штат (state) – Нью – Йорк і ціна (price) більше 110 доларів Обидві умови повинні бути істинними одночасно:

if (stateequals(&quotNew York&quot) &amp&amp price &gt110)

або

if (stateequals(&quotNew York&quot) &amp price &gt110)

Якщо використовується подвійний амперсанд і перше вираз помилково (false), то другий вираз навіть не перевірятиметься, тк незалежно від нього, все вираз буде хибним При одному амперсандом будуть обчислені обидві умови

Логічне НЕ (Negation) позначається знаком оклику Воно змінює значення виразу на протилежне Наприклад, якщо деяка дія може бути виконано тільки, якщо штат НЕ Нью – Йорк, можна написати так:

if (stateequals(&quotNew York&quot))

Інший приклад – такі вирази абсолютно ідентичні:

if (price &lt 50)

if ((price &gt=50))

У другому випадку логічне НЕ застосовується до результату обчислення виразу в дужках

Умовний оператор

Існує ще один тип оператора if, який називається умовний оператор Він використовується для того, щоб привласнити значення змінної, залежно від істинності виразу, що стоїть перед знаком питання Якщо вираз істинно, присвоюється

значення варте відразу після знаку питання, в іншому випадку – значення стоїть після двокрапки:

discount = price &gt 50 10:5

Якщо ціна більше пятдесяти, значення змінної discount (знижка) дорівнюватиме десяти, в іншому випадку – пяти Це просто більш коротка форма запису звичайного оператора if:

if (price &gt 50){

discount = 10

} else {

discount = 5

}

Використання else if

Також можна створювати складені оператори if містять кілька else if блоків Давайте створимо клас ReportCard (табель по русски), у якого буде метод main (), а так само метод з одним аргументом, в який передається чисельний результат деякого тесту Залежно від цього числа, метод буде друкувати вашу оцінку по буквеної системі оцінок (A, B, C, D) Назвемо цей метод convertGrades ()

public class ReportCard {

/**

Mетод convertGrades приймає один цілочисельний аргумент

– Результат тесту і повертає символ A, B, C or D залежно від цього аргументу

*/

public char convertGrades( int testResult){

char grade

if (testResult &gt= 90){

grade = A;

}else if (testResult &gt= 80 &amp&amp testResult &lt 90){

grade = B;

}else if (testResult &gt= 70 &amp&amp testResult &lt 80){

grade = C;

}else {

grade = D;

}

return grade

}

public static void main(String[] args){ ReportCard rc = new ReportCard()

char yourGrade = rcconvertGrades(88)

Systemoutprintln (Ваша перша оцінка + yourGrade) yourGrade = rcconvertGrades (79) Systemoutprintln (Ваша друга оцінка + yourGrade)

}

}

Крім використання else if в цьому прикладі демонструється, як використовувати змінні типу char Також можна побачити, що за допомогою оператора && можна перевірити, чи потрапляє число в вказаний діапазон Не можна написати якщо testResult між 80 і89, в Java потрібно писати, що testResult повинен бути більше або дорівнює 80, і (&) в той же час менше 89, ось таким чином:

testResult &gt= 80 &amp&amp testResult &lt 89

Подумайте, чому ми тут не використовуємо оператор | |Оператор switch і прийняття рішень

Оператор switch іноді використовується як альтернатива if Значення змінної стоїть після оператора switch обчислюється, і програма переходить тільки до одного з case блоків, аргумент якого збігається з результатом цього обчислення:

public static void main(String[] args){ ReportCard rc = new ReportCard()

char yourGrade = rcconvertGrades(88)

  switch (yourGrade){

case A:

Systemoutprintln (Чудова робота”)

break

case B:

Systemoutprintln (Хороша робота”)

break

case C:

Systemoutprintln (Треба підтягнути знання”)

break

case D:

Systemoutprintln (Будь серйозніше”)

break

}

}

Не забудьте написати ключове слово break в кінці кожного case блоку, щоб після завершення виконання його коду, стався вихід з оператора switch Якщо ви не напишете break, то надрукуються все чотири рядки, не дивлячись на те, що значення змінної yourGrade має тільки одне значення

Раніше оператор switch мав обмеження – змінна, яка в нього передається, повинна була мати один з наступних типів: char int byte short enum

Починаючи з Java 17, тип String так само може використовуватися в операторі switch Крім того, завдяки автобоксінгу, який зявився в Java 15 можуть використовуватися типи обгортки: Character, Byte, Short, і Integer

Джерело: Java Programming for Kids, Parents and Grandparents by Yakov Fain

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*