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

com.javarush.task.task19.task1903

Помогите разобраться, в чём проблема? Работает как надо — вывод как в примере, условия выполнены…

/*
Адаптация нескольких интерфейсов
Адаптируй IncomeData к Customer и Contact.
Классом-адаптером является IncomeDataAdapter.
Инициализируйте countries перед началом выполнения программы. Соответствие кода страны и названия:
UA Ukraine
RU Russia
CA Canada
Дополнить телефонный номер нулями до 10 цифр при необходимости (смотри примеры).
Обратите внимание на формат вывода фамилии и имени человека.
*/


import java.util.HashMap;
import java.util.Map;

public class Solution {
    public static Map < String, String > countries = new HashMap < String, String > ();
    static {
        countries.put("UA", "Ukraine");
        countries.put("RU", "Russia");
        countries.put("CA", "Canada");
    }
    public static void main(String[] args) {
    }

    public static class IncomeDataAdapter implements Customer, Contact {
        private IncomeData data;
        public IncomeDataAdapter(IncomeData data) {
            this.data = data;
        }
        @Override
        public String getCompanyName() {

            return data.getCompany();
        }
        @Override
        public String getCountryName() {

            return countries.get(data.getCountryCode());
        }
        @Override
        public String getName() {
            String lastName = data.getContactLastName();
            String firstName = data.getContactFirstName();
            return lastName + ", " + firstName;
        }
        @Override
        public String getPhoneNumber() {
            String number = String.valueOf(data.getPhoneNumber());
            while (number.length() < 10) {
                number = 0 + number;
            }
            String phone = "+" + String.valueOf(data.getCountryPhoneCode()) + "(" + number.substring(0, 3) + ")" + number.substring(3, 6) + "-" + number.substring(6, 8) + "-" + number.substring(8, 10);
            return phone;
        }
    }
    public static interface IncomeData {
        String getCountryCode(); //example UA
        String getCompany(); //example JavaRush Ltd.
        String getContactFirstName(); //example Ivan
        String getContactLastName(); //example Ivanov
        int getCountryPhoneCode(); //example 38
        int getPhoneNumber(); //example 501234567
    }
    public static interface Customer {
        String getCompanyName(); //example JavaRush Ltd.
        String getCountryName(); //example Ukraine
    }
    public static interface Contact {
        String getName(); //example Ivanov, Ivan
        String getPhoneNumber(); //example +38(050)123-45-67
    }
}


Это main с проверкой:


        IncomeData data = new IncomeData() {
            @Override
            public String getCountryCode() {
                return "UA";
            }

            @Override
            public String getCompany() {
                return "JavaRush Ltd.";
            }
            @Override
            public String getContactFirstName() {
                return "Ivan";
            }
            @Override
            public String getContactLastName() {
                return "Ivanov";
            }
            @Override
            public int getCountryPhoneCode() {
                return 38;
            }
            @Override
            public int getPhoneNumber() {
                return 501234567;
            }
        };
        Contact
        var = new IncomeDataAdapter(data);
        Customer var2 = new IncomeDataAdapter(data);
        System.out.println(var2.getCompanyName());
        System.out.println(var2.getCountryName());
        System.out.println(var.getName());
        System.out.println(var.getPhoneNumber());

com.javarush.task.task19.task1906

/*
Четные байты
Считать с консоли 2 имени файла.
Вывести во второй файл все байты с четным индексом.

Пример:
второй байт, четвертый байт, шестой байт и т.д.

Закрыть потоки ввода-вывода.
*/

package com.javarush.task.task19.task1906;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws Exception {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileReader fileReader = new FileReader(bufferedReader.readLine());
        FileWriter fileWriter = new FileWriter(bufferedReader.readLine());
        bufferedReader.close();

        int count = 1;

        while (fileReader.ready()){
            if ((count%2)==0){
                fileWriter.write(fileReader.read());
            }
            count++;
        }
        fileReader.close();
        fileWriter.close();
    }
}


