Презентация "Начальный курс Java (8 занятий)"


Подписи к слайдам:
Начальный курс Java 16 занятий

Начальный курс Java 8 занятий

Занятие 1

Java

http://prog.kiev.ua/forum

  • сюда надо выкладывать «домашки» на проверку
  • тут можно скачать учебные материалы
  • Также можно писать в Skype:

    prog.kiev.ua

Java

ВНИМАНИЕ!!! ЗАПИШИТЕ!!!

Пароль на презентацию курса Java Start:

java-1-0626

Java

  • https://www.facebook.com/prog.kiev.ua
  • https://vk.com/prog_kiev_ua
  • https://plus.google.com/+ProgKievUa
  • https://twitter.com/KievProg
  • Подписывайтесь. Тут можно найти:

  • Новости и объявления по нашим курсам
  • Ссылки на учебные материалы
  • Вакансии

Java

Superjob.ua:

“…Средние рыночные зарплатные предложения для Java-программистов в Киеве составляют 24 000 грн. Максимальный заработок программистов Java в столице составляет 40 000 грн.”

22.01.2014

Java

Код = текст. Пример:

public class MyClass {

public static void main(String[] args) {

System.out.println(“Куку!");

}

}

Код  Компилятор  Готовая программа

Java

  • Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (куплена Oracle).
  • Дата выпуска – 23 мая 1995 г.
  • Java 1 – 8

Java

  • Программы на Java транслируются в байт-код JVM
  • Независимость байт-кода от операционной системы и оборудования (Windows, Mac OS X, Linux etc.)
  • Автоматическое управление памятью (GC)
  • Гибкая система безопасности
  • Скорость

Java

Платформы:

  • Java SE (J2SE)
  • Java EE (J2EE)
  • Java ME (J2ME)
  • JavaFX
  • Java Card
  • Android
  • Google App Engine (GAE/Java)

Java

Проекты:

  • eBay
  • LinkedIn
  • Yahoo
  • Privat24
  • Одноклассники

Java

Дистрибутивы:

  • JRE
  • JDK
  • Библиотеки:

  • Стандартная библиотека
  • Сторонние библиотеки (Spring, Hibernate…)
  • Средства разработки:

  • Eclipse
  • NetBeans
  • IntelliJ IDEA
  • Блокнот 

Java

Структура:

  • Class-ы
  • Package - группа взаимосвязанных классов
  • JAR – группа пакетов
  • Проекты:

  • .java файлы
  • Иерархия каталогов

Java

Компиляция программы:

*.java -> компилятор -> *.class -> JAR

Первая программа

package test; // можно опустить

public class MyClass {

public static void main(String[] args) {

// этот текст появится на экране

System.out.println(“Prog.kiev.ua is the best!”);

}

}

Компиляция

  • Сохраняем в файл MyClass.java
  • javac –d ./ *.java
  • jar –cf my.jar test
  • Запускаем: java –cp my.jar test.MyClass
  • Открываем JAR, добавляем в файл META-INF/MANIFEST.MF строку “Main-Class: test.MyClass”
  • Запускаем: java –jar my.jar

Усложняем…

package test;

public class MyClass {

public static void main(String[] args) {

Runtime r = Runtime.getRuntime();

System.out.println(System.getProperty(“os.name”));

System.out.println(System.getProperty(“os.version”));

System.out.println(r. availableProcessors());

// total amount of memory in the Java virtual machine.

System.out.println(r. totalMemory());

}

}

IDE

Запускаем Eclipse -> создаем проект…

Документация

Лирическое отступление

Размерность данных:

  • 1 бит : 0 или 1
  • 1 байт = 8 бит (10101110)
  • 1 килобайт = 1024 байт
  • 1 мегабайт = 1024 килобайт
  • 1 гигабайт = 1024 мегабайт
  • 1 терабайт = 1024 гигабайт

Hex

Hex = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}

Пример 1:

  • 0x5A3 = 3·16^0+10·16^1+5·16^2 = 1443
  • Пример 2:

  • A = 1443 / 16 = 90, B = 1443 % 16 = 3
  • A = 90 / 16 = 5, B = 90 % 16 = 10 = A
  • A = 5 / 16 = 0 -> stop -> 0x5A3

Binary

B= {0, 1}

