Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java_1-4_Основы.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
94.28 Кб
Скачать

Приоритет операций

В одном выражении может использоваться сразу несколько операций.

Приоритет их будет таким:

  1. Умножение, деление, вычисление остатка.

  2. Сложение и вычитание.

  3. Присваивание.

Операции с одинаковым приоритетом (перечисленные в одном пункте представленного списка, например, сложение и вычитание) выполняются в порядке следования в выражении, слева направо.

Приоритет можно скорректировать с помощью круглых скобок (операции в круглых скобках выполняются в первую очередь). Круглые скобки допускают многократное вложение.

System.out.println(7%3*4); // выводится 4 

System.out.println(4*7%3); // выводится 1 

System.out.println(4*(7%3)); // выводится 4

Хочется напомнить, что переменные типа char — хранят числовые значения (коды символов по кодовой таблице), а поэтому также могу участвовать в арифметических операциях.

Рассмотрите следующий пример, учитывая, что десятичный код символа 'Q' равен 81:

int t; 

t = 162/'Q'; 

System.out.println(t); // выводится 2

Задачи

  1. В переменных q и w хранятся два натуральных числа. Создайте программу, выводящую на экран результат деления q на w с остатком. Пример вывода программы (для случая, когда в q хранится 21, а в w хранится 8):

21 / 8 = 2 и 5 в остатке

  1. В переменной n хранится натуральное двузначное число. Создайте программу, вычисляющую и выводящую на экран сумму цифр числа n.

  2. В переменной n хранится вещественное число с ненулевой дробной частью. Создайте программу, округляющую число n до ближайшего целого и выводящую результат на экран.

  3. В переменной n хранится натуральное трёхзначное число. Создайте программу, вычисляющую и выводящую на экран сумму цифр числа n.

23/04/2014

Занятие 4

Java класс Math

Разработчику на Java доступно множество готовых (или библиотечных) классов и методов, полезных для использования в собственных программах. Наличие библиотечных решений позволяет изящно решать множество типовых задач.

Далее рассмотрим класс Math, содержащий различные математически функции. Рассмотрим некоторые из них:

  1. Math.abs(n) — возвращает модуль числа n.

  2. Math.round(n) — возвращает целое число, ближайшее к вещественному числу n (округляет n).

  3. Math.ceil(n) — возвращает ближайшее к числу n справа число с нулевой дробной частью (например, Math.ceil(3.4) в результате вернёт 4.0).

  4. Math.cos(n), Math.sin(n), Math.tan(n) — тригонометрические функции sin, cos и tg от аргумента n, указанного в радианах.

  5. Math.acos(n), Math.asin(n), Math.atan(n) — обратные тригонометрические функции, возвращают угол в радианах.

  6. Math.toDegrees(n) — возвращает градусную меру угла в n радианов.

  7. Math.toRadians(n) — возвращает радианную меру угла в n градусов.

  8. Math.sqrt(n) — возвращает квадратный корень из n.

  9. Math.pow(n, b) — возвращает значение степенной функции n в степени b, основание и показатель степени могут быть вещественными.

  10. Math.log(n) — возвращает значение натурального логарифма числа n.

  11. Math.log10(n) — возвращает значение десятичного логарифма числа n.

Все перечисленные функции принимают вещественные аргументы, а тип возвращаемого значения зависит от типа аргумента и от самой функции.

Кроме функций в рассматриваемом классе имеются две часто используемых константы:

  1. Math.PI — число «пи», с точностью в 15 десятичных знаков.

  2. Math.E — число Неппера (основание экспоненциальной функции), с точностью в 15 десятичных знаков.

Примеры использования:

System.out.println(Math.abs(-2.33)); // выведет 2.33 

System.out.println(Math.round(Math.PI)); // выведет 3 

System.out.println(Math.round(9.5)); // выведет 10 

System.out.println(Math.round(9.5-0.001)); // выведет 9 

System.out.println(Math.ceil(9.4)); // выведет 10.0 

double c = Math.sqrt(3*3 + 4*4); 

System.out.println(c); // выведет гипотенузу треугольника с катетами 3 и 4 

double s1 = Math.cos(Math.toRadians(60)); 

System.out.println(s1); // выведет косинус угла в 60 градусов

