• ,

level25.lesson07.task01

Может я перегрелся, может другая причина… но… не пойму, что от меня хотят

package com.javarush.test.level25.lesson07.task01;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

/* Работать в поте лица!
Реализуйте логику метода interrupt, который должен прерывать
трэд предварительно закрыв используемые ресурсы
Используйте метод super-класса в блоке finally
*/
public class Solution extends Thread {
    private static final int BUFFER_SIZE = 2000;    //2000 bytes
    private final Socket socket;
    private final InputStream in;

    public Solution(Socket socket) throws IOException {
        this.socket = socket;
        this.in = socket.getInputStream();
    }

    public void interrupt() {
        //implement logic here
        super.interrupt();
    }

    public void run() {
        try {
            byte[] buf = new byte[BUFFER_SIZE];
            while (!isInterrupted()) {
                int count = in.read(buf);
                if (count < 0) {
                    break;
                } else {
                    if (count > 0) {
                        //process buffer here
                    }
                }
            }
        } catch (IOException ignored) {
        } finally {
            try {
                socket.close();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
  • ,

Максимальное и минимальное числа в массиве

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

Задача: Создать массив на 20 чисел. Заполнить его числами с клавиатуры. Найти максимальное и минимальное числа в массиве.
Вывести на экран максимальное и минимальное числа через пробел.

  • ,

level17.lesson10.home04 в чем мои рассуждения не верны?

package com.javarush.test.level17.lesson10.home04;

/* Синхронизированные методы
Установить модификатор synchronized только тем методам, которым необходимо
*/

public class Solution {
private double param = Math.random();

//синхронизируем так как выполняется метод 3 c переменной класса param
private void method0() {
double i = method3();
}

// синхронизируем так как вызывается метод 0 который вызывает переменную класса param
protected synchronized void method1(String param1) {
Solution solution = new Solution();
solution.method0();
}
// синхронизируем так как может инкриментироваться переменная класса param приведенная к int
public synchronized void method2(int param1) {
param1++;
}
// синхронизируется так как вызывается переменная класса param
synchronized double method3() {
double random = Math.random();
return random + param;
}
// не синхронизируется потому что в классе не обращается к переменным, ничего не меняет, просто создает объект.
private void method4() {
new StringBuilder().append(1).append(1).append(1).append(1);
}

//синхронизируется так как может получить переменную класса param приведенную к String
synchronized protected void method5(String param2) {
new StringBuffer().append(param2).append(param2).append(param2);
}
//синхронизируется так как может получить переменную класса param приведенную к int + вызывает метод 7
synchronized public String method6(int param2) {
System.out.println(«Thinking....»);
method7(5e-2);
return «Got it!»;
}
//синхронизируется так как может получить переменную класса param
synchronized String method7(double param2) {
return "" + param2;
}
}

level16.lesson13.home07

package com.javarush.test.level16.lesson13.home07;

import java.util.ArrayList;
import java.util.List;

/* Поиграем?
Три человека играют в игру. Каждый игрок(Gamer) характеризуется двумя параметрами: фамилией(name) и количеством действий в секунду (rating).
Нужно вывести в консоль ход игры и определить победителя и проигравших.
Итак...
1. Разберись, что делает программа.
1.1. List<String> steps хранит последовательность действий, которое каждый игрок выполняет от 0 до последнего.
1.2. isWinnerFound показывает, найден победитель или нет.
1.3. метод sleep выбрасывает InterruptedException и принимает параметр типа long.
1.4. Игорки играют независимо друг от друга.

2. Реализуйте логику метода run так, чтобы для каждого игрока:
2.1. за 1 секунду через равные интервалы времени выводилось в консоль rating описанных в steps действий.
2.2. Любой текст должен начинаться с фамилии игрока (метод getName()), потом следовать двоеточие, а затем сам текст. Пример: [Ivanov:Начало игры].
2.3. Когда игрок выполнит все действия из steps, то он считается победителем. Выведите [getName() + ":победитель!"].
2.4. Когда найден победитель, то игра останавливается, и остальные игроки считаются побежденными. Выведите для них [getName() + ":проиграл"].
*/

public class Solution {
    public static void main(String[] args) throws InterruptedException {
        OnlineGame onlineGame = new OnlineGame();
        onlineGame.start();
    }

    public static class OnlineGame extends Thread {
        public static volatile boolean isWinnerFound = false;

        public static List<String> steps = new ArrayList<String>();

        static {
            steps.add("Начало игры");
            steps.add("Сбор ресурсов");
            steps.add("Рост экономики");
            steps.add("Убийство врагов");
        }

        protected Gamer gamer1 = new Gamer("Ivanov", 3);
        protected Gamer gamer2 = new Gamer("Petrov", 1);
        protected Gamer gamer3 = new Gamer("Sidorov", 5);

        public void run() {
            gamer1.start();
            gamer2.start();
            gamer3.start();

            while (!isWinnerFound) {
            }
            gamer1.interrupt();
            gamer2.interrupt();
            gamer3.interrupt();
        }
    }

    public static class Gamer extends Thread {
        private int rating;

        public Gamer(String name, int rating) {
            super(name);
            this.rating = rating;
        }

        @Override
        public void run() {
            //Add your code here - добавь код тут
            try
            {
                for (String s : OnlineGame.steps)
                {
                    Thread.sleep(1000/rating);
                    System.out.println(getName() + ":" + s);
                }
                System.out.println(getName() + ":победитель!");
                OnlineGame.isWinnerFound = true;

            }
            catch (InterruptedException e)
            {
                System.out.println(getName() + ":проиграл");
            }
        }
    }
}


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