Пример 1:

  • b101011 = 1*2^0 + 1*2^1 + 1*2^3 + 1 *2^5 = 43
  • Пример 2:

  • A = 43 / 2 = 21, B = 43 % 2= 1
  • A = 21 / 2 = 10, B = 21 % 2 = 1
  • A = 10 / 2 = 5, B = 10 % 2 = 0
  • A = 5 / 2 = 2, B = 5 % 2 = 1
  • A = 2 / 2 = 1, B = 2 % 2 = 0
  • A = 1 / 2 = 0 -> STOP!! -> b101011

Java

Домашнее задание:

  • Разобраться с «ручной компиляцией» программ без IDE.
  • Разобраться с 16-й системой исчисления.

Занятие 2

Переменные

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

Типы данных

  • byte: 8 бит (от -128 до 127)
  • short: 16 бит (от -32 768 до 32 767)
  • int: 32 бита (от -2 147 483 648 до 2 147 483 647)
  • long: 64 бита (от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807)
  • float: 32 бита ( -(2-2−23)·2127..(2-2−23)·2127, или примерно −3.4·1038..3.4·1038, а также -∞, +∞, NaN)
  • Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.NaN

  • double: 64 бита ( -(2-2−52)·21023..(2-2−52)·21023, или примерно −1.8·10308..1.8·10308, а также -∞, +∞, NaN)
  • Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3)

  • char: 16 бит (0..65535)
  • boolean: true/false

Переменные

package test;

public class MyClass {

public static void main(String[] args) {

int x;

int a = 1;

double b = 7.5;

long c = 100000, d = 33333;

char d1 = ‘A’;

boolean e = true;

short f = 500;

int g = f + 300;

x = 55;

}

}

Переменные

  • int i1 = 12; // переменной i присвоить значение 12 в десятичной системе счисления
  • int i2 = 0x12; // переменной i присвоить значение 12 в шестнадцатеричной системе счисления
  • int i3 = 012; // переменной i присвоить значение 12 в восьмеричной системе счисления
  • int i4 = 0b1011; // переменной i присвоить значение 1011 в двоичной системе счисления (с Java 7)

Преобразования

Правила:

  • Если один операнд имеет тип double, другой тоже преобразуется к типу double.
  • Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
  • Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
  • Иначе оба операнда преобразуются к типу int.

Преобразования

package test;

public class MyClass {

public static void main(String[] args) {

int x = 1; // превратится в double x = 1.0

double y = 2.3;

double z = x + y – 5.2;

}

}

Преобразования

public class MyClass {

public static void main(String[] args) {

byte a = (byte)(127 + 1);

short x = Byte.MAX_VALUE + 1; /* 127 + 1 = 128 */

byte y = (byte)x;

byte z = (byte)(x + 129);

System.out.println(a); // -128 !!! Переполнение

System.out.println(x); // 128 // Все ОК

System.out.println(y); // -128

System.out.println(z); // 1

}

}

-128, -127, -126, -125, …0, 1, 2 …, 127

Типы данных

String – строки. Индексация – с нуля.

public class MyClass {

public static void main(String[] args) {

String s1 = “abCd”;

String s2 = “12345”;

String s3 = s1 + s2; // “abCd12345”

String s4 = s1.substring(2); // “Cd”

int x = s2.length(); // 5

String s5 = s1.toUpperCase(); // “ABCD”

char c = s1.charAt(0); // ‘a’

int pos = s1.indexOf(“bC”); // 1

String s6 = “aaacccddd”.replace(“ccc”, “qqq”); // “aaaqqqddd”

System.out.println(s3);

System.out.println(s4);

System.out.println(s5);

}

}

Типы данных

Сравнение строк:

package test;

public class MyClass {

public static void main(String[] args) {

String s1 = “ABCD”;

String s2 = “abcd”;

String s3 = “abcd”;

System.out.println(s3.equals(s1));

System.out.println(s1.equals(s2));

System.out.println(s2.equals(s1));

System.out.println(s1.equalsIgnoreCase(s2));

}

}

Преобразования

Классы:

  • Integer, Long, Short, Boolean, Character, Byte.
  • Преобразование числа в строку:

  • String s1 = Integer.toString(777); “777”
  • String s2 = Long.toString(888888);
  • String s3 = Integer.toString(222, 16); // “DE”
  • Преобразование строки в число:

  • int a =Integer.parseInt(“4455”);
  • long b = Long.parseLong(“2343554623453”);
  • Int c = Integer.parseInt(“DE”, 16);

Типы данных

package test;

