• Авторизация


java_1 18-03-2019 18:39 к комментариям - к полной версии - понравилось!


Пн 18 мар 2019 17:59:04

java console linux without IDE

https://habr.com/en/post/212707/

vladimirice February 15, 2014 at 01:40 PM

Вопросы и задания для русскоязычной книги Thinking in Java (Философия Java) Брюса Эккеля

Thinking in Java 2 nd edition
Revision 3 лучше второе. После сравню с 4 ( в 4_м нет примеров ).

Есть еще такая вещь, как «Annotated Solution Guide for Thinking in Java», где сам же автор и разбирает все задачи. В том числе — и для четвертого издания.

https://dou.ua/forums/topic/7906/

Thinking in Java, 4th Edition (полная версия)

Всем добрый день,
Задался вопросом: есть ли где-то эта книга на русском языке и в полном обьеме?
Потому что из моих сравнений оригинальной и русской версии — последняя не полная и даже попадаются ошибки. Спасибо!

P.S. знаю что лучше читать на английском, но все же:)

Именно. Для технических книг редко существует стопиццот разных переводов.

Нет ее в полном объёме на русском, т.е. как перевел «Питер» с потерями, так и есть. Читай оригинал

то не «потери», а просто перевод первой редакции. 4е издание выходило в нескольких редакциях, первая — как-раз то, где на ~400 стр меньше чем в

3-ей... в общем, ту самую 3ю редакцию и на нэйтиве найти очень сложно. Первое издание вот этим дополнить можете «Annotated Solution Guide for Thinking in Java» это просто решебник так сказать

А вообще, по актуальной жабе вот эти рулят:
1. Core Java
— www.amazon.com/...s/dp/0137081898
— www.amazon.com/...s/dp/013708160X
2. Java The Complete Reference 9/E

https://habr.com/en/post/212707/  И по ссылке разбор ошибок в переводе этой книги.

Советуют так : Для начала прочитайте бессмертную книгу "Thinking in Java".
Потом сходите на собеседования в пару компаний, там все и узнаете. Честно предупреждайте, что хотите работать Java junior, Вам все должны будут рассказать. Просто прочитать и сходить. Не верю в это.

Но я начну с консоли линукса.

Код выглядит так :

//Листинг 2.1. Программа array.java
// array.java
// Работа с массивами Java
// Запуск программы: C>java arrayApp
////////////////////////////////////////////////////////////////
class ArrayApp
{
public static void main(String[] args)
{
long[] arr;
// Ссылка на массив
Листинг 2.1 (продолжение)
arr = new long[100];
// Создание массива
int nElems = 0;
// Количество элементов
int j;
// Счетчик цикла
long searchKey;
// Ключи искомого элемента
//--------------------------------------------------------------
arr[0] = 77;
// Вставка 10 элементов
arr[1] = 99;
arr[2] = 44;
arr[3] = 55;
arr[4] = 22;
arr[5] = 88;
arr[6] = 11;
arr[7] = 00;
arr[8] = 66;
arr[9] = 33;
nElems = 10;
// Массив содержит 10 элементов
//--------------------------------------------------------------
for(j=0; j<nElems; j++)
// Вывод элементов
System.out.print(arr[j] + " ");
System.out.println("");
//--------------------------------------------------------------
searchKey = 66;
// Поиск элемента с ключом 66
for(j=0; j<nElems; j++)
// Для каждого элемента
if(arr[j] == searchKey)
// Значение найдено?
break;
// Да - выход из цикла
if(j == nElems)
// Достигнут последний элемент?
System.out.println("Can't find " + searchKey); // Да Пн 18 мар 2019 16:03:27
else
System.out.println("Found " + searchKey);
// Нет
//--------------------------------------------------------------
searchKey = 55;
// Удаление элемента с ключом 55
for(j=0; j<nElems; j++)
// Поиск удаляемого элемента
if(arr[j] == searchKey)
break;
for(int k=j; k<nElems-1; k++)
// Сдвиг последующих элементов
arr[k] = arr[k+1];
nElems--;
// Уменьшение размера
//--------------------------------------------------------------
for(j=0; j<nElems; j++)
// Вывод элементов
System.out.print( arr[j] + " ");
System.out.println("");
}
}
// Конец класса ArrayApp
/*Программа создает массив с именем arr , помещает в него 10 элементов данных
(номера игроков), ищет элемент с ключом 66, выводит все элементы, удаляет игро-
ка с ключом 55 и выводит оставшиеся 9 элементов. Результат работы программы
выглядит так:Поддержка массивов в Java  
55

77 99 44 55 22 88 11 0 66 33
Found 66
77 99 44 22 88 11 0 66 33 */

