05 workshop done + refactoring

This commit is contained in:
Ivan I. Ovchinnikov 2023-01-20 00:56:30 +03:00
parent 6f0bcb21c6
commit bef6708291
24 changed files with 175 additions and 85 deletions

Binary file not shown.

BIN
build/jtc1-01-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc1-01-workshop.pdf Normal file

Binary file not shown.

BIN
build/jtc2-02-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc2-02-workshop.pdf Normal file

Binary file not shown.

BIN
build/jtc3-03-abstract.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
build/jtc4-04-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc4-04-workshop.pdf Normal file

Binary file not shown.

BIN
build/jtc5-05-abstract.pdf Normal file

Binary file not shown.

BIN
build/jtc5-05-workshop.pdf Normal file

Binary file not shown.

View File

@ -1,7 +1,12 @@
\immediate\write18{texcount -sum -1 -inc j-spec.tex > /tmp/wordcount.tex}
\documentclass[a4paper,12pt]{report}
% report is for the complete book
%\documentclass[a4paper,12pt]{report}
% article is for single section compilation
\documentclass[a4paper,12pt]{article}
\usepackage[english,russian]{babel}
\usepackage{ifthen}
\input{settings/main-style-preamble}
\input{settings/fancy-listings-preamble}
@ -11,16 +16,27 @@
\author{Иван Игоревич Овчинников}
\date{\today{} (\DTMcurrenttime)}
% defining if document is compiled as book or as articles
\def\isSingle{1}
\usepackage{subfiles}
\begin{document}
\maketitle
\ifx\isSingle\undefined
\tableofcontents
\fi
\pagestyle{plain}
\sloppy
\newpage
\ifx\isSingle\undefined
\chapter{Java Core}
\fi
\subfile{jtc1-01-abstract}
\newpage
\subfile{jtc2-02-abstract}
@ -32,15 +48,20 @@
\subfile{jtc5-05-abstract}
\newpage
\ifx\isSingle\undefined
\chapter{Java Development Kit}
\fi
%\subfile{jtd6-11a}
\appendix
\setcounter{secnumdepth}{5}
\printnomenclature[40mm]
\setcounter{secnumdepth}{5}
\ifx\isSingle\undefined
\printnomenclature[40mm]
\appendix
\chapter*{Семинары}
\addcontentsline{toc}{chapter}{Семинары}
\fi
\renewcommand{\thesection}{\Asbuk{section}}
\subfile{jtc1-01-workshop}
\newpage

View File

@ -2,9 +2,10 @@
\begin{document}
\pagestyle{plain}
%\tableofcontents
\tableofcontents
\section{Платформа: история и окружение}
\subsection{В этом разделе}
\subsection*{В этом разделе}
Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование; некоторые интересные способы сборки проектов.
В этом разделе происходит первое знакомство со внутреннем устройством языка Java и фреймворком разработки приложений с его использованием. Рассматривается примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. Разбирается структура проекта, а также происходит ознакомление с базовым инструментарием для разработки на Java.
@ -466,7 +467,7 @@ Docker-образ и, как следствие, Docker-контейнеры в
\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере подьзователя, а второй забирать скомпилированные классы и исполнять их.
\end{itemize}
% \newpage
% \printnomenclature[40mm]
\newpage
\printnomenclature[40mm]
\end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles}
\documentclass[j-spec.tex]{subfiles}
\begin{document}
\sloppy

View File