Не проходит проверку. Подозреваю, что считывать нужно всё-таки байты, а не символы? Для этого нужно написать адаптер от FileReader к InputStream или как-то по-другому? Какой тогда интерфейс должен реализовывать класс-адаптер, если InputStream это не интерфейс? Или можно унаследоваться от InputStream? Помогите плс, кто шарит. Если что, в задаче обязательно использовать именно FileReader.

task31.task3101 Что же еще нужно, чтобы задача прошла тестирование? Help!

Проход по дереву файлов

1. На вход метода main подаются два параметра.

Первый — path — путь к директории, второй — resultFileAbsolutePath — имя файла, который будет содержать результат.

2. Для каждого файла в директории path и в ее всех вложенных поддиректориях выполнить следующее:

2.1. Если у файла длина в байтах больше 50, то удалить его (используй метод FileUtils.deleteFile).

2.2. Если у файла длина в байтах НЕ больше 50, то для всех таких файлов:

2.2.1. Отсортировать их по имени файла в возрастающем порядке, путь не учитывать при сортировке.

2.2.2. Переименовать resultFileAbsolutePath в ‘allFilesContent.txt‘ (используй метод FileUtils.renameFile).

2.2.3. В allFilesContent.txt последовательно записать содержимое всех файлов из п. 2.2.1. Тела файлов разделять «n«.

Все файлы имеют расширение txt.

package com.javarush.task.task31.task3101;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.TreeSet;
import java.util.Comparator;


/* 
Проход по дереву файлов
*/
public class Solution {
    public static void main(String[] args) throws IOException{

        TreeSet<SortedFile> set = new TreeSet<>();
        File dir = new File(args[0]);
        Path path = dir.toPath();

        Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
                File file = path.toFile();
                if (file.length() > 50)
                    FileUtils.deleteFile(file);
                else
// добавляю в сэт файловый объект отсортированный по имени файла без учета пути к нему
// для чего создала класс с компаратором
                    set.add(new SortedFile(file));
                return FileVisitResult.CONTINUE;
            }
        });

        FileInputStream fis;
        String resultFileAbsolutePath = args[1];
        File source = new File(resultFileAbsolutePath);
        if (!source.exists())
            source.createNewFile();

        File destination =  new File(source.getParent() + "\\" + "allFilesContent.txt");
        FileUtils.renameFile(source, destination);

        FileOutputStream allFilesContent = new FileOutputStream(destination);

        for (SortedFile f : set)
        {
            fis = new FileInputStream(f.getAbsolutePath());
            while (fis.available() > 0)
                allFilesContent.write(fis.read());
            fis.close();
            allFilesContent.write(System.lineSeparator().getBytes());
        }
        allFilesContent.close();
    }

     public static void deleteFile(File file) {
        if (!file.delete()) System.out.println("Can not delete file with name " + file.getName());
    }

    public static class SortedFile implements Comparable<SortedFile>
    {
        File file;
        public SortedFile(File file)
        {
            this.file = file;
        }

        public String getAbsolutePath ()
        {
            return file.getAbsolutePath();
        }

        @Override
        public int compareTo(SortedFile o) {
            return file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf('\\')).compareTo(o.getAbsolutePath().substring(o.getAbsolutePath().lastIndexOf('\\')));
        }
    }
}
package com.javarush.task.task31.task3101;

        import java.io.File;

public class FileUtils {

    public static void deleteFile(File file) {
        if (!file.delete()) System.out.println("Can not delete file with name " + file.getName());
    }

    public static void renameFile(File source, File destination) {
        if (!source.renameTo(destination)) System.out.println("Can not rename file with name " + source.getName());
    }
}


Задача проверку не проходит.
Рекомендации валидатор выдает следующие:
1. Файл, который приходит вторым параметром в main, должен быть переименован в allFilesContent.txt
2. Нужно создать поток для записи в переименованный файл.
3. Пройдись по всем файлам в директории, которая приходит первым параметром в main, и всех ее поддиректориях. Файлы с размером более 50 байт нужно удалить используя метод FileUtils.deleteFile.
4. Содержимое всех файлов, размер которых не превышает 50 байт, должно быть записано в файл allFilesContent.txt в отсортированном по имени файла порядке.
5. Поток для записи в файл закрыть.