У меня в блокноте всё красиво раскрашено. ( настройки его несложные ).

Кстати ошибок нет. Мною проверено сегодня Пн 18 мар 2019 18:35:49 И календарь даже раскрашен. И зачем ?

Проверяем что установлено на моём компьютере

$ java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
alex@alex:~/Emacsjava/Reese/chapter2_1/bin$

Всё.

Так как есть ещё время и силы рассмотрю дальше проект уже с 4 файлами, тоже массив.

Предыдущий был в процедурном стиле, а следующий в объектно-ориентированном. В чем разница ?

Холивары на эту тему ведутся всё время.

http://artanovy.com/2011/03/procedurnoe-protiv-obyektno-orientirovannogo/

Процедурное против объектно-ориентированного?

https://www.internet-technologies.ru/articles/chetyre-principa-obektno-orientirovannogo-programmirovaniya-v-java.html

Эта статья станет шпаргалкой по четырем основам ООП (инкапсуляции, наследованию, полиморфизму и абстракции).

Но это не религия, немало программистов работают с классами не ведая об этих четырех классах ни ухом, ни рылом.

Да, а вот здесь уже 7 основ. http://codengineering.ru/post/21 Кто-то называет это прозрением.

А кто-то вставляет палки в колёса.

Avatar
Виталий Гордиенко 2 years ago

ArrayList figures = new ArrayList(); - правильно будет в данном случае List<point> figures = new ArrayList<>();
ArrayList - Это специальная структура данных в java, позволяющая хранить объекты определенного типа в массиве. - неверное утверждение. Правильно будет в данном случае: ArrayList - это одна из реализаций интерфейса List(список) за основу которой берётся обычный массив.
/**
* Пустой конструктор
*/
Point() {}
Пустой конструктор будет создан по умолчанию, не нужно им захламлять код.

P.S. Почему-то имя класса Point приводится к нижнем регистру автоматом в комментарии.

Кстати https://hyyudu.livejournal.com/225543.html Объектно-ориентированное программирование (ООП) - одна из парадигм, моделей написания программ. Их вообще есть еще несколько - функциональное, логическое, императивное ака процедурное и т.д. Если захотите - в Випипедии найдете. Наш же рассказ пойдет в особенности про хоббитов. Точнее, про объекты.

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

Вт 19 мар 2019 17:40:12

