Ответы пользователя по тегу Java
  • Нужно ли удалять ненужные экземпляры классов (instances) в Java?

    Нет, это сделает за вас уборщик мусора.
    Но вы можете деликатно намекнуть ему на это присвоив
    объекту ссылку на null.
    Например:
    MyClass instanceOfMyClass = new MyClass();
     instanceOfMyClass = null;

    Но не факт , что уборщик cнизайдёт до этого.
    Ссылка на статьи: первая и вторая
    Ответ написан
    Комментировать
  • Почему не работает VideoView при разработке под android?

    Как у вас всё странно!А посмотреть, что у вас за ошибка, не пробовали?

    Xml - файл Layout:


    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="android.letscoder.xyz.videosolution.MainActivity">
    
        <VideoView
            android:id="@+id/video_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            />
    </RelativeLayout>


    Код класса Activity:


    package android.letscoder.xyz.videosolution;
    
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.MediaController;
    import android.widget.VideoView;
    
    public class MainActivity extends AppCompatActivity {
    
        VideoView mVideoView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setupVideoView(mVideoView, "http://techslides.com/demos/sample-videos/small.mp4");
        }
    
        private void setupVideoView(VideoView videoView, String url) {
            videoView = (VideoView) findViewById(R.id.video_view);
            MediaController controls = new MediaController(this);
            controls.setAnchorView(videoView);
            videoView.setMediaController(controls);
            videoView.setVideoURI(Uri.parse(url));
            videoView.start();
        }
    
    }


    Не забудьте прописать permisson в манифесте:


    <uses-permission android:name="android.permission.INTERNET"/>


    Всё работает:


    3d21e3b28408438c958afa60fb1a586e.png
    Ответ написан
    4 комментария
  • Как заставить TextView работать только с одним таймером?

    Я бы на вашем месте так бы не делал, но ладно:

    1)Зачем задаёте текст у TextView в таймере?Это нарушает принцип Деметры и абстракцию.Просто делаем переменную currentTime в интерфейсе класса и создаём геттер к нему:

    public class TimerClass extends CountDownTimer {
        public String getCurrentTime() {
            return currentTime;
        }
    
        private String currentTime;
    
        public TimerClass(long milliFuture, long interval) {
            super(milliFuture, interval);
        }
    
        @Override
        public void onTick(long millisUntilFinished) {
            long millis = millisUntilFinished;
            String hhmmss = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
                    TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                    TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
            currentTime = hhmmss;
        }
    
        @Override
        public void onFinish() {
            currentTime = "Completed";
        }
    }


    2)Теперь в классе активности создаём метод runTimer() с Handler, который будет
    обновлять текст нашего TextView:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        TextView mTimer;
        Button startButton, pauseButton;
        int timeToEnd = 25000;
        final TimerClass timer = new TimerClass(timeToEnd, 1000);
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mTimer = (TextView) findViewById(R.id.tv);
            startButton = (Button) findViewById(R.id.startButton);
            pauseButton = (Button) findViewById(R.id.pauseButton);
            startButton.setOnClickListener(this);
            pauseButton.setOnClickListener(this);
            runTimer();
        }
    
        @Override
        public void onClick(View v) {
    
            switch (v.getId()) {
                case R.id.startButton:
                    startButton.setOnClickListener(this);
                    timer.start();
                    break;
                case R.id.pauseButton:
                    pauseButton.setOnClickListener(this);
                    timer.cancel();
            }
        }
    
        private void runTimer() {
    
    
            final Handler handler = new Handler();
            handler.post(new Runnable() {
                @Override
                public void run() {
    
                    mTimer.setText(timer.getCurrentTime());
                    handler.post(this);
                }
            });
        }
    
    }


    P.s
    Очень костлявая реализация.Я бы сделал по-другому.
    Ответ написан
    8 комментариев
  • Какие знания нужны, что бы написать подобное приложение (см. картинку)?

    Ну, раз вы хотите
    выложить в Google Play
    ,
    логично будет использовать Android SDK.
    В данном случае графические
    движки, типа LibGDX, будут излишни.Вам вполне хватит стандартных
    андройдовских элементов ui.
    Но , если вы хотите сделать кроссплатформенную игру с хорошим дизайном
    и интерфейсом, тогда присмотритесь к LibGDX.
    Ccылки на стандартные курсы(бесплатные, синяя кнопка):
    Android от Google
    LibGDX и 2d Platformer
    Ответ написан
    1 комментарий
  • Какие нужны знания java для разработки под андроид?

    java se на среднем уровне

    Так чего вы ждёте?Прямо сейчас и начинайте.
    В Android нет ничего мистического.Знания базового синтаксиса, основных конструкций,
    ООП, коллекций и начального представления о многопоточности - будет
    достаточно.
    Хорошая книга для начинающих(на ozon есть старое издание на русском)
    Курсы(English): Udacity
    (бесплатно, большая синяя кнопка внизу)
    Уроки(на русском):Startandroid
    Ответ написан
    Комментировать
  • Есть ли смысл обучаться HTML, CSS, JS и Java на teamtreehouse.com?

    Потрясающий сайт для начинающих!По Front-end куча материала.
    Тем-более есть возможность получить триал на месяц или 14 дней.
    По сравнению с Udacity больше практических заданий(то есть посмотрели видео и
    сразу написали код).
    Между прочим советую обратить внимание на Udacity.Тоже восхитительный сервис,
    но всё бесплатно(кроме Nanodegree).
    Ответ написан
    3 комментария
  • Как расширить класс java за счет java.io?

    Так, и сделать, как вы сами сказали - расширить.
    В данном случае "унаследовать":

    import java.io.BufferedReader;
    import java.io.Reader;
    
    public class GetSet extends BufferedReader {
        private int intVariable;
        private double doubleVariable;
        private String stringVariable;
    
        public GetSet(Reader in, int sz) {
            super(in, sz);
        }
    
        public GetSet(Reader in) {
            super(in);
        }
    
        public int getIntVariable() {
            return intVariable;
        }
    
        public void setIntVariable(int newIntVariable) {
            intVariable = newIntVariable;
        }
    
        public double getDoubleVariable() {
            return doubleVariable;
        }
    
        public void setDoubleVariable(double newDoubleVariable) {
            doubleVariable = newDoubleVariable;
        }
    
        public String getStringVariable() {
            return stringVariable;
        }
    
        public void setStringVariable(String newStringVariable) {
            stringVariable = newStringVariable;
        }
    
        public void message() {
    
            System.out.println("Int variable = " + intVariable +
                    "\nDouble variable = " + doubleVariable +
                    "\nString variable = " + "\"" + stringVariable + "\"");
    
        }
    }

    Единственное замечание,
    В Java такая запись некорректна:
    getset.setIntVariable = getset.readLine();
    Параметры функции задаются так:
    getset.setIntVariable(Integer.parseInt(getset.readLine()));

    Можно немного изменить функцию:
    public void setIntVariable(String s) {
            intVariable = Integer.parseInt(s);
        }
    Ответ написан
    5 комментариев
  • Узнать время в нужном мне часовом поясе?

    Используем класс SimpleDateFormat:
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    format.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date date = format.parse("2015-01-23T09:10:00");
    Ответ написан
    Комментировать
  • Как редактировать текстовые файлы в java построчно?

    List lines = Files.readAllLines(Paths.get("res/file.txt"));
    //перебираете циклом
    for(String s : lines)
    {
    s = "Бла-бла-бла!"
    }
    /* Если нужно удалить - для перебора используйте Iterator.
    Не забудьте : */ 
    Files.write(Paths.get("res/file.txt"), lines);
    //иначе результат не запишется


    С FileWriter и BufferedWriter также.
    Ответ написан
    Комментировать
  • Создание экземпляра класса эквивалентен созданию переменной?

    Насколько я понимаю вы новичок в Java.
    Советую изучить вот эту статью для начала.
    И вообще, лучше осилить 4 главы из этой книги(можно легко найти в сети).С ходу объяснить невозможно.
    В Java Object object;- это всего-лишь ссылка.Вы просто декларируете переменную.Чтобы присвоить ей объект в Куче(специальная структура данных, в которой хранятся все объекты JVM), мы используем object = new Object();
    Такой подход позволяет динамически менять объекты, использовать полиморфизм, отложенную инициализацию и т.д.

    P.s
    int x = new int(); написать нельзя, потому что int - это примитивный тип.
    Ответ написан
    1 комментарий
  • Как редактировать текстовый файл?

    Стандартный ввод и вывод.
    Имя файла задавать, как:"имя_папки\\имя_файла", то есть: "resources\\file.txt"(сепаратор зависит от вашей системы)
    Вот ссылочка на работу с текстовыми файлами в Java SE 8.
    Нас интересует пункт Working with Files.Предыдущие версии , я думаю, вы сами найдёте.
    Ответ написан
  • Что именно значит ошибка?

    Android позволяет работать с Ui только в основном потоке.Проблему можно решить классом Handler.
    Ответ написан
    Комментировать
  • В чём проблема моей реализации игры Guess Number?

    TechCloud
    @TechCloud Автор вопроса
    1 + 1 = 3
    Спасибо всем кто участвовал!Проблему выявил сам, и это не была инициализация массива.

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashSet;
    import java.util.Set;
    
    public class Finder {
    
        public static void main(String[] args) throws IOException {
            int[] array = fillArray();
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int elements = array.length;
            int lowerBound = 0;
            int upperBound = elements - 1;
            int curIn;
            int step = 0;
            Set<Integer> integerSet = new HashSet<>();
            while (true) {
                curIn = (lowerBound + upperBound) / 2;
                /*if (lowerBound > upperBound) {
                    System.out.println("You are lying!Your number is " + array[curIn]);
                    break;
                }*/
               if (integerSet.size() == 1000) {
                    System.out.println("Your number is " + array[curIn]);
                   System.out.println(String.format("Computer used %s steps",step));
                    break;
                } else if (integerSet.size() == 999) {
                    System.out.println("Your number is " + array[curIn + 1]);
                   System.out.println(String.format("Computer used %s steps",step));
                    break;
                }
                System.out.println(integerSet.size());
                System.out.println(String.format("Is it more than %s ?", array[curIn]));
                String answer = br.readLine();
    
                if (answer.equals("Yes")) {
                    lowerBound = curIn + 1;
                    for (int i = array[curIn]; i > 0; i--) {
                        integerSet.add(array[i]);
                    }
    
                } else if (answer.equals("No")) {
                    upperBound = curIn - 1;
                    for (int i = array[curIn]; i < 1000; i++) {
                        integerSet.add(array[i]);
                    }
    
                }
    
                step++;
            }
    
        }
    
        public static int[] fillArray() {
            int[] array = new int[1000];
            for (int i = 0; i < 1000; i++) {
                array[i] = i + 1;
            }
            return array;
        }
    }


    Коряво, но мне не нужен был идеальный код)
    Ответ написан
  • В какой последовательности изучать языки программирования?

    Я бы изучал так: Python - C - C#/Java/C++.
    PHP - изучать на любом этапе, кроме начального.
    После изучения одного из языков последнего этапа и основ ООП другие будут
    учиться очень быстро.
    Ответ написан
    3 комментария
  • Какой язык выбрать для андроид?

    Если Вы изучите Java , то будете знать C# на 80% и наоборот.
    Делать приложения для Android можно и на Java(нативное решение) и на C#(Xamarin).
    Насчёт игр:на Java нет таких крутых движков, которые превзошли бы Unity, где используется C#.
    Начинать изучение стоит с английского языка, потому что большинство хороших обучающих материалов
    написано именно на нём.
    Затем Вам нужно освоить основы программирования на каком-нибудь простом императивном языке.Например
    Python .Когда Вы будете знать, что такое типы данных, условный оператор, циклы и т.д , можете идти дальше.
    На этом этапе Вы изучаете Java/C# и ООП.Далее по-своему желанию можете изучить алгоритмы и структуры данных, но впрочем это не обязательно.
    Ну, а на последнем этапе изучаете ту технологию, которая Вас интересует.
    Ответ написан
    1 комментарий