Смотритель: hubert
  • ,

Первый язык для подростка перед Java

Уважаемые коллеги! Прошу посоветовать первый для изучения язык программирования, если вторым языком будет, скорее всего, Java. Мальчику пятнадцать. С английским языком у него проблем нет — почти как родной.
Заранее благодарю за аргументированные ответы.
  • ,

Как оформить подписку на два месяца?

Здравствуйте. Как оформить подписку на два месяца? не на 1 месяц, не на 1 год, а на два месяца. Оформил на 1 месяц (обычный премиум), но дальше ничего нельзя сделать в плане подписок — только оформить ещё премиум про.
Общался с техподдержкой сайта — мне сказали, что нужно платить подряд несколько раз за месяц, чтобы получить подписку на несколько месяцев. Но как я написал, у меня это не получается сделать. Задал им этот вопрос, пока ещё не ответили.
  • ,

Достойный и красивый код

Раздел с примерами как не следует писать программный код есть, так может следует иметь тему на форуме и с диаметрально противоположными примерами? Догадываюсь, что понятия «достойно и красиво» весьма субъективны, ну так дружелюбно и без насмешек ведь вполне можно обходиться с коллегами по изучению java-премудростей, не так ли, друзья?!
Идея родилась вчера, когда в комментариях к заданиям в новой версии javarush обнаружил для себя два познавательных и изящных кода (жаль, что авторам в тех разделах нельзя было «плюсануть» — создатели javarush эту возможность не предоставили). А если взять примеры из изобразительного искусства, музыки, литературы, то обучение строится на достойных примерах для подражания. Не встречалось что-то обучение мастерству на примерах китча, безвкусицы, пошлости. Даже в строгой шахматной аннотации используется восклицательный знак, когда следует неочевидный и весьма эффектный ход… В общем, я за подборку достойных и красивых примеров для подражания и в java-программировании.

P.S.
Созвучная некоторым изложенным мыслям статья: «Что такое красивый код, и как его писать?»
  • ,

IDEA 2016 3.4 как изменить внешний вид подсказок?

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

P.S. создать топик в разделе IDEA почему-то не смог, извините.
  • ,

Использование UML в разработке и сопровождении java-программ

UML (Unified Modeling Language) — унифицированный язык моделирования.
Узнал об UML из замечательного повествования на форуме от alex8894
Обзор CASE-средств для построения диаграмм UML.
В книге «UML for Java Programmers» Robert Cecil Martin, насколько понял, используются стандарты UML 1, т. к. ныне действующий UML вступил в действие уже после её опубликования. Однако, полагаю, основные принципы построения подобных блок-схем остались без существенных изменений.
Учебный пример из лекции:

/*
 * © Volodya Mozhenkov 2015
 * GPL version 3.0
 * Almost University http://www.almost-university.com/
 * VladimirMozhenkov@yahoo.com
 *
 */
// файл Main.java
public class Main
{
    private static void printRes(MyResult r)
    {
        if(r.hasResult())
        {
            System.out.print("Результат исполнения: ");
            System.out.println(r.getResult());
        }
        else
        {
            System.out.println("Результат отсутствует");
        }
    }
    public static void main(String[] args)
    {
        MyCalculator c1 = new MyCalculator('/');
        MyResult r = c1.calculate(4, 2);
        printRes®;
        r = c1.calculate(40, 13);
        printRes®;
        r = c1.calculate(1, 0);
        printRes®;

        c1 = new MyCalculator('^');
        r = c1.calculate(2, 25);
        printRes®;
    }
}

// файл MyCalculator.java
public class MyCalculator
{
    private class ResultClass implements MyResult
    {
        boolean valid;
        int result = 0;
        public ResultClass()
        {
            valid = false;
        }
        public ResultClass(int result)
        {
            this.result = result;
            valid = true;
        }
        public int getResult()
        {
            return result;
        }
        public boolean hasResult()
        {
            return valid;
        }
    }
    private char operation;

    public MyCalculator(char operation)
    {
        this.operation = operation;
    }

    public MyResult calculate(int a, int b)
    {
        MyResult res;

        switch(operation)
        {
            case '*':
                res = new ResultClass(a*b);
                break;
            case '/':
                if(b!=0)
                {
                    res = new ResultClass(a/b);
                }
                else
                {
                    res = new ResultClass();
                }
                break;
            case '+':
                res = new ResultClass(a+b);
                break;
            case '-':
                res = new ResultClass(a-b);
                break;
            default:
                res = new ResultClass();
                break;
        }
        return res;
    }
}

// файл MyResult.java
public interface MyResult
{
    public int getResult();
    public boolean hasResult();
}

И, используя одну из бесплатных версий программ, довольно быстро нарисовал такую блок-схему этой программы на смартфоне (естественно с шибками, так как только начал интересоваться UML):
Image Hosted by PiXS.ru
Интересно было бы посмотреть и сравнить с тем, какую UML- схему/диагамму этой же программы построит Intellij IDEA.
  • ,

IntelliJ IDEA со смартфона/планшета?! - Можно,оказывается, и так!