public class MyClass {

public static void main(String[] args) {

String s = “String ”;

int x = 100;

System.out.println(s + x); // “String 100”

System.out.println(s + Integer.toString(x)); // “String 100”

}

}

Переменные

Область видимости переменных:

public class MyClass {

public static void main(String[] args) {

short x;

if (true) {

short x;

int y;

y = 60;

x = 33;

}

y = 50; // ошибка!

x = 22;

}

}

Операторы

  • + (+=) - сложение
  • - (-=) - вычитание
  • * (*=) - умножение
  • / (/=)- деление
  • % (%=)- деление по модулю
  • ++ - инкремент
  • -- - декремент

Операторы

int a = 1 + 34;

int b = a / 7; // 5

int c = a * 2; // 70

int d = 12 % 3; // 0

int e = 13 % 3; // 1

e++; // 2

a--; // 34

с += 2; // 72 // c = c + 2;

c -= 3; // 69

Операторы

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

int i = 0;

System.out.print(++i); // 1

System.out.print(i++); // 1

System.out.print(i); // 2

Как прочитать ввод

import java.util.Scanner;

public class Main {

public static void main (String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("Enter string: ");

String s = scanner.nextLine();

System.out.println("You printed: " + s);

System.out.print("Enter integer: ");

int i = scanner.nextInt();

System.out.println("You printed: " + i);

}

}

Задачи

  • Прочитать строку 1
  • Прочитать строку 2
  • Прочитать строку 3
  • Вывести на экран
    • S1 + s3
    • S3 + s2 + s1
    • S1 + s2 + s3

Задачи

  • Прочитать с консоли число 1
  • Прочитать с консоли число 2
  • Вывести результат
  • И так для каждого оператора

import java.util.Scanner;

  • import java.util.Scanner;
  • public class Main {
  • public static void main (String[] args) {
  • Scanner scanner = new Scanner(System.in);
  • int x = scanner.nextInt(), y = scanner.nextInt();
  • System.out.println(x + y);
  • System.out.println(x - y);
  • System.out.println(x * y);
  • System.out.println(x / y);
  • }
  • }

Занятие 3

Строки и массивы

Массив — это конечная последовательность упорядоченных элементов одного типа, доступ к каждому элементу в которой осуществляется по его индексу.

Варианты объявления массива:

  • тип[] имя; // !!!
  • тип имя[];

Строки и массивы

Инициализация массивов:

int[] ar0;

double[] ar1;

double ar2[] = {3.14, 2, 5.5}; // Массив из 3-х элементов типа

ar0 = new int[10]; // массив из 10 элементов типа int

int n = 5;

ar1 = new double[n]; // Массив из 5 элементов double

Строки и массивы

int[] arr = new int[5];

Запись в массив:

arr[0] = 0;

arr[1] = 15;

Чтение из массива:

int x = arr[4]; // последний элемент

System.out.println(x);

Длинна массива:

int len = arr.length; // 5

Строки и массивы

Если массив создается с помощью оператора new, то всем элементам массива автоматически присваиваются значения по умолчанию:

  • Для числовых значений начальное значение будет 0.
  • Для массива типа boolean начальное значение будет равно false.
  • Для массива типа char - '\u0000‘.
  • Для массива типа класса - null.

Строки и массивы

Что за массив в main?

public static void main(String[] args) {

System.out.println(args[0]); // MyClass.java

System.out.println(args[1]); // Class2.java

}

java –jar my.jar MyClass.java Class2.java

Строки и массивы

Массивы строк:

String[] a = new String[] {“Hello”, “Java”, “SE”};

System.out.println(a[0]); // “Hello”

System.out.println(a[1]); // “Java”

Строки и массивы

Копирование массивов:

char[] a = new char[5] {‘A’, ‘B’, ‘C’, ‘D’, ‘E’};

char[] b = new char[5];

System.arraycopy(a, 0, b, 0, a.length); // теперь а и b – два разных массива с одинаковым содержимым

char[] c1 = Arrays.copyOf(a, a.length); // c1 = c

char[] c2 = Arrays.copyOf(a, 2); // {‘A’, ‘B’}

char[] c3 = Arrays.copyOfRange(a, 2, 5); // c = {‘C’, ‘D’, ‘E’}

System.arraycopy

Строки и массивы

import java.util.Arrays;

int[] a = new int[100];

Arrays.fill(a, 50); // [50, 50, … , 50]

Arrays.sort(a);