Все условия соблюдены. Кто решил, помогите, пожалуйста!

task31.task3101 Что же еще нужно, чтобы задача прошла тестирование? Help!

Проход по дереву файлов

1. На вход метода main подаются два параметра.

Первый — path — путь к директории, второй — resultFileAbsolutePath — имя файла, который будет содержать результат.

2. Для каждого файла в директории path и в ее всех вложенных поддиректориях выполнить следующее:

2.1. Если у файла длина в байтах больше 50, то удалить его (используй метод FileUtils.deleteFile).

2.2. Если у файла длина в байтах НЕ больше 50, то для всех таких файлов:

2.2.1. Отсортировать их по имени файла в возрастающем порядке, путь не учитывать при сортировке.

2.2.2. Переименовать resultFileAbsolutePath в ‘allFilesContent.txt‘ (используй метод FileUtils.renameFile).

2.2.3. В allFilesContent.txt последовательно записать содержимое всех файлов из п. 2.2.1. Тела файлов разделять «n«.

Все файлы имеют расширение txt.

package com.javarush.task.task31.task3101;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.TreeSet;
import java.util.Comparator;


/* 
Проход по дереву файлов
*/
public class Solution {
    public static void main(String[] args) throws IOException{

        TreeSet<SortedFile> set = new TreeSet<>();
        File dir = new File(args[0]);
        Path path = dir.toPath();

        Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
                File file = path.toFile();
                if (file.length() > 50)
                    FileUtils.deleteFile(file);
                else
// добавляю в сэт файловый объект отсортированный по имени файла без учета пути к нему
// для чего создала класс с компаратором
                    set.add(new SortedFile(file));
                return FileVisitResult.CONTINUE;
            }
        });

        FileInputStream fis;
        String resultFileAbsolutePath = args[1];
        File source = new File(resultFileAbsolutePath);
        if (!source.exists())
            source.createNewFile();

        File destination =  new File(source.getParent() + "\\" + "allFilesContent.txt");
        FileUtils.renameFile(source, destination);

        FileOutputStream allFilesContent = new FileOutputStream(destination);

        for (SortedFile f : set)
        {
            fis = new FileInputStream(f.getAbsolutePath());
            while (fis.available() > 0)
                allFilesContent.write(fis.read());
            fis.close();
            allFilesContent.write(System.lineSeparator().getBytes());
        }
        allFilesContent.close();
    }

     public static void deleteFile(File file) {
        if (!file.delete()) System.out.println("Can not delete file with name " + file.getName());
    }

    public static class SortedFile implements Comparable<SortedFile>
    {
        File file;
        public SortedFile(File file)
        {
            this.file = file;
        }

        public String getAbsolutePath ()
        {
            return file.getAbsolutePath();
        }

        @Override
        public int compareTo(SortedFile o) {
            return file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf('\\')).compareTo(o.getAbsolutePath().substring(o.getAbsolutePath().lastIndexOf('\\')));
        }
    }
}
package com.javarush.task.task31.task3101;

        import java.io.File;

public class FileUtils {

    public static void deleteFile(File file) {
        if (!file.delete()) System.out.println("Can not delete file with name " + file.getName());
    }

    public static void renameFile(File source, File destination) {
        if (!source.renameTo(destination)) System.out.println("Can not rename file with name " + source.getName());
    }
}


Задача проверку не проходит.
Рекомендации валидатор выдает следующие:
1. Файл, который приходит вторым параметром в main, должен быть переименован в allFilesContent.txt
2. Нужно создать поток для записи в переименованный файл.
3. Пройдись по всем файлам в директории, которая приходит первым параметром в main, и всех ее поддиректориях. Файлы с размером более 50 байт нужно удалить используя метод FileUtils.deleteFile.
4. Содержимое всех файлов, размер которых не превышает 50 байт, должно быть записано в файл allFilesContent.txt в отсортированном по имени файла порядке.
5. Поток для записи в файл закрыть.

Все условия соблюдены. Кто решил, помогите, пожалуйста!

task17.task1720 задача решена, но не понятно, какой был баг?

вот условие и задача