//Листинг 2.5. Программа classDataArray.java
// classDataArray.java
// Объекты как элементы данных
// Запуск программы: C> java ClassDataApp
////////////////////////////////////////////////////////////////
class Person
{
private String lastName;
private String firstName;
private int age;
//--------------------------------------------------------------
public Person(String last, String first, int a)
{
// Конструктор
lastName = last;
firstName = first;
age = a;
}
//--------------------------------------------------------------
public void displayPerson()
{
System.out.print("Last name:" + lastName);
System.out.print(", First name: " + firstName);
System.out.println(", Age: " + age);
}
//--------------------------------------------------------------
public String getLast()
// Получение фамилии
{ return lastName; }
} // Конец класса PersonХранение объектов  
// page 77
////////////////////////////////////////////////////////////////
class ClassDataArray
{
private Person[] a;
// Ссылка на массив
private int nElems;
// Количество элементов данных
public ClassDataArray(int max)
// Конструктор
{
a = new Person[max];
// Создание массива
nElems = 0;
// Пока нет ни одного элемента
}
//--------------------------------------------------------------
public Person find(String searchName)
{
// Поиск заданного значения
int j;
for(j=0; j<nElems; j++)
// Для каждого элемента
if( a[j].getLast().equals(searchName) ) // Значение найдено?
break;
// Выход из цикла
if(j == nElems)
// Достигнут последний элемент?
return null;
// Да, значение не найдено
else
return a[j];
// Нет, значение найдено
} // end find()
//-------------------------------------------------------------
// Включение записи в массив
public void insert(String last, String first, int age)
{
a[nElems] = new Person(last, first, age);
nElems++;
// Увеличение размера
}
//--------------------------------------------------------------
public boolean delete(String searchName)
{
// Удаление из массива
int j;
for(j=0; j<nElems; j++)
// Поиск удаляемого элемента
if( a[j].getLast().equals(searchName) )
break;
if(j==nElems)
// Найти не удалось
return false;
else
// Значение найдено
{
for(int k=j; k<nElems; k++)
// Сдвиг последующих элементов
a[k] = a[k+1];
nElems--;
// Уменьшение размера
return true;
}
}
//продолжение 78   Глава 2. Массивы
//Листинг 2.5 (продолжение)
//--------------------------------------------------------------
public void displayA()
// Вывод содержимого массива
{
for(int j=0; j<nElems; j++)
// Для каждого элемента
a[j].displayPerson();
// Вывод
}
//--------------------------------------------------------------
} // Конец класса ClassDataArray
////////////////////////////////////////////////////////////////
class ClassDataApp
{
public static void main(String[] args)
{
int maxSize = 100;
// Размер массива
ClassDataArray arr;
// Ссылка на массив
arr = new ClassDataArray(maxSize); // Создание массива
// Вставка 10 элементов
arr.insert("Evans", "Patty", 24);
arr.insert("Smith", "Lorraine", 37);
arr.insert("Yee", "Tom", 43);
arr.insert("Adams", "Henry", 63);
arr.insert("Hashimoto", "Sato", 21);
arr.insert("Stimson", "Henry", 29);
arr.insert("Velasquez", "Jose", 72);
arr.insert("Lamarque", "Henry", 54);
arr.insert("Vang", "Minh", 22);
arr.insert("Creswell", "Lucinda", 18);
arr.displayA();
// Вывод содержимого
String searchKey = "Stimson"; // Поиск элемента
Person found;
found=arr.find(searchKey);
if (found != null)
{
System.out.print("Found ");
found.displayPerson();
}
else
System.out.println("Can't find " + searchKey);
System.out.println("Deleting Smith, Yee, and Creswell");
arr.delete("Smith");
// Удаление трех элементов
arr.delete("Yee");
arr.delete("Creswell");
arr.displayA();
// Повторный вывод содержимого
}
} // Конец класса ClassDataApp
////////////////////////////////////////////////////////////////
/*page 79 Класс Person Lafore 2013
Результат выполнения программы:
Last name: Evans, First name: Patty, Age: 24
Last name: Smith, First name: Lorraine, Age: 37
Last name: Yee, First name: Tom, Age: 43
Last name: Adams, First name: Henry, Age: 63
Last name: Hashimoto, First name: Sato, Age: 21
Last name: Stimson, First name: Henry, Age: 29
Last name: Velasquez, First name: Jose, Age: 72
Last name: Lamarque, First name: Henry, Age: 54
Last name: Vang, First name: Minh, Age: 22
Last name: Creswell, First name: Lucinda, Age: 18
Found
Last name: Stimson, First name: Henry, Age: 29
Deleting Smith, Yee, and Creswell
Last name: Evans, First name: Patty, Age: 24
Last name: Adams, First name: Henry, Age: 63
Last name: Hashimoto, First name: Sato, Age: 21
Last name: Stimson, First name: Henry, Age: 29
Last name: Velasquez, First name: Jose, Age: 72
Last name: Lamarque, First name: Henry, Age: 54
Last name: Vang, First name: Minh, Age: 22
Программа classDataArray.java наглядно показывает, что структуры данных
могут использоваться не только для хранения примитивных типов, но и объектов
классов. (Обратите внимание: реальная программа, использующая фамилию в ка-
честве ключа, должна принять во внимание возможность дублирования фамилий —
как упоминалось ранее, это несколько усложнит программирование.)
O-синтаксис
В США автомобили делятся в зависимости от размера на несколько категорий:
субкомпакты, компакты, среднеразмерные и т. д. Эти категории позволяют по-
лучить общее представление о габаритах автомобиля без указания конкретных
размеров. Подобная система приблизительных обозначений существует и для
описания эффективности компьютерных алгоритмов. В информатике она назы-
вается «O-синтаксисом».
На первый взгляд может показаться, что сравнение алгоритмов должно бази-
роваться на оценках вида «Алгоритм А работает вдвое быстрее алгоритма Б», но
в действительности такие утверждения не имеют особого смысла. Почему? Потому
что пропорции могут кардинально изменяться при изменении количества элемен-
тов. Допустим, при увеличении количества элементов на 50% алгоритм А начинает
работать втрое быстрее алгоритма Б, а при половинном количестве элементов
алгоритмы А и Б сравниваются по скорости. Критерий сравнения (сложность ал­
горитма) должен связывать скорость алгоритма с количеством элементов. Давайте
проанализируем эту связь для алгоритмов, рассмотренных ранее.
Специальный выпуск для Лены.
O-синтаксис  Page 83
*/