Arrays.sort(a, 50, 60);

int[] x = {1,2,3,4}, y = {1,2,3,4}, z = {5,6,7};

System.out.println(Arrays.equals(x, y)); // true

System.out.println(Arrays.equals(x, z)); // false

int n = Arrays.binarySearch(x, 3); // 2

String s = Arrays.toString(a);

System.out.println(s);

Строки и массивы

int[][] a = { {11, 22}, {33, 44} };

System.out.println(a[1][1]); // 44

11 33

22 44

byte[][] b = new byte[2][3];

b[1][2] = 1;

0 0 0 0

0 0 ->--->----> 0 0

0 0 0 1

Строки и массивы

int[][] n = new int[2][];

n[0] = new int[2];

n[1] = new int[3];

n[0][1] = 22;

n[1][2] = 44;

0 0

22 0

-- 44

Строки и массивы

Кодировки:

  • US-ASCII
  • ISO-8859-1
  • UTF-8
  • UTF-16BE
  • UTF-16LE
  • UTF-16

Строки и массивы

Массив из строки:

String s = “abcde”;

byte[] b1 = s.getBytes();

byte[] b2;

try {

b2 = s.getBytes(“UTF-8”);

} catch (UnsupportedEncodingException ex) {

}

Строки и массивы

Строка из массива:

byte[] b = …; //

String s1 = new String(b);

String s2 = new String(b, “utf-16”);

char[] c = {‘a’, ‘b’, ‘c’, ‘d’};

String s3 = new String(c); // “abcd”

Задача 1:

Задача 1:

  • Задать массив целых чисел длинной 10 эл.
  • Отсортировать числа в массиве
  • Вывести на экран результат.
  • Сделать возможность наполнения массива с клавиатуры*.
  • Задача 2:

  • Задать массив целых чисел длинной N эл.
  • Поменять 1-й и последний элемент местами.
  • Вывести массив на экран.
  • Задача 3:

  • Ввести с клавиатуры массив из 10 чисел.
  • Разбить его на 2 массива равной длинны.
  • Отсортировать каждую из половинок и вывести их содержимое на экран.
  • Задача 4:

  • Среднее арифметическое элементов массива.
  • Задачи на 5-ку 

  • Написать код для зеркального переворота массива (1,2,3,4) -> (4,3,2,1).
  • Написать программу, которая позволит задать длину массива с клавиатуры, наполнить его элементами, а затем выводить нужный элемент по его индексу на консоль.

Занятие 4

Ветвление и циклы

  • if/else
  • switch
  • while
  • do/while
  • for

Ветвление и циклы (if)

if (условие) {

}

if ( ! условие) {

}

if (условие) {

} else {

}

Условия перехода

Операторы:

  • && - и
  • || - или
  • ! – отрицание
  • != - не равно
  • == - равно
  • <, >, <=, >= - больше/меньше
  • if ( ( ! a) && ((b > 0) || (c == 3) || (d != 0))) {

    }

Условия перехода

Оператор ?:

short x = (a > 0) ? 1 : 22;

int y = ((a != 0) && (b > 5) && (c <= 77)) ? 0 : 1;

Ветвление и циклы (if)

int a = 1;

boolean b = a > 0;

if (b) // if (b == true)

System.out.println(“YES”);

else

System.out.println(“NO”);

Ветвление и циклы (if)

int a = 5;

if (a == 1)

System.out.println(“1”);

else if (a == 2)

System.out.println(“2”);

else

System.out.println(“> 2”);

Ветвление и циклы (if)

int x = 2;

switch (x) {

case 1:

System.out.println(“first”);

break;

case 2:

System.out.println(“second”);

break;

case 3:

System.out.println(“third”);

break;

default:

System.out.println(“otherwise”);

break;

}

Ветвление и циклы (if)

int x = 2;

if (x == 1)

System.out.println(“first”);

else if (x == 2)

System.out.println(“second”);

else if (x == 3)

System.out.println(“third”);

else

System.out.println(“otherwise”);

Ветвление и циклы (if)

String s = “hello”; // Java 7

switch (s) {

case “1234”:

System.out.println(“first”);

break;

case “hello”:

System.out.println(“second”);

break;

case “gdfggf”:

System.out.println(“third”);

break;

default:

System.out.println(“otherwise”);

break;

}

Ветвление и циклы (while)

while (условие) {

}

int n = 5;

while (n-- > 0)

System.out.println(“N = “ + n);