Задачи

  1. Вычислить и вывести на экран косинусы углов в 60, 45 и 40 градусов без использования функции Math.toDegrees(n).

  2. В переменных a и b лежат положительные длины катетов прямоугольного треугольника. Вычислить и вывести на экран площадь треугольника и его периметр.

  3. Натуральное положительное число записано в переменную n. Определить и вывести на экран, сколько цифр в числе n.

  4. В переменной n лежит некоторое вещественное число. Вычислить и вывести на экран значение функции «сигнум» от этого числа (-1, если число отрицательное; 0, если нулевое; 1 если, положительное).

Псевдослучайные числа

В классе Math есть полезная функция без аргументов, которая позволяет генерировать псевдослучайные значения, т.е. при каждом вызове этой функции она будет возвращать новое значение, предсказать которое очень сложно (не вдаваясь в подробности можно сказать, что теоретически это всё-таки возможно, именно поэтому генерируемые функцией числа называются не случайными, а псевдослучайными).

Итак, Math.random() возвращает псевдослучайное вещественное число из промежутка [0;1).

Если требуется получить число из другого диапазона, то значение функции можно умножать на что-то, сдвигать и, при необходимости, приводить к целым числам.

Примеры:

System.out.println(Math.random()); // вещественное число из [0;1) 

System.out.println(Math.random()+3); // вещественное число из [3;4) 

System.out.println(Math.random()*5); // вещественное число из [0;5) 

System.out.println( (int)(Math.random()*5) ); // целое число из [0;4] 

System.out.println(Math.random()*5+3); // вещественное число из [3;8) 

System.out.println( (int)(Math.random()*5+3) ); // целое число из [3;7] 

System.out.println( (int)(Math.random()*11) - 5 ); // целое число из [-5;5]

Псевдослучайные числа имеют серьёзнейшие практические приложения и используются, например, в криптографии.

Задачи

  1. Создайте программу, которая будет генерировать и выводить на экран вещественное псевдослучайное число из промежутка [-3;3).

  2. Натуральное положительное число записано в переменную n. Создайте программу, которая будет генерировать и выводить на экран целое псевдослучайное число из отрезка [-n;n].

  3. В переменные a и b записаны целые числа, при этом b больше a. Создайте программу, которая будет генерировать и выводить на экран целое псевдослучайное число из отрезка [a;b].

Потоки ввода/вывода и строки в Java

Для ввода данных используется класс Scanner из библиотеки пакетов Java.

Этот класс надо импортировать в той программе, где он будет использоваться. Это делается до начала открытого класса в коде программы.

В классе есть методы для чтения очередного символа заданного типа со стандартного потока ввода, а также для проверки существования такого символа.

Для работы с потоком ввода необходимо создать объект класса Scanner, при создании указав, с каким потоком ввода он будет связан. Стандартный поток ввода (клавиатура) в Java представлен объектом — System.in. А стандартный поток вывода (дисплей) — уже знакомым вам объектом System.out. Есть ещё стандартный поток для вывода ошибок — System.err.

import java.util.Scanner; // импортируем класс 

public class Main { 

    public static void main(String[] args) { 

        Scanner sc = new Scanner(System.in); // создаём объект класса Scanner 

        int i = 2; 

        System.out.print("Введите целое число: "); 

        if(sc.hasNextInt()) { // возвращает истинну если с потока ввода можно считать целое число 

          i = sc.nextInt(); // считывает целое число с потока ввода и сохраняем в переменную 

          System.out.println(i*2); 

        } else { 

          System.out.println("Вы ввели не целое число"); 

        } 

    } 

}

Метод hasNextDouble(), применённый объекту класса Scanner, проверяет, можно ли считать с потока ввода вещественное число типа double, а метод nextDouble() — считывает его. Если попытаться считать значение без предварительной проверки, то во время исполнения программы можно получить ошибку (отладчик заранее такую ошибку не обнаружит). Например, попробуйте в представленной далее программе ввести какое-то вещественное число:

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

        Scanner sc = new Scanner(System.in); 

        double  i = sc.nextDouble(); // если ввести букву s, то случится ошибка во время исполнения 

        System.out.println(i/3); 

    } 

}

