Начальный курс 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