Ветвление и циклы (do/while)

do {

} while (условие);

int n = 5;

do {

System.out.println(“N = “ + n--);

} while (n != 0);

Ветвление и циклы (for)

for (инициализация; условие; итерация) {

}

int[] a = new int[100];

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

a[i] = i;

Ветвление и циклы (for)

int[] a = new int[100];

int[] b = new int[100];

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

a[i] = i;

b[i] = i * 2;

}

Ветвление и циклы (for)

int[] a = new int[10];

int[] b = new int[10];

for (int i = 0, j = a.length - 1; i < a.length && j >= 0; i++, j--) {

a[i] = i;

b[j] = j;

}

Ветвление и циклы (for)

import java.util.Random;

int[] a = new int[100];

Random r = new Random();

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

a[i] = r. nextInt();

int sum = 0; // long

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

if (a[i] > 5)

sum += a[i];

}

System.out.println(“Сумма = “ + sum);

Ветвление и циклы

int a = 0;

while (true) {

a++;

if (a == 5)

break; //!!!

}

for (int i = 0; i < 100; i++) {

if (i == 10)

continue; // !!!

System.out.println(i);

}

Ветвление и циклы

for-each:

long[] a = {1,2,3,4,6};

for (long x : a)

System.out.println(x);

String[] b = {“111”, “222”, “333”};

for (String s : b)

System.out.println(s);

Контрольный вопрос 

int a = 5, b =7, c = 13;

if ((a <= b) && ((b > 0) && ((c < 10) || (c != 12))))

System.out.println(“YES”);

else

System.out.println(“NO”);

if ((a > c) || (b > c) || (c – a >= 1 + b))

System.out.println(“YES”);

else

System.out.println(“NO”);

Задачи

int[] x = new int[28];

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

x[i] = i * 635;

}

Вывести на экран 0-й, 14-й и 27-й элементы массива.

Задачи

  • Вывести на экран числа от 10 до 20 с помощью всех известных циклов.
  • Вывести на экран все числа от 1 до 100, которые делятся на 3 без остатка.
  • Заполнить массив числами от 100 до 0.
  • Дано массив из 10 целых чисел. Вывести на экран сумму всех его элементов кроме первого и последнего.
  • * Написать игру «Крестики нолики» используя двухмерные массивы.

Задания

6. Найти в массиве чисел элементы с наибольшим и наименьшим значениями.

7. Найти в массиве число, которое повторяется наибольшее количество раз. Не использовать коллекции.

8*. С помощью консоли пользователь вводит математическое выражение типа “1+33-4*7”. Написать программу для подсчета его значения. Приоритет операций не учитывается.

Задачи

9. Написать метод для зеркального переворота элементов в массиве ([1, 2, 3, 4] -> [4, 3, 2, 1]).

10. Написать метод, который заполнит массив произвольного размера числами по возрастанию, начиная с центра массива, например, [5,4,3,2,1,0,1,2,3,4,5].

Задачи

for (int i = 3; i < 100; i += 3)

System.out.println(i);

Задачи

private static void task1(int[] a) {

final int len = a.length;

int t;

for (int i = 0; i < len / 2; i++) {

t = a[i];

a[i] = a[len - i - 1];

a[len - i - 1] = t;

}

}

Задачи

private static void task2(int[] a) {

final int len = a.length;

int n = (len % 2 == 0) ? 1 : 0;

for (int i = len / 2; i < len; i++)

a[i] = a[a.length - i - 1] = n++;

// a[i] = n; a[a.length – i – 1] = n++;

}

Задания

private static void task6(int[] a) {

int min, max;

min = max = a[0];

for (int i = 1; i < a.length; i++) {

if (a[i] > max)

max = a[i];

if (a[i] < min)

min = a[i];

}

System.out.println(min + " / " + max);

}

[6, 4, 7, 1, 2]

Задания

private static int task7(int[] a) {

int res = 0, cc, cp = 0;

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

cc = 0;

for (int j = 0; j < a.length; j++) {

if (a[j] == a[i])

cc++;

}

if (cc > cp) {

cp = cc;

res = a[i];

}

} // for

System.out.println(res);

return res;

}

[1, 2, 2, 2, 3, 3]

Основы ООП

Задача про калькулятор для самостоятельного разбора: http://bit.ly/1fWMEiB

(Calcpp.zip)

Занятие 4

Отладка программ