Имеется также метод nextLine(), позволяющий считывать целую последовательность символов, т.е. строку, а, значит, полученное через этот метод значение нужно сохранять в объекте класса String. В следующем примере создаётся два таких объекта, потом в них поочерёдно записывается ввод пользователя, а далее на экран выводится одна строка, полученная объединением введённых последовательностей символов.

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

        Scanner sc = new Scanner(System.in); 

        String s1, s2; 

        s1 = sc.nextLine(); 

        s2 = sc.nextLine(); 

        System.out.println(s1 + s2); 

    } 

}

Существует и метод hasNext(), проверяющий остались ли в потоке ввода какие-то символы.

В классе String существует масса полезных методов, которые можно применять к строкам (перед именем метода будем указывать тип того значения, которое он возвращает):

  1. int length() — возвращает длину строки (количество символов в ней);

  2. boolean isEmpty() — проверяет, пустая ли строка;

  3. String replace(a, b) — возвращает строку, где символ a (литерал или переменная типа char) заменён на символ b;

  4. String toLowerCase() — возвращает строку, где все символы исходной строки преобразованы к строчным;

  5. String toUpperCase() — возвращает строку, где все символы исходной строки преобразованы к прописным;

  6. boolean equals(s) — возвращает истинну, если строка к которой применён метод, совпадает со строкой s указанной в аргументе метода (с помощью оператора == строки сравнивать нельзя, как и любые другие объекты);

  7. int indexOf(ch) — возвращает индекс символа ch в строке (индекс это порядковый номер символа, но нумероваться символы начинают с нуля). Если символ совсем не будет найден, то возвратит -1. Если символ встречается в строке нескольо раз, то вовзвратит индекс его первого вхождения.

  8. int lastIndexOf(ch) — аналогичен предыдущему методу, но возвращает индекс последнего вхождения, если смивол встретился в строке несколько раз.

  9. int indexOf(ch,n) — возвращает индекс символа ch в строке, но начинает проверку с индекса n (индекс это порядковый номер символа, но нумероваться символы начинают с нуля).

  10. char charAt(n) — возвращает код символа, находящегося в строке под индексом n (индекс это порядковый номер символа, но нумероваться символы начинают с нуля).

public class Main { 

    public static void main(String[] args) { 

        String s1 = "firefox"; 

        System.out.println(s1.toUpperCase()); // выведет «FIREFOX» 

        String s2 = s1.replace('o', 'a'); 

        System.out.println(s2); // выведет «firefax» 

        System.out.println(s2.charAt(1)); // выведет «i» 

        int i; 

        i = s1.length(); 

        System.out.println(i); // выведет 7 

        i = s1.indexOf('f'); 

        System.out.println(i); // выведет 0 

        i = s1.indexOf('r'); 

        System.out.println(i); // выведет 2 

        i = s1.lastIndexOf('f'); 

        System.out.println(i); // выведет 4 

        i = s1.indexOf('t'); 

        System.out.println(i); // выведет -1 

        i = s1.indexOf('r',3); 

        System.out.println(i); // выведет -1 

    } 

}

Пример программы, которая выведет на экран индексы всех пробелов в строке, введенноё пользователем с клавиатуры:

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

        Scanner sc = new Scanner(System.in); 

        String s = sc.nextLine(); 

        for(int i=0; i < s.length(); i++) { 

            if(s.charAt(i) == ' ') { 

                System.out.println(i); 

            } 

        } 

    } 

}

Задачи

  1. Создать программу, которая будет сообщать, является ли целое число, введённое пользователем, чётным или нечётным. Если пользователь введёт не целое число, то сообщать ему об ошибке.

  2. Создать программу, которая будет вычислять и выводить на экран сумму двух целых чисел, введённых пользователем. Если пользователь некорректно введёт хотя бы одно из чисел, то сообщать об ошибке.

  3. Создать программу, которая будет выводить на экран меньшее по модулю из трёх введённых пользователем вещественных чисел.

  4. Создать программу, которая будет проверять, является ли слово из пяти букв, введённое пользователем, палиндромом (примеры: «комок», «ротор»). Если введено слово не из 5 букв, то сообщать об ошибке. Программа должна нормально обрабатывать слово, даже если в нём использованы символы разного регистра. Например, слова «Комок» или «РОТОР» следует также считать палиндромами.

16/04/2014

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