Банкомат

Разберись, как работает программа



Во время тестирования лог содержит следующее:

…..

Добавляем 100, на счету 1100

Добавляем 100, на счету 1200

Тратим 1000, на счету 100

Недостаточно денег

…..



Создан баг:

При списании денег со счета теряются деньги



Найти и исправить ошибку



package com.javarush.task.task17.task1720;

import java.math.BigDecimal;

public class BankAccount {
    private BigDecimal balance;
    private String owner;

    public BankAccount(String owner) {
        this(BigDecimal.ZERO, owner);
    }

    public BankAccount(BigDecimal balance, String owner) {
        this.balance = balance;
        this.owner = owner;
    }

    public void deposit(BigDecimal money) {
        BigDecimal newBalance = balance.add(money);
        System.out.println("Добавляем " + money + ", на счету " + newBalance);
        balance = newBalance;
    }

    public synchronized void withdraw(BigDecimal money) throws NotEnoughMoneyException {
        BigDecimal newBalance = balance.subtract(money);

        if (newBalance.compareTo(BigDecimal.ZERO) < 0) throw new NotEnoughMoneyException();

        balance = newBalance;
        System.out.println("Тратим " + money + ", на счету " + balance);
    }

    public void deposit(String money) {
        deposit(new BigDecimal(money));
    }

    public void withdraw(String money) throws NotEnoughMoneyException {
        withdraw(new BigDecimal(money));
    }
}



package com.javarush.task.task17.task1720;

public class NotEnoughMoneyException extends Exception {
}



package com.javarush.task.task17.task1720;

public class Bankomat {

    static BankAccount account = new BankAccount("Amigo");

    public static volatile boolean isStopped;

    public static void main(String[] args) throws InterruptedException {
        addMoney.start();
        SpendThread spendThread = new SpendThread();
        SpendThread spendThread1 = new SpendThread();
        SpendThread spendThread2 = new SpendThread();
        spendThread.start();
        spendThread1.start();
        spendThread2.start();
        Thread.sleep(4000);
        isStopped = true;
    }

    private static Thread addMoney = new Thread() {
        @Override
        public void run() {
            while (!isStopped) {
                account.deposit("1000");            //кладем на счет
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    break;
                }
            }
        }
    };


    public static class SpendThread extends Thread {

        @Override
        public void run() {
            while (!isStopped) {
                try {
                    account.withdraw("100");             //снимаем со счета
                } catch (NotEnoughMoneyException e) {
                    System.out.println("Недостаточно денег");
                }
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    break;
                }
            }
        }
    }
}


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

task38.task3801 что не так? (админы, обратите внимание)

Исправь ошибки в коде
Исключения NameIsEmptyException и NameIsNullException должны быть checked.
Все типы исключений должны быть обработаны.
Реализацию методов main() и getNumberOfCharacters() не менять.

public class Solution {
    public static void main(String[] args) {
        if (args.length > 0) {
            try {
                System.out.println("Имя содержит " + NameChecker.getNumberOfCharacters(args[0]) + " символов");
            } catch (Exception e) {
                System.out.println(e.toString());
            } catch (NameIsNullException e) {
                System.out.println("Ошибка: Имя не задано");
            } catch (NameIsEmptyException e) {
                System.out.println("Ошибка: Имя пустое");
            }
        }
    }
}

public class NameChecker {
    private static final int MAX_NUMBER_OF_CHARACTERS = 100500;
    public static int getNumberOfCharacters(String name) throws NameIsEmptyException, NameIsNullException, Exception {
        if (name == null)
            throw new NameIsNullException();
        else if (name.isEmpty())
            throw new NameIsEmptyException();

        int length = name.length();
        if (length > MAX_NUMBER_OF_CHARACTERS)
            throw new Exception("Слишком длинное имя");
        return length;
    }
}

public class NameIsEmptyException extends Throwable {
}

public class NameIsNullException extends Throwable{
}

валидатор выдает непонятные подсказки: если не менять мэйн и метод то кастом исключения д.б. наследниками тровэйбл. и в сигнатуру метода надо добавить эксепшин
в таком виде не принимает. ВСЕ РАБОТАЕТ, что не так??
  • ,