Какой вывод, не углубляясь в объяснение на примерах ( Дом, Машина, Животные и т. д. )эти примеры не помогают. А вот здесь видно что, для начала при сравнении двух файлов. Из них первый без классов, а

второй с классами. Во второй программе мы видим слова классы ( classes ), а в первой нет.

В этой папке даем команду : $ javac classDataArray.java

В той папке где лежит один java файл, classDataArray.java появятся ClassDataApp.class , ClassDataApp.class,

Person.class ( то есть три файла с расширением .class ) Readmy я создаю сам для комментария. В этой же папке

выполняем программу с помощью $ java ClassDataApp

и видим результат :

alex@alex:~/Emacsjava/Reese/Listing_2_5$ java ClassDataApp
Last name:Evans, First name: Patty, Age: 24
Last name:Smith, First name: Lorraine, Age: 37
Last name:Yee, First name: Tom, Age: 43
Last name:Adams, First name: Henry, Age: 63
Last name:Hashimoto, First name: Sato, Age: 21
Last name:Stimson, First name: Henry, Age: 29
Last name:Velasquez, First name: Jose, Age: 72
Last name:Lamarque, First name: Henry, Age: 54
Last name:Vang, First name: Minh, Age: 22
Last name:Creswell, First name: Lucinda, Age: 18
Found Last name:Stimson, First name: Henry, Age: 29
Deleting Smith, Yee, and Creswell
Last name:Evans, First name: Patty, Age: 24
Last name:Adams, First name: Henry, Age: 63
Last name:Hashimoto, First name: Sato, Age: 21
Last name:Stimson, First name: Henry, Age: 29
Last name:Velasquez, First name: Jose, Age: 72
Last name:Lamarque, First name: Henry, Age: 54
Last name:Vang, First name: Minh, Age: 22
alex@alex:~/Emacsjava/Reese/Listing_2_5$

Результат отличается от результата в первой программе. Неплохо, но не это главное.

При необходимости можно в пределах класса менять что-то.  Проще, чем в первом файле.

И ещё одна сегодня, тоже с одним файлом и несколькими классами

Только что выполнилась.

//554   Глава 12. Пирамиды
/*Размер массива
Размер массива (количество узлов в пирамиде) — важнейший атрибут состояния
пирамиды и необходимое поле класса Heap . Узлы, скопированные из последней
ячейки, не стираются, поэтому алгоритм может определить положение последней
занятой ячейки только по текущему размеру массива.
Программа heap.java
В программе heap.java (листинг 12.1) используется класс Node . Единственным по-
лем этого класса является переменная iData , в которой хранится ключ узла. Есте-
ственно, в реальной программе этот класс содержал бы много других полей. Класс
Heap содержит методы, упомянутые выше, а также методы isEmpty() и displayHeap() .
Последний метод выводит примитивное, но наглядное символьное представление
содержимого пирамиды.
Листинг 12.1. Программа heap.java
*/
// heap.java
// Работа с пирамидой
// Запуск программы: C>java HeapApp
import java.io.*;
////////////////////////////////////////////////////////////////
class Node
{
private int iData;
// Данные (ключ)
// -------------------------------------------------------------
public Node(int key)
// Конструктор
{ iData = key; }
// -------------------------------------------------------------
public int getKey()
{ return iData; }
// -------------------------------------------------------------
public void setKey(int id)
{ iData = id; }
// -------------------------------------------------------------
} // Конец класса Node
////////////////////////////////////////////////////////////////
class Heap
{
private Node[] heapArray;
private int maxSize;
// Размер массива
private int currentSize;
// Количество узлов в массиве
// -------------------------------------------------------------
public Heap(int mx)