Неплоха AIDE для работы в Android (http://www.android-ide.com/), но к возможностям и удобствам IntelliJ IDEA быстро привыкаешь. И когда больше времени проводишь не у стационарного персонального компьютера, а со смартфоном, то невольно начинаешь мечтать о полноценном удаленном доступе к PC. Первые мои опыты с программой TeamViewer показали, что это вполне достижимо. Однако невысокое быстродействие (даже в локальной сети всё гонится через Интернет, а не напрямую по wi-fi через роутер) не очень пришлось по вкусу.
Понравилась же программа Microsoft Remote Desktop: www.microsoft.com/en-us/download/details.aspx?id=50042 — эта программа ставится на PC, а на мобильное устройство под управлением Андроида — с play.google.com. В ней по wi-fi идёт прямой доступ через роутер (HD видео изображение с РС хоть и отрывисто, но звук неплох — и это на дешевом смартфоне c Android 5.0 !).
Что ж, теперь взаимодействие с любой IDE вполне осуществимо и удаленно, особенно когда для удобства используешь со смартфоном(планшетом) беспроводную клавиатуру. Очень этому рад!
  • ,

Сложно ли пересесть с Java на C++ или C#?

Добрый день. Скажите пожалуйста — на сколько сложно будет пересесть с Java на C++ или C# после окончания курса Javarush? Недавно узнал, что моя профильная специальность будет требовать именно знание языков майкрософт, но заканчивать курс заранее совсем не хочется, так как я чувствую, что знания из него откладываются в голове куда лучше разных книг.
  • ,

Вложенные, локальные и анонимные классы

Всем доброго времени суток! Стал глубже копать разновидности классов и написал код, который содержит класс. Этот класс содержит метод main() и статический вложенный класс. Статический вложенный класс содержит метод. Метод создает локальный класс. Локальный класс имеет метод, который создает анонимный класс обрамляющего класса (сильно сомневаюсь, что подобные извращения имеют место в практике программирования, но чисто спортивного интереса ради решил помудрить, так что просьба — не бросаться камнями. Раньше времени, во всяком случае). Упрощенно это выглядит так:


class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}


Цель: создать переменную в анонимном классе, используя обрамляющий супер-класс, и «перебросить» аргумент этой переменной вплоть до внутреннего класса, присвоив его переменной внутреннего класса, соответственно.

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


class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    int outerValue = 0;

    Outer(int a)
    {
        this.outerValue = a*a;
    }

    int getValue() {
        return outerValue;
    }

    static class Inner { // ВНУТРЕННИЙ СТАТИЧЕСКИЙ КЛАСС
        public  int innerValue = doInnerThings();

        int doInnerThings() {
            final int innerValue = 0; // КАК ПЕРЕДАТЬ ЗНАЧЕНИЕ ЭТОЙ ПЕРЕМЕННОЙ ИЗ КЛАССА НИЖЕ?

            class LocalInner { // ЛОКАЛЬНЫЙ КЛАСС
                final public int localInnerValue;

                LocalInner() {
                    localInnerValue = doLocalInnerThings();
                }

                int doLocalInnerThings() {
                    final int[] localInnerAnonValue = {0};

                    new Outer(5) { // АНОНИМНЫЙ КЛАСС
                        @Override
                        int getValue()
                        {
                            localInnerAnonValue[0] = super.getValue();
                            return localInnerAnonValue[0];
                        }
                    };
                    
                    return localInnerAnonValue[0];
                }

                int getlocalInnerValue() {
                    return this.localInnerValue;
                }
            }

            return innerValue;
        }
    }

    public static void main(String[] args) {
        Outer.Inner test = new Outer.Inner();
        System.out.println(test.innerValue);
    }
}


Проблема: метод
int doInnerThings()
Не могу присвоить переменной этого метода "innerValue" значение переменной "localInnerValue" из локального класса "LocalInner"

Буду рад помощи! :)
  • ,

Прерывания работы нити (interrupte thread).

Набросал два класса, наследующихся от Runnable. В них простая начинка ( Thread.sleep и sout). Я изучал вопрос прерывания работы нитей при помощи interrupted и isInterrupted. Почему-то прерывания не происходит, а выполнение программы зациклавается и вылетает ошибка:
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at com.javarush.test.myExample.example.thread.Producer.run(Producer.java:15)
	at java.lang.Thread.run(Thread.java:745)
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at com.javarush.test.myExample.example.thread.Consumer.run(Consumer.java:15)
	at java.lang.Thread.run(Thread.java:745)

После вылета ошибки работа нитей продолжается бесконечно. Но если убрать из классов, унаследовавшихся от Runnable, вызов Thread.sleep, то программа отрабатывает нормально. В чем загвоздка, почему вылетает ошибка и почему не завершается работа программы???
Вот main:
public class Solution
{
    public static void main(String[] args) throws InterruptedException
    {
        Thread thread1 = new Thread(new Producer());
        Thread thread2 = new Thread(new Consumer());

        thread1.start();
        thread2.start();

        Thread.sleep(1500);

        thread1.interrupt();
        thread2.interrupt();
    }
}


Первый класс:
public class Producer implements Runnable
{
    @Override
    public void run()
    {
        while (!Thread.interrupted())
        {
            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            System.out.println("Producer");
        }
    }
}


Второй класс:
public class Consumer implements Runnable
{
    @Override
    public void run()
    {
        while (!Thread.interrupted())
        {
            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            System.out.println("Consumer");
        }
    }
}

Спасибо за комментарии к теме)