task20.task2002 | level20.lesson02.task02 Не могу до конца понять условие

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

Читаем и пишем в файл: JavaRush
Реализуйте логику записи в файл и чтения из файла для класса JavaRush.
В файле your_file_name.tmp может быть несколько объектов JavaRush.
Метод main реализован только для вас и не участвует в тестировании.

То что выделено жирным, для меня загадка. То есть я не понимаю, что под этим подразумевается. Можете обьяснить, что от меня требуется и что меняет данное условие в save/load методах?

Код Solution класса:

package com.javarush.task.task20.task2002;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/* 
Читаем и пишем в файл: JavaRush
*/
public class Solution {
    public static void main(String[] args) {
        //you can find your_file_name.tmp in your TMP directory or fix outputStream/inputStream according to your real file location
        //вы можете найти your_file_name.tmp в папке TMP или исправьте outputStream/inputStream в соответствии с путем к вашему реальному файлу
        try {
            File your_file_name = File.createTempFile("your_file_name", null);
            OutputStream outputStream = new FileOutputStream("/Users/mac/Documents/JavaRushTasks/2.JavaCore/src/com/javarush/task/task20/task2002/File1");
            InputStream inputStream = new FileInputStream("/Users/mac/Documents/JavaRushTasks/2.JavaCore/src/com/javarush/task/task20/task2002/File1");

            JavaRush javaRush = new JavaRush();
            //initialize users field for the javaRush object here - инициализируйте поле users для объекта javaRush тут
            User user = new User();
            user.setFirstName("Vangelis");
            user.setLastName("Kondratevi");
            user.setBirthDate(new Date());
            user.setMale(true);
            user.setCountry(User.Country.UKRAINE);
            javaRush.users.add(user);

            javaRush.save(outputStream);
            outputStream.flush();

            JavaRush javaRush1 = new JavaRush();
            //initialize users field for the javaRush object here - инициализируйте поле users для объекта javaRush тут
            User user1 = new User();
            user1.setFirstName("Andrei");
            user1.setLastName("Karpovich");
            user1.setBirthDate(new Date());
            user1.setMale(true);
            user1.setCountry(User.Country.OTHER);
            javaRush1.users.add(user1);

            javaRush1.save(outputStream);
            outputStream.flush();

            JavaRush loadedObject = new JavaRush();
            loadedObject.load(inputStream);
            //check here that javaRush object equals to loadedObject object - проверьте тут, что javaRush и loadedObject равны

            outputStream.close();
            inputStream.close();

        } catch (IOException e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with my file");
        } catch (Exception e) {
            //e.printStackTrace();
            System.out.println("Oops, something wrong with save/load method");
        }
    }

    public static class JavaRush {
        public List<User> users = new ArrayList<>();
        private static int objCount = 0;

        public void save(OutputStream outputStream) throws Exception {
            //implement this method - реализуйте этот метод
            PrintWriter writer = new PrintWriter(outputStream);
            String areUsersPresent = users != null ? "yes" : "no";
            writer.println(areUsersPresent);
            if(users != null) {
                int size = users.size();
                writer.println(size);
                for (int i = 0; i < size; i++) {
                    User user = users.get(i);
                    String firstName = user.getFirstName();
                    writer.println(firstName);
                    String lastName = user.getLastName();
                    writer.println(lastName);
                    String bd = new SimpleDateFormat("dd-MM-yyyy").format(user.getBirthDate());
                    writer.println(bd);
                    String isMale = user.isMale() ? "yes" : "no";
                    writer.println(isMale);
                    String country = user.getCountry().getDisplayedName();
                    writer.println(country);
                }
            }
            writer.flush();
        }