    // Конструктор

{

    maxSize = mx;

currentSize = 0;

// Реализация пирамиды на языке Java  
//
//
//
//
//
//   page 555
heapArray = new Node[maxSize];
// Создание массива
}
// -------------------------------------------------------------
public boolean isEmpty()
{ return currentSize==0; }
// -------------------------------------------------------------
public boolean insert(int key)
{
if(currentSize==maxSize)
return false;
Node newNode = new Node(key);
heapArray[currentSize] = newNode;
trickleUp(currentSize++);
return true;
}
// -------------------------------------------------------------
public void trickleUp(int index)
{
int parent = (index-1) / 2;
Node bottom = heapArray[index];
while( index > 0 &&
heapArray[parent].getKey() < bottom.getKey() )
{
heapArray[index] = heapArray[parent]; // Узел смещается вниз
index = parent;
parent = (parent-1) / 2;
}
heapArray[index] = bottom;
}
// -------------------------------------------------------------
public Node remove()
// Удаление элемента с наибольшим ключом
{
// (Предполагается, что список не пуст)
Node root = heapArray[0];
heapArray[0] = heapArray[--currentSize];
trickleDown(0);
return root;
}
//-------------------------------------------------------------
public void trickleDown(int index)
{
int largerChild;
Node top = heapArray[index];
// Сохранение корня
while(index < currentSize/2)
// Пока у узла имеется
{
// хотя бы один потомок
int leftChild = 2*index+1;
int rightChild = leftChild+1;
// Определение большего потомка
if(rightChild < currentSize && // (Правый потомок существует?)
heapArray[leftChild].getKey() <
// продолжение 556   Глава 12. Пирамиды
// Листинг 12.1 (продолжение)
heapArray[rightChild].getKey())
largerChild = rightChild;
else
largerChild = leftChild;
// top >= largerChild?
if( top.getKey() >= heapArray[largerChild].getKey() )
break;
// Потомок сдвигается вверх
heapArray[index] = heapArray[largerChild];
index = largerChild;
// Переход вниз
}
heapArray[index] = top;
// index <- корень
}
// -------------------------------------------------------------
public boolean change(int index, int newValue)
{
if(index<0 || index>=currentSize)
return false;
int oldValue = heapArray[index].getKey(); // Сохранение старого ключа
heapArray[index].setKey(newValue); // Присваивание нового ключа
if(oldValue < newValue)
// Если узел повышается,
trickleUp(index);
// выполняется смещение вверх.
else
// Если узел понижается,
trickleDown(index);
// выполняется смещение вниз.
return true;
}
// -------------------------------------------------------------
public void displayHeap()
{
System.out.print("heapArray: ");
// Формат массива
for(int m=0; m<currentSize; m++)
if(heapArray[m] != null)
System.out.print( heapArray[m].getKey() + " ");
else
System.out.print( "-- ");
System.out.println();
// Формат пирамиды
int nBlanks = 32;
int itemsPerRow = 1;
int column = 0;
int j = 0;
// Текущий элемент
String dots = "...............................";
System.out.println(dots+dots);
// Верхний пунктир
while(currentSize > 0)
{
if(column == 0)
for(int k=0; k<nBlanks; k++)
// Для каждого элемента пирамиды
// Первый элемент в строке?
// Предшествующие пробелыРеализация пирамиды на языке Java  
// 557
System.out.print("");
// Вывод элемента
System.out.print(heapArray[j].getKey());if(++j == currentSize)
// Вывод завершен?
break;
if(++column==itemsPerRow)
// Конец строки?
{
nBlanks /= 2;
// Половина пробелов
itemsPerRow *= 2;
// Вдвое больше элементов
column = 0;
// Начать заново
System.out.println();
// Переход на новую строку
}
else
// Следующий элемент в строке
for(int k=0; k<nBlanks*2-2; k++)

//System.out.print(‘ ‘);
//Здесь ошибка, я просто переписал строку в консоли (видно, что ' ' разные)
System.out.print(' ');
// Внутренние пробелы
}
System.out.println("\n"+dots+dots);
 // Нижний пунктир
}
// -------------------------------------------------------------
}
// Конец класса Heap
////////////////////////////////////////////////////////////////
class HeapApp
{
public static void main(String[] args) throws IOException
{
int value, value2;
Heap theHeap = new Heap(31); // Создание пирамиды с максимальным
boolean success;
// размером 31
theHeap.insert(70);
theHeap.insert(40);
theHeap.insert(50);
theHeap.insert(20);
theHeap.insert(60);
theHeap.insert(100);
theHeap.insert(80);
theHeap.insert(30);
theHeap.insert(10);
theHeap.insert(90);
// Вставка 10 items
while(true)
// Пока пользователь не нажмет Ctrl+C
{
System.out.print("Enter first letter of ");
System.out.print("show, insert, remove, change: ");
int choice = getChar();
switch(choice)
{
case 's':
// Вывод
// продолжение 558   Глава 12. Пирамиды
// Листинг 12.1 (продолжение)
theHeap.displayHeap();
break;
case 'i':
// Вставка
System.out.print("Enter value to insert: ");
value = getInt();
success = theHeap.insert(value);
if( !success )
System.out.println("Can’t insert; heap full");
break;
case 'r':
// Удаление
if( !theHeap.isEmpty() )
theHeap.remove();
else
System.out.println("Can’t remove; heap empty");
break;
case 'c':
// Изменение приоритета
System.out.print("Enter current index of item: ");
value = getInt();
System.out.print("Enter new key: ");
value2 = getInt();
success = theHeap.change(value, value2);
if( !success )
System.out.println("Invalid index");
break;
default:
System.out.println("Invalid entry\n");
}
}
}
//-------------------------------------------------------------
public static String getString() throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}
//-------------------------------------------------------------
public static char getChar() throws IOException
{
String s = getString();
return s.charAt(0);
}
//-------------------------------------------------------------
public static int getInt() throws IOException
{
String s = getString();
return Integer.parseInt(s);
// Реализация пирамиды на языке Java  
// page 559
}
 //-------------------------------------------------------------
}
// Конец класса HeapApp
////////////////////////////////////////////////////////////////
/*
В массиве корень пирамиды размещается в ячейке с индексом 0. Некоторые
реализации пирамиды размещают корень в ячейке 1, а ячейка 0 используется в ка-
честве «сторожа» с наибольшим возможным ключом. Такое решение немного уско-
ряет некоторые алгоритмы, но усложняет реализацию на концептуальном уровне.
Метод main() приложения HeapApp
создает пирамиду с максимальным  размером 31 (обусловленным ограничениями метода вывода) и вставляет в нее 10 узлов со
случайными ключами. Затем программа входит в цикл, в котором пользователь вводит команды s, i, r или c (соответственно вывод, вставка, удаление или изменение).
Пример взаимодействия с программой:
Enter first letter of show, insert, remove, change: s
heapArray: 100 90 80 30 60 50 70 20 10 40
..............................................................
100
90
80
30
60
50
70
20
10
40
..............................................................
Enter first letter of show, insert, remove, change: i
Enter value to insert: 53
Enter first letter of show, insert, remove, change: s
heapArray: 100 90 80 30 60 50 70 20 10 40 53
..............................................................
100
90
80
30
60
50
70
20
10
40
53
..............................................................
Enter first letter of show, insert, remove, change: r
Enter first letter of show, insert, remove, change: s
heapArray: 90 60 80 30 53 50 70 20 10 40
..............................................................
90
60
80
30
53
50
70
20
10
40
..............................................................
Enter first letter of show, insert, remove, change:
Пользователь выводит состояние пирамиды, добавляет элемент с ключом 53,
снова выводит, удаляет элемент с наибольшим ключом и выводит состояние
пирамиды в третий раз. Метод show() выводит оба представления пирамиды: как
в виде массива, так и в виде дерева. Сила воо
*/

