Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
55
Добавлен:
25.12.2020
Размер:
1.57 Mб
Скачать

Класс Roots.java

import java.util.Scanner; public class Roots {

public static void main(String[] args) { int a, b, c; // ax^2 + bx + c double discrim, root1, root2;

Scanner scan = new Scanner(System.in); System.out.print("Enter the coefficient a "); a = scan.nextInt();

System.out.print("Enter the coefficient b: "); b = scan.nextInt();

System.out.print("Enter the constant c: "); c = scan.nextInt();

//полагаем, что дискриминант положительный discrim = Math.pow(b, 2) - (4 * a * c);

root1 = ((-1 * b) + Math.sqrt(discrim)) / (2 * a); root2 = ((-1 * b) - Math.sqrt(discrim)) / (2 * a); System.out.println("Root #1: " + root1); System.out.println("Root #2: " + root2);

}

}

AboutCircle.java

import java.util.Scanner; import java.text.DecimalFormat;

public class AboutCircle {

public static void main (String[] args)

{

int radius;

double area, circumference;

Scanner scan = new Scanner (System.in);

System.out.print ("Enter the circle's radius: "); radius = scan.nextInt();

area = Math.PI * Math.pow(radius, 2); circumference = 2 * Math.PI * radius;

// вывод длины окружности с 3 знаками после запятой

DecimalFormat fmt = new DecimalFormat ("0.###");

System.out.println ("The circle's area: " + fmt.format(area));

System.out.println ("The circle's circumference: "

+ fmt.format(circumference));

}

}

Перечисляемые типы

Java позволяет определить перечисляемый тип, который затем можно использовать для объявления переменных. Определение перечисляемого типа задает все возможные значения, которые может принимать переменная этого типа. Следующее объявление создает перечисляемый тип, который называется Season.

enum Season {winter, spring, summer, fall};

В перечислении может быть любое количество значений.

Представляет собой список именованных констант, и определяет новый тип данных. Для создания перечисления служит ключевое слово enum. Объект перечислимого типа может принимать лишь значения, содержащиеся в списке.

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

Пример перечисления видов транспортных средств

enum Transport {

CAR, TRUCK, AIRPLANE, TRAIN, BOAT

}

Идентификаторы CAR, TRUCK и так далее называются константами перечислимого типа. Каждый из них автоматически неявно объявляется как открытый (public), статический (static) член перечисления Transport.

Тип этих констант соответствует типу перечисления (в данном случае — Transport). В терминологии Java подобные константы называются самотипизированными (приставка “само” означает, что в качестве типа константы принимается тип перечисления).

После того, как тип определен, переменная этого типа может быть объявлена.

Season time;

а потом ей можно присвоить значение time = Season.fall;

Значения указываются через имя типа. Перечисляемые типы являются безопасными типами - вы не можете присвоить им любое значение, кроме тех, которые уже перечислены.

Определив перечисление, можно создать переменную данного типа. Но, несмотря на то, что перечисление определяется как тип класса,

получить экземпляр объекта типа enum с помощью оператора new нельзя. Переменная перечислимого типа создается подобно переменной

простого типа.

Например, для объявления переменной tp упомянутого выше перечислимого типа Transport служит следующее выражение:

Transport tp;

Переменная tp относится к типу Transport, и поэтому ей можно присваивать только те значения, которые определены в данном перечислении.

Например, в следующей строке кода переменной tp присваивается значение AIRPLANE:

tp = Transport.AIRPLANE;

Для проверки равенства констант перечислимого типа служит оператор сравнения =. Например:

if(tp == Transport.TRAIN) // ...

Также можно использовать switch()

//Применениеперечислениядляуправленияоператором

switch,

switch(tp) {

 

case CAR:

//...

case TRUCK:

//...

Пример Planet.java

public enum Planet {

MERCURY

(3.303e+23,

2.4397e6),

VENUS

(4.869e+24,

6.0518e6),

EARTH

(5.976e+24,

6.37814e6),

MARS

(6.421e+23,

3.3972e6),

JUPITER

(1.9e+27,

7.1492e7),

SATURN

(5.688e+26,

6.0268e7),

URANUS

(8.686e+25,

2.5559e7),

NEPTUNE

(1.024e+26,

2.4746e7);

private

final double mass; //вкилограммах

private final

double radius;вметрах//

Planet(double

mass, double radius) {

this.mass

= mass; this.radius = radius;

}

private double mass() { return mass; } private double radius() { return radius; }

//гравитационнаяпостоянная

public static final double G = 6.67300E-11;

double surfaceGravity() {

return G * mass / (radius * radius);

}

double surfaceWeight(double otherMass) { return otherMass * surfaceGravity();

}

public static void main(String[] args) { if (args.length != 1) {

System.err.println("Usage: java Planet <earth_weight>");

System.exit(-1);

}

double earthWeight = Double.parseDouble(args[0]); double mass = earthWeight/EARTH.surfaceGravity(); for (Planet p : Planet.values())

System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass));

}

}

Работа программы Planet

Порядковые значения перечисляемых типов

Внутри перечисления каждое значение перечисляемого типа хранится как целое число, называемое его порядковое значение. Первое значение перечисляемого типа имеет порядковое значение равное нулю, второе - двум, и так далее. Тем не менее, вы не можете присвоить числовое значение данным перечисляемого типа, даже если оно соответствует действительным порядковым значением, заданным в перечислении.

