Сообщество - Задачки для изучающих Java

Задачки для изучающих Java

43 поста 1 745 подписчиков

Популярные теги в сообществе:

Простейшие задачи

Тут будут представлены простейшие задачи для набивания руки:

1) Написать простейшую программу, выводящую текст: Быть котом - круто, можно гадить по углам и лизать яйца. Любой дополнительный функционал приветcтвуется ;-)

2) Написать простейшую программу, считывающую кличку кота и выводящую фразу: "Меня зовут кот "ваше имя" мой хозяин - форменное ЧМО, думает, что он в доме главный. Однако мы - то знаем кто убирает мои какашки. Любой дополнительный функционал приветcтвуется ;-)

3) Написать простейшую программу:

Убери комментарии с части кода, чтобы на экран вывелось сообщение "Salem wants a little petting".

public class Solution {

public static void main(String[] args) {

// String s = "Salem";

// System.out.println("Vaska");

// System.out.println("little");

// System.out.print("petting");

// System.out.println("Salem" + "wants" + "a" + "little" + "petting");

// System.out.println(s);

// System.out.println(" ");

// System.out.print("wants ");

// System.out.print(" ");

// System.out.println("a");

//System.out.print("a");

//System.out.print("little ");
//System.out.print(" " + "little ");

//System.out.print(" " + "petting");

//System.out.println("petting ");

//System.out.print("petting");

}

}

Показать полностью

Решение XML-задачи

Всем привет! :)


Предыдущая задача: https://pikabu.ru/story/javazadacha_s_xml_5623623


Возможное решение с использованием JAXB и Stream API: https://gist.github.com/Generalus/716cc96c39cf7bfb7a83a9c52d...


Каждые новая задача/вопросы к собеседованию будут, только если предыдущие выйдут из минусов, иначе не вижу смысла в затее.

Вопросы по коду задавайте в комментариях!

Java-задача с XML

Всем привет!

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


Задание: реализовать функцию со следующей сигнатурой:

Collection<String> folderNames(String xml, char startingLetter)

Она должна принимать на вход строку xml, содержащую XML-структуру, подобную этой:


<?xml version="1.0" encoding="UTF-8"?>

<folder name="c">

<folder name="program files">

<folder name="uninstall information" />

</folder>

<folder name="users" />

</folder>


а также букву startingLetter


В качестве возвращаемого значения должна быть коллекция значений всех аттрибутов name, каждая из которых начинается с буквы startingLetter.


Например, для XML выше, функция должна вернуть коллекцию с "uninstall information" и "users" (порядок не важен).


Решения добавляйте в комментариях (желательно, ссылки на github/pastebin), постараюсь првоести их код-ревью, а через некоторое время выложу свое решение.


Ну и по традиции, кот, из одного известного стикерпака ^_^

Java-задача с XML
Показать полностью 1
29

Создаем программу Hello World в JavaFX в IntelliJ IDEA

Пост вольный перевод статьи:

https://www.jetbrains.com/help/idea/developing-a-javafx-hell...


Для начала создаем проект JavaFX

Выбираем JavaFX и жмем Next

Даем имя проекту и жмем Finish.

информация с сайта http://ru.java.wikia.com/wiki/Контроллер

Контроллер - это класс, предназначенный для непосредственной обработки запросов от клиента и возвращения результатов.

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

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

Файл sample.fxml отвечает за интерфейс пользователя.

Переименовываем Controller в файле Controller.java

1. Наводим на имя класса-контроллера (Controller), выбираем Refractor->Rename и меняем имя класса-контроллера:

Жмем enter и завершаем рефракторинг. В файле sample.fxml должно было измениться имя класса контроллера: fx:controller="sample.SampleController"

Важный момент, конструкция fx:id будет использоваться часто, она означает, что мы работаем с объектом класса Controller.

Создадим кнопку в интерфейсе пользователя, для этого в файл  sample.fxml добавим следующие сточки:

<Button text="Say 'Hello World'" onAction="#sayHelloWorld"/>

<Label GridPane.rowIndex="1" fx:id="helloWorld"/>


Возможно, понадобиться руками добавить:


<?import javafx.scene.control.Button?>

<?import javafx.scene.control.Label?>

Как видите sayHelloWorld отмечен красным цветом, а helloWorld выделен.

Введем исправления:

Используя встроенные функции IDEA создадим поле helloWorld в файле SampleController.java

Жмем  enter, завершаем рефракторинг.

Далее создаем функцию sayHelloWorld встроенными способами IDEA:

Жмем enter и завершаем рефракторинг.