        public void load(InputStream inputStream) throws Exception {
            //implement this method - реализуйте этот метод
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String areUsersPresent = reader.readLine();
            if(areUsersPresent.equals("yes")){
                int size = Integer.parseInt(reader.readLine());
                if(size>0){
                    for (int i = 0; i < size; i++) {
                        User user = new User();
                        String firstName = reader.readLine();
                        user.setFirstName(firstName);

                        String lastname = reader.readLine();
                        user.setLastName(lastname);

                        Date bd = new SimpleDateFormat("dd-MM-yyyy").parse(reader.readLine());
                        user.setBirthDate(bd);

                        boolean isMale = reader.readLine().equals("yes");
                        user.setMale(isMale);

                        String countryStr = reader.readLine();
                        User.Country country;
                        if(countryStr.equals("Ukraine")){
                            country = User.Country.UKRAINE;
                        } else if(countryStr.equals("Russia")){
                            country = User.Country.RUSSIA;
                        } else {
                            country = User.Country.OTHER;
                        }
                        user.setCountry(country);
                        users.add(user);
                    }
                }
            }
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            JavaRush javaRush = (JavaRush) o;

            return users != null ? users.equals(javaRush.users) : javaRush.users == null;

        }

        @Override
        public int hashCode() {
            return users != null ? users.hashCode() : 0;
        }
    }
}


Код User класса:

package com.javarush.task.task20.task2002;

import java.util.Date;

public class User {
    private String firstName;
    private String lastName;
    private Date birthDate;
    private boolean isMale;
    private Country country;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }

    public boolean isMale() {
        return isMale;
    }

    public void setMale(boolean male) {
        isMale = male;
    }

    public Country getCountry() {
        return country;
    }

    public void setCountry(Country country) {
        this.country = country;
    }

    public static enum Country {
        UKRAINE("Ukraine"),
        RUSSIA("Russia"),
        OTHER("Other");

        private String name;

        private Country(String name) {
            this.name = name;
        }

        public String getDisplayedName() {
            return this.name;
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (isMale != user.isMale) return false;
        if (firstName != null ? !firstName.equals(user.firstName) : user.firstName != null) return false;
        if (lastName != null ? !lastName.equals(user.lastName) : user.lastName != null) return false;
        if (birthDate != null ? !birthDate.equals(user.birthDate) : user.birthDate != null) return false;
        return country == user.country;

    }

    @Override
    public int hashCode() {
        int result = firstName != null ? firstName.hashCode() : 0;
        result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
        result = 31 * result + (birthDate != null ? birthDate.hashCode() : 0);
        result = 31 * result + (isMale ? 1 : 0);
        result = 31 * result + (country != null ? country.hashCode() : 0);
        return result;
    }
}

Ошибка валидатора task25.task2515 Space (12)

В условии требуется создать конструктор с параметрами int, валидатор так не принимает.
Исправил на double — валидатор принял.


Space (12)

Теперь займемся кораблем.

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

Если нажал кнопку вправо — все время в право до упора.

Поэтому заведем специальную переменную dx, которая будет хранить направление движения корабля.

если dx = 1, корабль каждый ход идет на 1 вправо,

если dx = -1, корабль каждый ход идет на 1 влево.

Надо:

а) добавь конструктор, можно такой:

Радиус корабля будет равен 3. Корабль большой — это вам не ракета и не бомба.

public SpaceShip(int x, int y)

{

super(x, y, 3);

}


б) добавь в класс SpaceShip переменную dx (double, по умолчанию равна 0);

в) метод moveLeft(), устанавливает dx равной -1;

г) метод moveRight(), устанавливает dx равной 1.

Принятый конструктор:


public SpaceShip(double x, double y) {
        super(x, y, 3);
    }

task37.task3708 что не так ???!!!

отрабатывает правильно, но не хочет принимать

public class CachingProxyRetriever implements Retriever{
    private LRUCache<Long, Object> lruCache; //= new LRUCache<>(16);
    private OriginalRetriever originalRetriever;
    private Storage storage;

    public CachingProxyRetriever(Storage storage) {
        this.storage = storage;
        originalRetriever = new OriginalRetriever(storage);
        lruCache = new LRUCache<>(16);
    }

    @Override
    public Object retrieve(long id) {
        if (lruCache.containsKey(id)) {
            return lruCache.find(id);
        }else{
            Object obj = originalRetriever.retrieve(id);
            lruCache.set(id, obj);
            return obj;
        }
    }
}
  • ,