Отладка — этап разработки программы, на котором обнаруживают, локализуют и устраняют ошибки.

Чтобы понять, где возникла ошибка, приходится :

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

Технологии отладки

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

Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода (trace код) — на экран или в файл. Вывод отладочных сведений в файл называется журналированием.

Отладка программ

Пройтись отладчиком по следующим примерам кода.

Отладка программ

int[] x = new int[14];

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

if ((i * 444) % 17 > 0)

x[i] = i;

else

x[i] = -1;

}

Проследить за выполнением программы в debugger.

Assert

Добавить опцию –ea в командную строку при запуске программы.

int x = 10;

assert x == 10;

assert x == 11; // java.lang.AssertionError

assert x == 12 : x; // java.lang.AssertionError: 10

Методы

Метод — это именованный обособленный блок кода. 

Методы

Методы используются в программировании, чтобы уменьшить его сложность:

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

Методы

Процедуры:

public class MyClass {

static void doJob(String s) {

for (int i = 0; i < 10; i++)

System.out.println(s + “:” + i);

}

public static void main(String[] args) {

doJob(“hello1”);

doJob(“hello2”);

}

}

Методы

  • Примитивные типы передаются по значению (int, long etc.)
  • Ссылки на объекты передаются по значению (объекты передаются по ссылке).

import java.util.*;

import java.util.*;

public class MyClass {

static void doJob(int x) { // копирование аргумента

x = x + 60;

}

static void doJob(int[] a) {

a[0] = 777;

}

public static void main(String[] args) {

int x = 1;

System.out.println(“x1 =“ + x); // 1

doJob(x);

System.out.println(“x2 =“ + x); // 1

int[] a = new int[] {1, 2, 3};

doJob(a);

System.out.println(Arrays.toString(a)); // [777, 2, 3]

}

}

Методы

Функции:

public class MyClass {

public static void main(String[] args) {

double[] x = {1.2, 1.3, 1.5, 6, 8};

System.out.println(“Result: “ + calc(x));

}

static double calc(double[] n) { // среднее арифметическое

double sum = 0;

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

sum += n[i];

return sum / n.length;

}

}

Функции:

Функции:

public class MyClass {

static int add(int x, int y) {

return x + y;

}

static int add(int … n) { // тоже самое, что … int add(int[] n)

int sum = 0;

for (int x : n)

sum += x;

return sum;

}

public static void main(String[] args) {

int r = add(1, 5);

System.out.println(“Result: “ + r);

r = add(1, 2, 3, 4);

System.out.println(“Result: “ + r);

System.out.println(“Result: “ + add(1, 5) + “, “ + add(1, 2, 3, 4));

}

}

public class MyClass {

static void method1() {

System.out.println(“method1”);

method2(100);

}

static void method2(int x) {

System.out.println(“method2 ” + x);

method3(x);

}

static void method3(int x) {

System.out.println(“method3 ” + x);

// method1(); // бесконечный цикл!

}

public static void main(String[] args) {

method1();

}

}

Методы

Передача массива в метод:

static void method(int[] param) {

}

int[] a = {1,2,3,4};

method(a);

// или

method(new int[] {1, 2, 3, 4} );

Задачи

  • Написать функцию, которая принимает в качестве аргументов одну строку X, целое число Y и число с плавающей точкой Z и возвращает как результат строку в виде
  • S = x + y + z.

  • Написать функцию, которая принимает массив чисел в качестве аргумента, увеличивает его первые 3 элемента на 1 и возвращает их сумму как результат. После изменения массив и сумму надо вывести на экран.
  • Написать ф-ю, которая принимает на вход массив чисел и возвращает его длину в байтах как результат.
  • Написать ф-ю для объединения 2-х массивов в один. Вывести результат на консоль.

Задачи

public class MyClass {   private static int sizeof(byte[] a) {     return a.length;   }   private static int sizeof(int[] a) {     return a.length * 4;   }   public static void main(String[] args) {       byte[] a1 = {1, 2, 3};       int[] a2 = {1, 2, 3, 4};       System.out.println(sizeof(a1) + ", " + sizeof(a2));   } }

Занятие 6

Дата и время

Скорость работы кода

Дата и время

Дата и время

Дата и время

StringBuilder

String str1 = “1”, str2 = “2”, str3 = “3”, str4 = “4”;

String res = str1 + str2 + str3 + str4; // не эффективно!

// тоже самое, что

String t1 = str1 + str2; // GC

