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

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

38 постов 1 429 подписчиков
6

Изучаю Java. Нужна помощь

Доброго времени суток. Изучаю Java. Продвинулся не очень далеко. Изучал операторы if, while, строки, класс String, методы класса String. Дошёл до циклов.
У меня есть задание: У меня есть строка "у меня есть строка". Нужно при помощи циклов сделать пирамиду, где в каждой новой строке исчезает по одному символу с конца.
Я бы не хотел чтобы мне просто дали готовый код, я бы хотел чтобы мне дали подсказки. Если не пойму с подсказками, то наверное можно код.
Спасибо

25

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

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

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


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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

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

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

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

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

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

Жмем 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?>

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост
Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

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

stylesheets="/sample/sample.css"

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

.root {

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

}


.label {

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

}

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост

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

Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост
Создаем программу Hello World в JavaFX в IntelliJ IDEA Java, Javafx, Программирование, Графика, Длиннопост
Показать полностью 16
12

Изучаем вместе

Добрый день, есть ли среди участников сообщества те, кто хотел бы поделиться опытом в изучении Джавы или же те, кто непосредственно занимается изучением данного языка и захотел бы к примеру сравнить свои результаты с другими (такого же уровня)?


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


Если кто-нибудь откликнется, будет здорово. Если это будет больше одного человека, можно было бы создать телеграм канал или что то в этом духе.


Всем добра, бобра и лучей позитива!

17

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

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


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

9

Небольшой разбор первого задания

При прочтении просьба не забывать, что я всего лишь кот :3

Небольшой разбор первого задания Java, Задача, Решение, Длиннопост

Объявляем класс:


class Cat {
}

При объявлении переменных класса я использовал модификатор private для что, чтобы их можно изменять извне только с помощью специального интерфейса.


private String name, colour;
private double weight, length, height, strength;

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


public Cat () {
name = "NoName";
colour = "Black";
weight = 6.5;
length = 1.0;
height = 0.4;
strength = 0.5 * weight * length * height;
}

Конструктор, через который мы сможем в программе присвоить свои значения переменным класса:


public Cat (String name, String colour, double weight, double length, double height)
{
this.name = name;
this.colour = colour;
this.weight = weight;
this.length = length;
this.height = height;
strength = 0.5*weight * length * height;
}

Так как имена передаваемых параметров в конструкторе совпадают с переменными класса, используется конструкция this.переменная = переменная.


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


public String getName () {
return name;
}

И проверка класса на работоспособность:


public static void main(String[] args)

{
Cat cat1 = new Cat();
System.out.println(cat1.getName());
Cat cat2 = new Cat("Salem", "Black", 6.5, 1.0, 0.4);
System.out.println(cat2.getName());
}

Так как классы имеют сложную структуру необходимо использовать ключевое слово new для того, чтобы для него была выделена память программой.


#comment_67980312


Программа выводит следующее:


NoName
Salem

Вручите мне мой приз, пожалуйста.)

Небольшой разбор первого задания Java, Задача, Решение, Длиннопост
Показать полностью 1
13

Когда Hello world уже не достаточно.

Привет всем кто учит какие либо языки программирования, а в особенности Java.

Я далекий от про уровня человек, но люблю на досуге писать код. И вот я не так давно (благодаря упоминанию тут), открыл для себя ресурс codewars.


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


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

Когда Hello world уже не достаточно. Java, Codewars, Программирование, Логическая задача, М
11

Класс Cat

Задание 1: создать класс Cat. Кот имеет свойства имя, вес, цвет, рост, длина и зависящее от веса, роста и длины свойство - сила. Класс Cat должен иметь параметры по умолчанию.

Класс Cat Java, Задача, Программирование, Текст
10

Интересный вопрос.

Все знаю про три закона робототехники разработанные А. Азимовым



Робот не может причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.

Робот должен повиноваться всем приказам, которые даёт человек, кроме тех случаев, когда эти приказы противоречат Первому Закону.

Робот должен заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.


(Не обязательно же наличие "позитронных" мозгов, становится актуально с появлением автомобилей на автопилоте)


Но хоть один программист пытался их написать машинным или программным кодом??

8

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

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

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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

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

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

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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

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

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

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

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


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

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

Структура MainPanel:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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

Внутрь 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. Использование данных элементов позволило стилизовать текст через следующую конструкцию:

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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-ы, в дальнейшем они будут отражать промежуточные показатели здоровья танком, а не только жив-мертв.

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост

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.


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

Реализация программы TankBattle с использованием Swing. Часть первая - создание окна приложения. Java, Задача, Обучение, Программирование, Длиннопост
Показать полностью 8
6

Выполняем задание на Abstract Factory Pattern часть 1

В первой части мы создадим абстрактную фабрику танков, по одному экземпляру каждого танка и проведем бой между случайными танками СССР и Германии.

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Структура программы:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Весь код программы находится по адресу: https://github.com/Norfin85/TankBattle


Опишу лишь пару, на мой, взгляд интересных моментов.

Момент 1:

Классы LightUssrTank, MediumUssrTank, HeavyUserTank имеют различный показатель armor. Все переменные в классах имеют модификатор private, а значит объявление переменной должно происходить в классе . Но UssrFactory возвращает  объекты класса Tank, а значит поле armor будет недоступно в этих объектах. Эту проблему можно решить следующим образом:

В абстрактом классе Tank объявляется абстрактная функция getArmor:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

А в конкретных класса объявляется переменная armor и реализация функции getArmor:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Момент 2: в абстрактом классе задается конструктор, а в классе-наследнике UssrMediumTank он используется используя ключевое слово super(), при  этом класс UssrMediumTank имеет свой конструктор с большим количеством полей. Это позволяет нам объединять общие параметры для всех классов-наследников в один общий абстрактный класс.

И сама главная программа:

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост

Программа пока очень громоздкая и не учитывает скорость стрельбы при встрече лоб в лоб. Это все будет исправлено во второй части путем создания таймера боя и очков действия танков. Также внутрь объектов будет помещена их ориентация.

И еще некоторые модификации...)

Выполняем задание на Abstract Factory Pattern часть 1 Java, Программирование, Паттерны, Задача, Длиннопост
Показать полностью 4
Мои подписки
Подписывайтесь на интересные вам теги, сообщества,
пользователей — и читайте персональное «Горячее».
Чтобы добавить подписку, нужно авторизоваться.
Отличная работа, все прочитано!