// Выполнены те же команды, что и в предыдушей программе. Вт 19 мар 2019 20:46:21

Ср 20 мар 2019 22:15:38 

Я здесь. Алгоритмы почти никому не нужны.

https://javarush.ru/groups/posts/1997-algoritmih-sortirovki-v-teorii-i-na-praktike
    10 октября 2018 12:45
    4249просмотров
    4комментария

Алгоритмы сортировки в теории и на практике
Пост из группы Random далее отсюда ссылка на хабр ( часть 2 ).

https://habr.com/en/post/195482/
Введение в анализ сложности алгоритмов (часть 2)
https://habr.com/en/post/196560/
 AveNat
October 7, 2013 at 02:12 PM
Введение в анализ сложности алгоритмов (часть 1)
http://discrete.gr/complexity/
Многие современные программисты, пишущие классные и широко распространённые программы, имеют крайне смутное представление о теоретической информатике. Это не мешает им оставаться прекрасными творческими специалистами, и мы благодарны за то, что они создают.

Тем не менее, знание теории тоже имеет свои преимущества и может оказаться весьма полезным. В этой статье, предназначенной для программистов, которые являются хорошими практиками, но имеют слабое представление о теории, я представлю один из наиболее прагматичных программистских инструментов: нотацию «большое О» и анализ сложности алгоритмов. Как человек, который работал как в области академической науки, так и над созданием коммерческого ПО, я считаю эти инструменты по-настоящему полезными на практике. Надеюсь, что после прочтения этой статьи вы сможете применить их к собственному коду, чтобы сделать его ещё лучше. Также этот пост принесёт с собой понимание таких общих терминов, используемых теоретиками информатики, как «большое О», «асимптотическое поведение», «анализ наиболее неблагоприятного случая» и т.п.