String t2 = t1 + str3; // GC

String res = t2 + str4;

StringBuilder

Math

BigInteger

Format

Format

Побитовые операции

Побитовые операции

Сортировка (пузырьковая)

Задачи

  • Ввести с консоли дату. Сравнить ее с текущей датой в системе. Вывести отличающиеся части (год, месяц) на экран.
  • Написать свой вариант ф-и Arrays.equals для short[].
  • Написать свой вариант ф-и Arrays.toString() для int[].
  • Написать код, который позволит менять и читать значения произвольных битов в массиве int-ов.
  • Ввести с консоли число в бинарном формате. Перевести его в int и вывести на экран (“10” -> 2).
  • Ввести с консоли целое число. Посчитать количество единиц в его бинарном представлении (“1011” –> 3).

Решения

Решения

Решения

Занятие 7

Тестирование

1.

public static int getRes(int x, int y) {

if ((x == 7) || (y > x))

return x * y;

else if (y – x > 3*3)

return y – x;

else

return x / y;

}

public static void doJob() {

final int r = getRes(7, 1);

System.out.println(“Result = “ + r);

// Что будет выведено на экран?

}

Тестирование

2. Что будет выведено на экран?

public final void doJob() {

double x = 3;

System.out.println(“Result=“ + “x”);

System.out.println(“Result=“ + x);

}

3. Что будет выведено на экран?

public final void doJob() {

long x = 1;

double y = 2;

System.out.println(“Result=“ + (x + y));

}

Тестирование

4.

public void A() {

int[] a = new int[100];

a[0] = 2;

for (int j = 1; j < a.length; j++)

a[j] = a[j – 1] + 1;

}

Первые 6 чисел массива - ?

Тестирование

5.

public static void main(String[] args) {

int[] a = new int[50];

Arrays.fill(a, 3);

for (int j = 1; j < a.length; j++)

a[j] = a[j – 1] + 0x10;

}

Первые 3 числа массива - ?

Тестирование

6.

public static void main(String[] a) {

int n = 2;

while (n++ < 10)

n += 2;

System.out.println(n); // какое будет значение n?

}

Тестирование

7.

public static int calc(int x) {

int xx = x;

do {

xx *= 55;

} while (xx < 6);

return x;

}

public static void main(String[] args) {

int r = calc(3);

System.out.println(r); // что будет выведено на экран?

}

Тестирование

8.

public static void test(int[] x) {

x[0] = x[1] = x[2] = 7;

x[3]++;

}

public static void main(String[] args) {

final int[] x = {1,2,3,4,5,6};

test(x); test(x); test(x);

System.out.println(Arrays.toString(x));

// что будет выведено на экран?

}

Тестирование

9. Найти ошибку:

public void aaabbb() {

int x;

for (x = 7; x < 66; ++x);

System.out.println(x);

}

10. Найти ошибки:

public int xxxx(int x; int y) {

int x = x + y;

return x;

}

Тестирование

11.

public static void main(String[] args) {

int y = 8; int z = 7;

if ((y == z) || ((z – y == 1) && (z / y > 0)))

System.out.println(“YES”);

else

System.out.println(“NO”); // на экране - ?

}

12.

public static void main(String[] args) {

String s = “abcdefghijk”;

System.out.println(s.substring(4) + s.substring(0, 2)); // на экране - ?

}

Тестирование

13.

byte[] a = {1,2,3,4,5,6,7,8,9,10,11};

byte[] b = new byte[a.length/2];

System.arraycopy(a, 5, b, 1, 2);

System.out.println(Arrays.toString(b)); // На экране?

Тестирование

14.

int[] a = new int[] {1,1,1};

a[a[a[0]++]] = 7;

a[a[0]--] = 8;

a[++a[0]] = 9;

System.out.println(Arrays.toString(a)); // ???

Тестирование

15.

StringBuilder sb = new StringBuilder(10);

sb.append(‘A’).append(‘b’).append(“777”);

sb.deleteCharAt(1);

System.out.println(sb.toString() + 1); // ???

Тестирование

16. Что будет выведенно на экран? (4 ‘ktv/)

for (int i = 0, j = 1; i < 10; i++, j++)

System.out.print(i + j);

17.

String s = “aaaa”;

System.out.println(s.replace(“b”, “a”));

Тестирование

18. Вывод:

int x = 01; int y = 02;

System.out.println((x << 1) + (y >> 1));

19. r = ?