Объявление перечисляемого типа представляет собой особый тип класса, а каждая переменная этого типа является объектом. Метод ordinal() возвращает порядковое значение объекта в перечислении. Метод name() возвращает имя идентификатора, соответствующего значению объекта в перечислении.

Пример Burger.java

package ru.mirea.javacourse.lecture2;

public class Dinner {

enum Burger {onion, chicken, cucumber, cheese, coffee, meet, olives, tomato} //перечисление

public static void main(String[] args) { Burger one, two, three;

one = Burger.meet; two = Burger.chicken;

System.out.println("burger one value: " + one); System.out.println("burger one ordinal: " +

one.ordinal());

System.out.println("burger one name: " + one.name());

System.out.println();

System.out.println(" burger two value: " + two); System.out.println(" burger two ordinal: " +

two.ordinal());

System.out.println(" burger two name: " + two.name()); three = one;

System.out.println();

System.out.println(" burger three value: " + three); System.out.println(" burger three ordinal: " +

three.ordinal());

System.out.println(" burger three name: " + three.name());

}

}

Классы оболочки

Пакет java.lang содержит классы-оболочки, оответствуют каждому типупримитиву:

Следующее объявление создает объект Integer, который представляет собой целое число 40, как объект

Integer age = new Integer(40);

Объект класса-оболочки, может быть использован в любой ситуации, когда использование примитивного типа будет недостаточно. Например, некоторые объекты служат в качестве контейнеров других объектов. Примитивные значения не могут быть сохранены в таких контейнерах, но объекты-оболочки могут.

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

Так, например, класс Integer содержит метод, чтобы преобразовать целое число, которое хранится в String в значение типа int:

num = Integer.parseInt(str);

Классы-оболочки также содержат полезные и нужные константы.

Так, например, у класса Integer есть константы: MIN_VALUE и MAX_VALUE которые содержат самое маленькое и самое большое значения типа int.

Автоупаковка

Автоупаковка это автоматическое преобразование примитивного значения к соответствующему объекту обертки

Integer obj; int num = 42; obj = num;

Присваивание создает соответствующий объект Integer

Обратное преобразование (называется автораспаковка) и также происходит автоматически, по мере необходимости.

Пример: игра в кости Мы разработаем два класса для реализации игры “В кости”.

Класс описывающий игральный шестигранный кубик – кость, он называется Die. В нем есть метод roll(), означающий бросание игральной кости. И класс RollingDice будет у нас в роли класса тестера, где содержится

функция main() – точка входа в программу. Оба этих класса находятся в отношениях использования

Пример Die.java (игра в кости)

public class Die {

private final int MAX = 6; // maximum face value

private int faceValue; // current value showing on the die //Constructor: Sets the initial face value.

public Die( ) { faceValue = 1;

}

// Rolls the die and returns the result. public int roll() {

faceValue = (int)(Math.random() * MAX) + 1; return faceValue;

}

//Face value mutator.

public void setFaceValue (int value) { faceValue = value;

}

//Face value accessor. public int getFaceValue() { return faceValue;

}

//Returns a string representation of this die. public String toString() {

String result = Integer.toString(faceValue); return result;

}

}

Main.java (игра в кости)

public class Main{

public static void main (String[] args) { Die die1, die2;

int sum;

die1 = new Die(); die2 = new Die(); die1.roll(); die2.roll();

System.out.println ("Die One: " + die1 + ", Die Two: " + die2);

die1.roll();

die2.setFaceValue(4);

System.out.println ("Die One: " + die1 + ", Die Two: " + die2);

sum = die1.getFaceValue() + die2.getFaceValue(); System.out.println ("Sum: " + sum);

sum = die1.roll() + die2.roll();

System.out.println ("Die One: " + die1 + ", Die Two: " + die2);

System.out.println ("New sum: " + sum);

}

}

Метод toString()

Метод toString() это метод класса Object, который лежит на вершине иерархии классов java. Создавая собственные классы мы неявным образом наследуемся от класса Object. Для все пользовательских классов необходимо переопределить метод toString(). Метод toString() возвращает значение символьной строки, для того чтобы тем самым представить данный объект . Он вызывается автоматически, когда объект конкатенируется со строкой или когда он передается внутрь метода println().

Рекурсия

Что такое рекурсия?

В контексте языка программирования рекурсия - это некий активный метод (или подпрограмма) вызываемый сам по себе непосредственно, или вызываемой другим методом (или подпрограммой) косвенно.

Для чего использовать рекурсию?

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

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

Прямая рекурсия:

procedure Alpha; begin

Alpha end;

Косвенный (или взаимная) рекурсия:

procedure Alpha; begin

Beta end;

procedure Beta; begin

Alpha end;

Возникают трудности в некоторых языках программирования из-за использования прямой ссылки.

Почему стоит использовать рекурсию?

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

Пример Числа Фибоначчи Числа Фибоначчи имеют невероятное количество свойств, которые

используются в области Computer science.

Есть даже целый журнал - The Fibonacci Quarterly, который существует с единственной целью - публикации теорем с участием чисел Фибоначчи.

Свойства:

1.Сумма квадратов двух последовательных чисел Фибоначчи

также представляет из себя еще одно число Фибоначчи

2.Сумма первых “n” чисел Фибоначчи на единицу меньше,

чем Fn+2

Соседние файлы в папке Лекции