https://pandia.ru/text/78/339/550.php
Разработка алгоритмов простейших программ

https://habr.com/en/post/260713/
Это не столько IT, сколько R&D. Преобразование Фурье, с которого и начался функциональный анализ, широко используется во многих областях исследований. Например, спектральный анализ временных рядов. Это один из статистических методов анализа данных. Статистические методы — один из инструментов СППР.
Возможно, коллеги, работающие в этом направлении, приведут более детальные примеры.
Да, это мало кому действительно нужно на практике, но если у вас всё получается с этими предметами — вы понимаете, что хотите развиваться в R&D. Ср 20 мар 2019 22:15:38

Единицам, которые пишут нечто эпическое. Практики обходятся без знаний их.
 

22 марта 2018 Четверг

 https://javatalks.ru/topics/20640

Проверено, у меня работает ( три файла ява и один readmy )

Давайте попробуем разобраться на этом примере: http://www.javatalks.ru/ftopic9059.php ?
вот я создал каталог PROBA, создал там три файла(Ball.java, BallComponent.java, BounceThread.java), в которые скопировал примеры кодов. Что мне дальше выполнять? Спрашивает человек.

Давайте! Итак:
1. создаем три исходника: Ball.java, BallComponent.java и BounceThread.java. положим их в какую-нибудь отдельную папку, например java
2. заходим в эту папку из командной строки (делаем ее текущей)
  1. cd java
3. создаем в этой папке папку classes для файлов классов
  1. mkdir classes
4. теперь скомпилируем исходники в папку classes. можно это делать по-одному (по-очереди), но это долго, да и не всегда помнишь, что нужно скомпилировать в первую очередь, а что потом. так что делаем все одной командой
  1. javac -d ./classes *.java
ключ -d говорит компилятору, куда складывать class файлы. 5. сделаем текущей директорию classes
  1. cd classes
6. запустим класс, содержащий метод main
  1. java -cp . BounceThread