int i = 1;

String r = "";

String s = "abcd!ert";

while (s.charAt(i) != '!') r+=s.charAt(i++);

System.out.println(r);

Тестирование

20. На консоли?

String s = "one two three";

String[] a = s.split(" ");

System.out.println(a[1]); // ???

21. На консоли?

char[] a = "abcdefghijk".toCharArray();

for (char c : a)

System.out.print((c > 'e') ? c : 'a');

Тестирование

22. На консоли?

int u = 13;

u += 2; u %= 4;

u >>= 1; u = ~u;

System.out.println(u);

Тестирование

23.

long n = 3;

do {

n = (n * n) % 135;

} while (n < 27);

System.out.println(n);

Тестирование

24.

for (int i = 0; i < 4; i++) {

if ((i & 1) > 0)

System.out.print("+");

else

System.out.print("-");

}

Тестирование

25.

String s = " 1234%d89%d0 ";

s = String.format(s, 0, 1).replace('1', 'Z').trim().toLowerCase();

System.out.println(s);

Тестирование

26.

byte[] b = {3, 3, 3, 3, 3, 3};

for (int k = 1; k < b.length - 1; k++)

b[k] = (byte)(b[k - 1] + b[k + 1]);

System.out.println(Arrays.toString(b));

Тестирование

27.

public class Main {

static int do1(int a) {

int b = a;

a = b;

b = a;

return b;

}

static int do2(int a) {

int b = a;

b *= b;

return do1(b);

}

public static void main(String[] args) {

System.out.println(do2(5)); // ???????????????

}

}

Тестирование

28.

int[] a = {11, 77};

int x = 7;

int y = x + 5 > 1 ? (x + 7 != 14 ? x : 7) : 7;

System.out.println(a[y % 2]); // ???

Тестирование

29.

double d = 0.5;

d = Math.pow(d, 2);

String res = d + d > 0.45 ? "yes" : "no";

System.out.println(res.length()); // ???

Тестирование

30.

int c = 1, d = -6, e = 0;

switch (c) {

case 5:

c = 8;

break;

case 7:

c = 9;

break;

default:

c = 11;

}

if ((c + d == e) || (e + c == d) || ((e = 1) > 0))

System.out.println("yo!");

else

System.out.println("no!");0

Задачи

  • Дано текст из 3-х слов “word1 word2 word3”. Поменять 1-е и 3-е слова местами и вывести на экран результат.
  • Дано текст и определенное слово. Посчитать сколько раз заданное слово встречается в тексте.0 1 и много
  • Дано 3 массива чисел. С помощью 1-2-х циклов найти сумму элементов во всех массивах.
  • Дано текст. Убрать лишние пробелы, расставить знаки препинания. Пример: «Я длинное предложение Я второе предложение.» -> «Я длинное предложение. Я второе предложение.»

Решения

Решения

Решения

Решения

Занятие 8

Практика

Задачи

  • Вывести на экран все буквы английского алфавита.
  • Проверить баланс круглых скобок в выражении. Пример: “((x – 8)+a(y – 1))”.
  • Дан словарь в виде «англ. слово=русское слово, англ. слово=русское слово,…». Написать программу переводчик на основе словаря.
  • Вывести на экран сумму цифр заданного числа.
  • Вычислить x^n.
  • Вывести на экран все простые числа, которые меньше заданного N.
  • Написать программу для решения квадратных уравнений. *

1

2

3

4

5

6

если остается время…

Практика

Практика

  • Найти все уникальные (не повторяющиеся) элементы массива.
  • Построить таблицу значений ф-и на отрезке [-1; 0.75].
  • Найти в предложении самое короткое и самое длинное слово.
  • Написать аналог String.replace().
  • Написать аналог String.indexOf().

Практика

6. Реализовать аналог String.substring().

7. Реализовать аналог String.trim и trimLeft/trimRight.

8. Реализовать аналог Integer.parseInt.

9. Вывести на экран таблицу умножения.

10. Дано два числа short1 и short2. Сделать из них один int методом конкатенации с помощью побитовых операций.

11. Дано два массива одинаковой длинны, упорядоченных по возрастанию. Объединить массивы так, чтобы получился один упорядоченный массив. Пример: {1, 3, 10} + {2, 5, 8} = {1, 2, 3, 5, 8, 10}.

Задача 1

Задача 2

Задача 3

Задача 5

Задача 6

Задача 7

Задача 8