Добавляем действие в функцию sayHelloWorld:

Результат работы программы:

Добавим стили в нашу программу.

В файл sample.fxml добавим следующий текст:

stylesheets="/sample/sample.css"

Встроенными методами IDEA создадим файл sample.css

В файл sample.css добавляем текст:

.root {

-fx-background-color: gold; //Цвет заднего фона окна

}


.label {

-fx-font-size: 20; //Высота текста Hello World

}

Результат работы программы:

Показать полностью 17
17

Помогите начинающему программисту JAVA

Дорогие пикабушники. Если среди вас есть программист по java, подскажите новичку как набирать опыта. т.е. требуется практика, примеры работы или участие в каком не будь проекте как новичку.


Буду благодарен

9

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения.

О да, я вернулся..)

Проект находится по адресу: https://github.com/Norfin85/TankBattle

Вся графика реализована в файле: Graphics.java.

Открытие окна происходит через стандартную для Swing процедуру:

С помощью SwingUtilities.invokeLater мы помещаем создание окна в очередь событий - event dispatch thread.

Основное окно использует компоновщик BoxLayout:

frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)

и размещает панели сверху-вниз.

Внутрь окна мы помещаем две панели: MainPanel и BottomPanel, которые будут содержать более детальные блоки программы, о чем будет рассказано ниже.


Примерная структура любого окна в Swing:

Структура нашего окна:

Параметры нашего окна определяются следующими командами:

Структура MainPanel:

На первый взгляд мудрено....

Рассмотрим более детально.

Внутрь MainPanel помещаются три панели - LeftPanel, CenterPanel, RightPanel, для них задаются конкретные размеры с помощью функции setPreferredSize(new Dimension(X, Y)).  Дальше простая арифметика - сумма параметров по X и Y должна равняться параметрам

X и Y MainPanel.

Внутри MainPanel используется тоже компоновщик BoxLayout, но уже по оси X, размещающий панели слева-направо.

Внутрь панелей вносятся элементы. Для позиционирования элементов я выбрал способ - создание EmptyBorder(int top, int left, int bottom, int right) и задание конкретных размеров элементов через функцию setPreferredSize(new Dimension(X, Y)).


В BottomPanel помещаются две кнопки и разносятся по сторонам через:

setAlignmentX(Component.RIGHT_ALIGNMENT)

setAlignmentX(Component.LEFT_ALIGNMENT)


Внутри элементов TextPanel размещаются элементы JTextPane. Использование данных элементов позволило стилизовать текст через следующую конструкцию:

StyleConstants.setAlignment(simpleAttributeSet, StyleConstants.ALIGN_LEFT)- выравнивание по левому краю.

StyleConstants.setFontSize(simpleAttributeSet, 12) - размер шрифта.

StyleConstants.setFontFamily(simpleAttributeSet, "Times New Roman, cursive") - семейство шрифта.

simpleAttributeSet.addAttribute(StyleConstants.CharacterConstants.Foreground, new Color(112, 126, 173)) - цвет шрифта.


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

setMinimum(0) - минимальное значение в прогресс баре.

setMaximum(100) - максимальное значение.

setValue(100) - текущее значение.

setString("Легкий танк СССР " + (i + 1)) - аннотация.


BattleList (JTextPane) мы помещаем внутрь JScrollBar и назначаем параметр jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)  - чтобы всегда отражался скролл.


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


public static void setButton(String text, Boolean setActive) - меняет нашу кнопку buttom (меняет текст и делает активно/неактивной).


public static void setHealthes(Tank ussrTank, Tank germanTank) - меняет параметры здоровья в текстовых блоках слева и справа.


public static void setCurrentBattle(Tank ussrTank, Tank germanTank) - устанавливает текст текущей битвы в текстовом блоке CurrentBattle.


public static void updateFrame() - обновляем окно.


public static void updateBattleList() - обновляем battleList.


public static void startBattle() - запускает бой.


public static void setTankHealth(int id, int percent)  - устанавливает значение здоровья танка в соответствующем JProgressBar.


public static void showLog() - отображает окно лога битвы.


Лог битвы выведен на отдельную кнопку, открывающую окно лога, состоящего из JFrame и помещенного в него JScrollBar с вложенным в него JTextPane.


За сим на сегодня все..) Продолжение следует...)

Показать полностью 9

Не получается решить проблему

Новая версия битвы танков, не получается решить проблему запуска боя дважды....

https://github.com/Norfin85/TankBattle

Много чего нового - добавлена графика, изменена система боя и т.д.

Буду благодарен за помощь.)

Отличная работа, все прочитано!