опция -cp (classpath) говорит интерпретатору, где искать классы, требующиеся при выполнении метода main. classpath это также переменная окружения, можно задать в настройках командного интерпретатора, или командой CLASSPATH="$CLASSPATH:(your_path_to_classes)".. это в *nix, как в винде не помню. наслаждаемся летающими шариками!


Программируйте пока есть желание

// Ball.java

     import java.awt.geom.*;
          
         /**
      *      * A ball that moves and bounces off the edges of a
      *           * rectangle
      *                * @version 1.33 2007-05-17
      *                     * @author Cay Horstmann
      *                         */
         public class Ball
         {
                    /**
                 *           Moves the ball to the next position, reversing direction
                 *                     if it hits one of the edges
                 *                            */
                 public void move(Rectangle2D bounds)
                        {
                                  x += dx;
                                        y += dy;
                                              if (x < bounds.getMinX())
                                                        {
                                                                 x = 2*bounds.getMinX() - x;
                                                                          dx = -dx;
                                                                            }
                                                    if (x + XSIZE >= bounds.getMaxX())
                                                          {
                                                                       x = 2*(bounds.getMaxX() - XSIZE) - x;
                                                                                dx = -dx;
                                                                                  }
                                                      if (y < bounds.getMinY())
                                                                {
                                                                             y = 2*bounds.getMinY() - y;
                                                                                  dy = -dy;
                                                                                        }
                                                            if (y + YSIZE >= bounds.getMaxY())
                                                                      {
                                                                                   y = 2*(bounds.getMaxY() - YSIZE) - y;
                                                                                        dy = -dy;
                                                                                          }
                                                               }
                  
                  
                    /**
                 *           Gets the shape of the ball at its current position.
                 *                  */
                    public Ellipse2D getShape()
                           {
                                         return new Ellipse2D.Double(x, y, XSIZE, YSIZE);
                                        }
                     
                       private static final int XSIZE = 15;
                              private static final int YSIZE = 15;
                                 private double x = 0;
                                    private double y = 0;
                                       private double dx = 1;
                                          private double dy = 1;
                                          }

---

// BallComponent.java

    import java.awt.*;
        import java.util.*;
        import javax.swing.*;
             
            /**
         *      * The component that draws the balls.
         *           * @version 1.33 2007-05-17
         *                * @author Cay Horstmann
         *                     */
            public class BallComponent extends JComponent
            {
                       /**
                    *         * Add a ball to the panel.
                    *                 * @param b the ball to add
                    *                         */
                       public void add(Ball b)
                              {
                                        balls.add(b);
                                           }
                        
                          public void paintComponent(Graphics g)
                                 {
                                           Graphics2D g2 = (Graphics2D) g;
                                                 for (Ball b : balls)
                                                           {
                                                                        g2.fill(b.getShape());
                                                                          }
                                                    }
                           
                             private ArrayList<Ball> balls = new ArrayList<Ball>();
                             }

---

// BounceThread.java

    import java.awt.*;
        import java.awt.event.*;
        import javax.swing.*;
             
            /**
         *      * Shows animated bouncing balls.
         *           * @version 1.33 2007-05-17
         *                * @author Cay Horstmann
         *                     */
            public class BounceThread
            {
                       public static void main(String[] args)
                              {
                                   
                                                 JFrame frame = new BounceFrame();
                                                            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                                                   frame.setVisible(true);
                                                                  }
                       }
     
    /**
     *      * A runnable that animates a bouncing ball.
     *           */
    class BallRunnable implements Runnable
        {
               /**
            *         * Constructs the runnable.
            *                 * @aBall the ball to bounce
            *                         * @aComponent the component in which the ball bounces
            *                                 */
               public BallRunnable(Ball aBall, Component aComponent)
                          {
                                    ball = aBall;
                                      component = aComponent;
                                         }
                    
                      public void run()
                             {
                                       try
                                                 {
                                                          for (int i = 1; i <= STEPS; i++)
                           &nb

вверх^ к полной версии понравилось! в evernote


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

Дневник java_1 | _ghbhjif - Дневник _ghbhjif | Лента друзей _ghbhjif / Полная версия Добавить в друзья Страницы: раньше»