@ -3,9 +3,9 @@
\begin{document}
\setcounter{section}{1}
\pagestyle{plain}
%\tableofcontents
\tableofcontents
\section{Специализация: данные и функции}
\subsection{В предыдущем разделе}
\subsection*{В предыдущем разделе}
\begin{itemize}
\item Краткая история (причины возникновения);
\item инструментарий, выбор версии;
@ -15,7 +15,7 @@
\item некоторые интересные способы сборки проектов.
\end{itemize}
\subsection{В этом разделе}
\subsection*{В этом разделе}
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
\begin{itemize}
\item \nom{Метод}{функция в языке программирования, принадлежащая классу};
@ -688,7 +688,7 @@ Constare - (лат. стоять твёрдо). Константность эт
\item Написать метод, которому можно передать в качестве аргумента массив, состоящий строго из единиц и нулей (целые числа типа \code{int}). Метод должен заменить единицы в массиве на нули, а нули на единицы и не содержать ветвлений. Написать как можно больше вариантов метода.
\end{enumerate}
% \newpage
% \printnomenclature[40mm]
\newpage
\printnomenclature[40mm]
\end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles}
\documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab}
\begin{document}

View File

@ -5,12 +5,13 @@
\setlength{\columnsep}{22pt}
\pagestyle{plain}
\sloppy
%\tableofcontents
\tableofcontents
\section{Специализация: ООП}
\subsection{В предыдущем разделе}
\subsection*{В предыдущем разделе}
Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами).
\subsection{В этом разделе}
\subsection*{В этом разделе}
Разберём такие основополагающих в Java вещи, как классы и объекты, а также с тем, как применять на практике основные принципы ООП: наследование, полиморфизм и инкапсуляцию. Дополнительно рассмотрим устройство памяти в джава.
\begin{itemize}
\item \nom{Класс}{определяет форму и сущность объекта и является логической конструкцией, на основе которой построен весь язык Java. Определяет новый тип данных};
@ -330,13 +331,26 @@ public class Cat {
}
\end{lstlisting}
Помимо того, что статические поля - это полезный инструмент создания общих свойств это ещ§ и опасный инструмент создания общих свойств. Так, например, мы знаем, что у котов четыре лапы, а не 6 и не 8. Не создавая никакого барсика будет понятно, что у кота - 4 лапы. Это полезное поведение.
Помимо того, что статические поля -- это полезный инструмент создания общих свойств это ещё и опасный инструмент создания общих свойств. Так, например, мы знаем, что у котов четыре лапы, а не шесть и не восемь. Не создавая никакого Барсика будет понятно, что у кота -- четыре лапы. Это полезное поведение любого класса и его объектов.
лайвкод 03-статическое-поле-ошибка Посмотрим на опасность. Мы видим, что у каждого кота есть имя, и помним, что коты хранят значение своего имени каждый сам у себя. А знают экземпляры о названии поля потому что знают, какого класса они экземпляры. Но что если мы по невнимательности добавим свойство статичности к имени кота?
\begin{lstlisting}[language=Java,style=JCodeStyle]
public class Cat {
static int pawsCount = 4;
03-статическое-поле-признак Создав тех же самых котов, которых мы создавали весь урок, мы получим двух мурзиков и ни одного барсика. Почему это произошло? По факту переменная у нас одна на всех, и значение тоже одно, а значит каждый раз мы меняем именно его, а все остальные коты ничего не подозревая смотрят на значение общей переменной и бодро его возвращают. Поэтому, чтобы не запутаться, к статическим переменным, как правило, обращаются не по ссылке на объект — cat1.name, а по имени класса — Cat.name.
static String name;
String color;
int age;
03-статические-поля К слову, статические переменные — редкость в Java. Вместо них применяют статические константы. Они определяются ключевыми словами static final и по соглашению о внешнем виде кода пишутся в верхнем регистре.
// ...
}
\end{lstlisting}
У каждого кота есть имя, и коты хранят значение своего имени каждый сам у себя. А знают экземпляры о названии поля потому что знают, какого класса они экземпляры. В чём опасность? Что если по невнимательности добавить свойство статичности к имени кота?
Создав тех же котов, такой класс вернёт двух Мурзиков и ни одного Барсика. Почему это произошло? По факту переменная одна на всех, и значение тоже одно, а значит при каждом вызове конструктора меняется именно оно, а все остальные коты, ничего не подозревая, смотрят на значение общей переменной и возвращают его. Поэтому, к статическим переменным, как правило, обращаются не по ссылке на объект -- \code{cat1.name}, а по имени класса -- \code{Cat.name}.
\begin{frm} \info Статические переменные -- редкость в Java. Вместо них применяют статические константы. Они определяются ключевыми словами \code{static final} и по соглашению о внешнем виде кода пишутся в верхнем регистре, разделяя слова символом нижнего подчёркивания, так называемым \code{UPPER_SNAKE_CASE}.
\end{frm}
\subsubsection{Задание для самопроверки}
\begin{enumerate}
@ -681,8 +695,9 @@ public class Cat {
Представим, что есть необходимость создать помимо класса котиков, класс собачек. Данный класс будет выглядеть очень похожим образом, только он будет не мяукать, а гавкать, и заменим обоим животным прыжок на простое перемещение на лапках.
\begin{multicols}{2}
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpcat},caption={Класс кота}]
\begin{figure}[H]
\begin{multicols}{2}
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpcat},caption={Класс кота}]
public class Cat {
private String name;
private String color;
@ -726,9 +741,9 @@ public class Cat {
System.out.println(name + " walks on paws");
}
}
\end{lstlisting}
\end{lstlisting}
\columnbreak
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpdog},caption={Класс собаки}]
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpdog},caption={Класс собаки}]
public class Dog {
private String name;
private String color;
@ -772,8 +787,9 @@ public class Dog {
System.out.println(name + " walks on paws");
}
}
\end{lstlisting}
\end{multicols}
\end{lstlisting}
\end{multicols}
\end{figure}
Очевидно это не DRY и неприемлемо, если появится необходимость описать классы для целого зоопарка. В приведённых классах есть очень много абсолютно одинаковых и очень похожих полей и методов.
@ -819,6 +835,7 @@ public class Animal {
Простой перенос кода в родительский класс показал наличие проблемы. Модификатор \code{private} определяет область видимости только внутри класса, а если нужно чтобы переменную было видно ещё и в классах-наследниках, нужен хотя бы модификатор доступа по умолчанию. Если же класс наследник создаётся в каком-то другом пакете, то и default не подойдёт.
\begin{figure}[H]
\begin{multicols}{2}
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:cmpdog1},caption={Класс собаки}]
public class Dog extends Animal {
@ -856,6 +873,7 @@ public class Cat extends Animal {
}
\end{lstlisting}
\end{multicols}
\end{figure}
То есть, к членам данных и методам класса можно применять следующие модификаторы доступа
\begin{itemize}
@ -882,6 +900,7 @@ public class Cat extends Animal {
При описании класса, можно явно вызвать конструктор базового класса в конструкторе класса-потомка. Базовый класс еще называют «суперклассом», поэтому в Java для его обозначения используется ключевое слово \code{super}. Здесь такое же ограничение, как и при вызове конструкторов данного класса (через \code{this}) - вызов такого конструктора может быть только один и быть только первой строкой. Таким образом, код, для всех животных в программе будет выглядеть следующим образом:
\begin{figure}[H]
\begin{multicols}{2}
\begin{lstlisting}[language=Java,style=JCodeStyle,label={lst:animal-full},caption={Класс животного}]
public class Animal {
@ -968,6 +987,7 @@ public class Bird extends Animal {
}
\end{lstlisting}
\end{multicols}
\end{figure}
Для примера, создали ещё один класс, наследника животного, чтобы использовать наследование по назначению. Наследование реализуется через ключевое слово \code{extends}, расширять. Важно, что класс-родитель расширяется функциональностью или свойствами класса-наследника. Это позволило, например, добавить в птичку такое свойство как высота полёта и такой метод как летать, в дополнение к тому, что умеют все животные.
@ -1187,7 +1207,7 @@ public class Cat extends Animal {
\item * Добавить механизм, создающий 25\% разброс значений каждого ограничения для каждого объекта.
\end{enumerate}
% \newpage
% \printnomenclature[40mm]
\newpage
\printnomenclature[40mm]
\end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles}
\documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab}
\begin{document}

View File

@ -5,12 +5,13 @@
\setlength{\columnsep}{22pt}
\pagestyle{plain}
\sloppy
%\tableofcontents
\tableofcontents
\section{Специализация: ООП и исключения}
\subsection{В предыдущем разделе}
\subsection*{В предыдущем разделе}
Была рассмотрена реализация объектно-ориентированного программирования в Java. Рассмотрели классы и объекты, а также наследование, полиморфизм и инкапсуляцию. Дополнительно был освещён вопрос устройства памяти.
\subsection{В этом разделе}
\subsection*{В этом разделе}
В дополнение к предыдущему, будут разобраны такие понятия, как внутренние и вложенные классы; процессы создания, использования и расширения перечислений. Более детально будет разобрано понятие исключений и их тесная связь с многопоточностью в Java. Будут рассмотрены исключения с точки зрения ООП, процесс обработки исключений.
\begin{itemize}
\item \nom{Перечисление}{это упоминание объектов, объединённых по какому-либо признаку. Фактически, представляет новый тип данных, поэтому возможно определить переменную данного типа и использовать её.};
@ -749,7 +750,7 @@ try (TestStream stream = new TestStream()) {
\item для проверки напишите программу, преобразующую квадратный массив целых чисел 5х5 в сумму чисел в этом массиве, при этом, программа должна выбросить исключение, если строк или столбцов в исходном массиве окажется не 5.
\end{enumerate}
% \newpage
% \printnomenclature[40mm]
\newpage
\printnomenclature[40mm]
\end{document}

View File

@ -1,4 +1,4 @@
\documentclass[../j-spec.tex]{subfiles}
\documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab}
\begin{document}
@ -150,7 +150,7 @@ private static final class RowMismatchException extends RuntimeException {
\subsubsection*{Вопросы и ответы}
\begin{itemize}
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями.
\item \textbf{Ценность этапа} Вовлечение аудитории в обратную связь, пояснение неочевидных моментов в материале лекции и другой проделанной работе.
\item \textbf{Тайминг} 5-15 минут
\item \textbf{Действия преподавателя}
\begin{itemize}

View File

@ -5,12 +5,13 @@
\setlength{\columnsep}{22pt}
\pagestyle{plain}
\sloppy
%\tableofcontents
\tableofcontents
\section{Специализация: тонкости работы}
\subsection{В предыдущем разделе}
\subsection*{В предыдущем разделе}
Рассмотрены понятия внутренних и вложенных классов; процессы создания, использования и расширения перечислений. Подробно рассмотрены исключения с точки зрения ООП, их философия и тесная связь с многопоточностью в Java, обработка, разделение понятия штатных и нештатных ситуаций.
\subsection{В этом разделе}
\subsection*{В этом разделе}
Файловые системы и представление данных в запоминающих устройствах; Начало рассмотрения популярных пакетов ввода-вывода \code{java.io}, \code{java.nio}. Более подробно будет разобран один из самых популярных ссылочных типов данных \code{String} и механики вокруг него.
\begin{itemize}
\item \nom{Файл}{именованная область данных на носителе информации, используемая как базовый объект взаимодействия с данными в операционных системах.};
@ -705,13 +706,11 @@ cat0 equal to cat3? false
\item Написать метод поиска слова внутри файла.
\end{enumerate}
% \newpage
% \printnomenclature[40mm]
\newpage
\printnomenclature[40mm]
\end{document}
% Основная загрузочная запись (MBR)
% Основная загрузочная запись (MBR) — это устаревшая форма разделения загрузочного сектора. Это первый сектор диска, который содержит информацию о том, как разбит диск. Он также содержит загрузчик, который сообщает вашей машине, как загрузить ОС.
% MBR состоит из трех частей:

View File

@ -1,12 +1,12 @@
\documentclass[../j-spec.tex]{subfiles}
\documentclass[j-spec.tex]{subfiles}
\usepackage{spreadtab}
\begin{document}
\setcounter{section}{4}
\section{Семинар: обработка исключений}
\section{Семинар: тонкости работы}
\subsection{Инструментарий}
\begin{itemize}
\item \href{https://docs.google.com/presentation/d/}{Презентация} для преподавателя, ведущего семинар;
\item \href{https://docs.google.com/presentation/d/1zW_qrNiH5xH0jRZApzWQWH3eC_qJuzRJAPPsnpNDSig}{Презентация} для преподавателя, ведущего семинар;
\item \href{https://drive.google.com/file/d/1LWyE8aEy4-1gsognqhXIXwDcoLviVge4/view}{Фон} GeekBrains для проведения семинара в Zoom;
\item JDK любая 11 версии и выше;
\item \href{https://www.jetbrains.com/idea/download}{IntelliJ IDEA Community Edition} для практики и примеров используется IDEA.
@ -31,15 +31,21 @@
\hline
@ Quiz & 5 & @ 6-18 & @ Преподаватель задаёт вопросы викторины, через 30 секунд демонстрирует слайд-подсказку и ожидает ответов (6 вопросов, по минуте на ответ) \\
\hline
@ Рассмотрение ДЗ лекции & 10 & @ 19-23 & @ Преподаватель демонстрирует свой вариант решения домашнего задания с лекции, возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов \\
@ Рассмотрение ДЗ лекции & 10 & @ 19-27 & @ Преподаватель демонстрирует свой вариант решения домашнего задания с лекции, возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов \\
\hline
@ Вопросы и ответы & 10 & @ 24 & @ Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы \\
@ Вопросы и ответы & 10 & @ 28 & @ Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы \\
\hline
@ Задание 1 & 30 & @ 25-35 & @ Сквозное задание, состоящее из объяснений в 6 пунктах, обязательных к исполнению. Всё задание выдаётся сразу целиком и является неделимым. \\
@ Задание 1 & 10 & @ 29-33 & @ Сохранение состояния приложения между запусками \\
\hline
@ Перерыв (если нужен) & 5 & @ 36 & @ Преподаватель предлагает студентам перерыв на 5 минут (студенты голосуют) \\
@ Задание 2 & 15 & @ 34-37 & @ Загрузка состояния приложения при запуске \\
\hline
@ Задание 2 & 40 & @ 37-49 & @ Сквозное задание, состоящее из объяснений в 6 пунктах, обязательных к исполнению. Всё задание выдаётся сразу целиком и является неделимым. \\
@ Перерыв (если нужен) & 5 & @ 38 & @ Преподаватель предлагает студентам перерыв на 5 минут (студенты голосуют) \\
\hline
@ Задание 3 & 10 & @ 39-42 & @ Работа с текстом (автоматизированный поиск и замена текста в файле или группе файлов) \\
\hline
@ Задание 4 & 15 & @ 43-46 & @ Работа с файловой системой \\
\hline
@ Задание 5 (необязат) & 20 & @ 47-49 & @ Описание часто недостающих механик операционной системы по «массовой» работе с файлами \\
\hline
@ Домашнее задание & 5 & @ 50-51 & @ Объясните домашнее задание, подведите итоги урока \\
\hline
@ -282,7 +288,7 @@ private static boolean isInFile(String fileName, String search) throws IOExcepti
\subsubsection*{Вопросы и ответы}
\begin{itemize}
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями.
\item \textbf{Ценность этапа} Вовлечение аудитории в обратную связь, пояснение неочевидных моментов в материале лекции и другой проделанной работе.
\item \textbf{Тайминг} 5-15 минут
\item \textbf{Действия преподавателя}
\begin{itemize}
@ -297,7 +303,7 @@ private static boolean isInFile(String fileName, String search) throws IOExcepti
\subsubsection*{Задание 1}
\begin{itemize}
\item \textbf{Ценность этапа} Сохранение состояния приложения между запусками
\item \textbf{Тайминг} 15-20 мин
\item \textbf{Тайминг} 10-15 мин
\item \textbf{Действия преподавателя}
\begin{itemize}
\item Выдать задание студентам;
@ -504,7 +510,7 @@ void printContents(".");
\subsubsection*{Задание 5 (необязательное)}
\begin{itemize}
\item \textbf{Ценность этапа} Описание часто недостающих механик операционной системы по «массовой» работе с файлами.
\item \textbf{Тайминг} 15-20 мин
\item \textbf{Тайминг} 20-25 мин
\item \textbf{Действия преподавателя}
\begin{itemize}
\item Выдать задание студентам;

View File

@ -21,6 +21,7 @@
\usepackage{amsmath}
\usepackage{spreadtab}
\usepackage{svg}
\usepackage{afterpage}
\newcommand{\tabitem}{~~\llap{\textbullet}~~}
@ -66,10 +67,10 @@
}
\geometry{
left=2cm,
right=1cm,
top=2cm,
bottom=2cm
lmargin=1.5cm,
rmargin=2.5cm,
tmargin=2.5cm,
bmargin=2.5cm,
}
\setlist{nolistsep}

View File

@ -1483,7 +1483,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 1,
"metadata": {
"vscode": {
"languageId": "java"
@ -1813,7 +1813,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 2,
"metadata": {
"vscode": {
"languageId": "java"
@ -1837,13 +1837,21 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 3,
"metadata": {
"vscode": {
"languageId": "java"
}
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4, 5, 6, 7, 8, 0, 8, 7, 6, 5, 4, 3]\n"
]
}
],
"source": [
"int[] ar00 = new int[15];\n",
"final int DIGIT_BOUND = 48;\n",
@ -1958,7 +1966,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 5,
"metadata": {
"vscode": {
"languageId": "java"
@ -2016,16 +2024,49 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 7,
"metadata": {
"vscode": {
"languageId": "java"
}
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"./file_7.txt\n",
"./file_6.txt\n",
"./file_4.txt\n",
"./file_5.txt\n",
"./file_1.txt\n",
"./.DS_Store\n",
"./save1.out\n",
"./save0.out\n",
"./file_0.txt\n",
"./Icon\n",
"./file_2.txt\n",
"./file_3.txt\n",
"./FILE_OUT.txt\n",
"./Sample.zip\n",
"./Makefile\n",
"./notebook.ipynb\n",
"./Main.java.new\n",
"./Main.java\n",
"./save.out\n",
"./test.txt\n",
"./Main.class\n",
"./cat.txt\n",
"./file_8.txt\n",
"./bytes.txt\n",
"./file_9.txt\n",
"./sources-draft.iml\n"
]
}
],
"source": [
"int count = 0;\n",
"File path = new File( new File(\".\").getCanonicalPath() );\n",
"File path = new File( new File(\".\").getPath() );\n",
"File[] dir = path.listFiles();\n",
"for (int i = 0; i < dir.length; i++) {\n",
" if (dir[i].isDirectory()) continue;\n",
@ -2069,7 +2110,7 @@
},
{
"cell_type": "code",
"execution_count": 21,
"execution_count": 9,
"metadata": {
"vscode": {
"languageId": "java"
@ -2105,7 +2146,7 @@
},
{
"cell_type": "code",
"execution_count": 22,
"execution_count": 10,
"metadata": {
"vscode": {
"languageId": "java"
@ -2146,7 +2187,7 @@
"mimetype": "text/x-java-source",
"name": "Java",
"pygments_lexer": "java",
"version": "11.0.17+7-LTS"
"version": "11.0.15.1+2-LTS"
},
"orig_nbformat": 4
},