task15.task1504; Хелапани что ему не нравится не понимаю

public class Solution {
public static void main(String[] args) {
Listbooks = new LinkedList();
books.add(new Book.MarkTwainBook(«Tom Sawyer»));
books.add(new Book.AgathaChristieBook(«Hercule Poirot»));
System.out.println(books);
}

abstract static class Book {
private String author;

public Book(String author) {
this.author = author;
}

public abstract Book getBook();

public abstract String getTitle();

public String getOutputByBookType() {
String output = «output»;
if (getBook() instanceof Book.AgathaChristieBook) {
String agathaChristieOutput = author + ", " + getBook().getTitle() + " is a detective";
output = agathaChristieOutput;
} else if (getBook() instanceof Book.MarkTwainBook) {
String markTwainOutput = getBook().getTitle() + " book was written by " + author;
output = markTwainOutput;
}
return output;
}

public String toString() {
return getOutputByBookType();
}

public static class MarkTwainBook extends Book {
private String title;
private String name;

public MarkTwainBook(String title) {
super(«Mark Twain»);
this.title = title;
this.name = title;
}

@Override
public MarkTwainBook getBook() {
return Book.MarkTwainBook.this;
}

@Override
public String getTitle() {
return title;
}

public String getName() {
return name;
}
}

public static class AgathaChristieBook extends Book {
private String title;
private String name;

public AgathaChristieBook(String title) {
super(«Agatha Christie»);
this.title = title;
this.name = title;
}

@Override
public AgathaChristieBook getBook() {
return Book.AgathaChristieBook.this;
}

@Override
public String getTitle() {
return title;
}

public String getName() {
return name;
}
}

}
}

Считаем кол-во слов world - ПРОШУ ПОМОЩИ

Ни в какую не хочет проходить тест((( В чем моя ошибка? Вот код с заданием:
package com.javarush.test.level19.lesson05.task02;

/* Считаем слово
Считать с консоли имя файла.
Файл содержит слова, разделенные знаками препинания.
Вывести в консоль количество слов "world", которые встречаются в файле.
Закрыть потоки. Не использовать try-with-resources
*/

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Solution {
    public static void main(String[] args) throws IOException {

        int counter = 0;

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()));

        String[] words = fileReader.readLine().split("\\W+");

        for (int i = 0; i < words.length; i++) {
            if ("world".equals(words[i])) {
                counter++;
            }
        }

        System.out.println(counter);

        reader.close();
        fileReader.close();
    }
}
  • ,

level17.lesson10.home10

/* Посчитаем
1. Сделай так, чтобы результат успел посчитаться для всех элементов массива values НЕ используя Thread.sleep
2. Исправь synchronized блок так, чтобы массив values заполнился значением 1
*/

Если кто-то сделал эту задачу так как указано в условии, а именно — сделал изменения только в блоке synchronized и заполнил массив values единицами, без вызовов join() в мэйне, пожалуйста пришлите мне код в сообщении.
Так как я сделал эту задачу с вызовом джоинов, что противоречит условию задачи, но валидатор принимает.
Или дайте подсказку в комментариях в каком направлении копать.

public class Solution {
    public static void main(String[] args) throws InterruptedException {
        Counter counter1 = new Counter();
        Counter counter2 = new Counter();
        Counter counter3 = new Counter();
        Counter counter4 = new Counter();

        counter1.start();
        counter2.start();
        counter3.start();
        counter4.start();
        

        for (int i = 1; i <= 100; i++) {
            if (values[i] != 1) {
                System.out.println("Массив values содержит элементы неравные 1");
                break;
            }
        }
    }

    public static Integer count = 0;
    public static int[] values = new int[105];

    static {
        for (int i = 0; i < 105; i++) {
            values[i] = 0;
        }
    }

    public static void incrementCount() {
        count++;
    }

    public static int getCount() {
        return count;
    }

    public static class Counter extends Thread {
        @Override
        public void run() {
            do {
                synchronized (this)
                {
                    incrementCount();
                    values[getCount()]++;
                }

                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                }
            } while (getCount() < 100);
        }
    }
}