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

level18.lesson10.home05

Вывод как в условии, в первом файле вещественные, во втором округленные целые. Почему не принимает — не пойму.

import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

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

        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String inFileName = null;
            inFileName = reader.readLine();
            String outFileName = reader.readLine();
            reader.close();

            Scanner scanner = new Scanner(new InputStreamReader(new FileInputStream(inFileName)));

            PrintStream out = new PrintStream(
                    new BufferedOutputStream(
                            new FileOutputStream(outFileName)));

            String[] line = scanner.nextLine().split(" ");
            scanner.close();

            for (int i = 0; i < line.length; i++)
            {
                int d = new BigDecimal(Double.parseDouble(line[i])).setScale(0, RoundingMode.HALF_UP).intValue();
                if (i == line.length - 1)
                {
                    out.write((d+"").getBytes());
                    break;
                }
                out.write((d + " ").getBytes());

            }
            out.close();
        }
        catch (IOException e)
        {        }
    }
}
  • ,

level16.lesson07.task02

То ли лыжи не едут, то ли с тестами что-то не то. Не проходит и все.

Если Иванов делает 4 шага в секунду, то за 2 секунды он сделает 8 шагов.
Если Петров делает 2 шага в секунду, то за 2 секунды он сделает 4 шага.

Отшагали они у меня за 2 секунды как надо:
Petrov делает шаг №1!
Ivanov делает шаг №1!
Ivanov делает шаг №2!
Ivanov делает шаг №3!
Petrov делает шаг №2!
Ivanov делает шаг №4!
Ivanov делает шаг №5!
Petrov делает шаг №3!
Ivanov делает шаг №6!
Petrov делает шаг №4!
Ivanov делает шаг №7!
Ivanov делает шаг №8!

Сам код:

package com.javarush.test.level16.lesson07.task02;

/* Stopwatch (Секундомер)
1. Разберись, что делает программа.
2. Реализуй логику метода doSeveralSteps так, чтобы учитывалась скорость бегуна.
2.1. Метод getSpeed() в классе Runner показывает, сколько шагов в секунду делает бегун.
Нужно, чтобы бегун действительно делал заданное количество шагов в секунду.
Если Иванов делает 4 шага в секунду, то за 2 секунды он сделает 8 шагов.
Если Петров делает 2 шага в секунду, то за 2 секунды он сделает 4 шага.
2.2. Метод sleep в классе Thread принимает параметр типа long.
*/

public class Solution {
    public static volatile boolean isStopped = false;

    public static void main(String[] args) throws InterruptedException {
        Runner ivanov = new Runner("Ivanov", 4);
        Runner petrov = new Runner("Petrov", 2);
        //на старт!
        //внимание!
        //марш!
        ivanov.start();
        petrov.start();
        Thread.sleep(2000);
        isStopped = true;
        Thread.sleep(1000);
    }

    public static class Stopwatch extends Thread {
        private Runner owner;
        private int stepNumber;

        public Stopwatch(Runner runner) {
            this.owner = runner;
        }

        public void run() {
            try {
                while (!isStopped) {
                    doSeveralSteps();
                }
            } catch (InterruptedException e) {
            }
        }

        private void doSeveralSteps() throws InterruptedException {
            stepNumber++;
            //add your code here - добавь код тут
            System.out.println(owner.getName() + " делает шаг №" + stepNumber + "!");
            if (owner.getName().equals("Ivanov"))
                Thread.sleep(250L);
            if (owner.getName().equals("Petrov"))
                Thread.sleep(500L);
        }
    }

    public static class Runner {
        private String name;
        private double speed;
        Stopwatch stopwatch;

        public Runner(String name, double speed) {
            this.name = name;
            this.speed = speed;
            this.stopwatch = new Stopwatch(this);
        }

        public String getName() {
            return name;
        }

        public double getSpeed() {
            return speed;
        }

        public void start() {
            stopwatch.start();
        }
    }
}
  • ,

level18.lesson10.bonus03

Пара вопросов по задаче.

/* Прайсы 2
CrUD для таблицы внутри файла
Считать с консоли имя файла для операций CrUD
Программа запускается с одним из следующих наборов параметров:
-u id productName price quantity
-d id
Значения параметров:
где id - 8 символов
productName - название товара, 30 chars (60 bytes)
price - цена, 8 символов
quantity - количество, 4 символа
-u  - обновляет данные товара с заданным id
-d  - производит физическое удаление товара с заданным id (все данные, которые относятся к переданному id)

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity
Данные дополнены пробелами до их длины

Пример:
19846   Шорты пляжные синие           159.00  12
198478  Шорты пляжные черные с рисунко173.00  17
19847983Куртка для сноубордистов, разм10173.991234
*/


Что значит физическое удаление при -d? Если полностью удаление строчки из списка, то должны ли смещаться ID?
В примере ID в разнобой идут, должны ли они идти по порядку в реальном примере?
Хорошо бы условие дополнить тем, как будет меняться список при выполнении операций -d и -u.
  • ,

level09.lesson08.task03;

Не понимаю, какой из пунктов я не выполнил / выполнил не правильно?

/* Перехват выборочных исключений
1. Разберись, какие исключения бросает метод BEAN.methodThrowExceptions.
2. Метод processExceptions должен вызывать метод BEAN.methodThrowExceptions и обрабатывать исключения:
2.1. если возникло исключение FileSystemException, то логировать его (вызвать метод BEAN.log) и пробросить дальше
2.2. если возникло исключение CharConversionException или любое другое IOException, то только логировать его - вызвать метод BEAN.log
3. Добавь в сигнатуру метода processExceptions класс исключения, которое ты пробрасываешь в п.2.1.
4. В методе main обработай оставшееся исключение - логируй его. Используй try..catch

Подсказка:
Если ты захватил исключение MyException, которое не хотел захватывать, его можно пробросить дальше кодом вида:
catch (MyException e) {
throw e;
}
*/

public class Solution {
    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {
        try{
            processExceptions();
        }
        catch (IOException e){
            BEAN.log(e);
        }
    }

    public static void processExceptions()throws FileSystemException, IOException {
        try{
            BEAN.methodThrowExceptions();
        }
        catch (FileSystemException e){
            BEAN.log(e);
            throw  e;
        }
        catch (CharConversionException e){
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}
  • ,

level15.lesson12.home01

Код компилируется и работает корректно, но проверку не проходит. Подскажите в чем ошибка.

package com.javarush.test.level15.lesson12.home01;

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

/* Разные методы для разных типов
1. Считать с консоли данные, пока не введено слово "exit".
2. Для каждого значения вызвать метод print. Если значение:
2.1. содержит точку '.', то вызвать метод print для Double;
2.2. больше нуля, но меньше 128, то вызвать метод print для short;
2.3. больше либо равно 128, то вызвать метод print для Integer;
2.4. иначе, вызвать метод print для String.
*/

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader (new InputStreamReader(System.in));
        String console = reader.readLine();
        while (!console.equals("exit"))
        {

            try{
                if (console.contains("."))
                {
                    double Dbl = Double.parseDouble(console);
                    print(Dbl);
                }
                else if (Short.parseShort(console)>0 && Short.parseShort(console)<128)
                {
                    short Shorts = Short.parseShort(console);
                    print(Shorts);
                }
                else if (Integer.parseInt(console)>=128)
                {
                    int Inter = Integer.parseInt(console);
                    print(Inter);
                }
                else print(console);
            }
            catch (NumberFormatException e)
            {
                print(console);
            }
            console = reader.readLine();
        }

    }

    public static void print(Double value) {
        System.out.println("Это тип Double, значение " + value);
    }

    public static void print(String value) {
        System.out.println("Это тип String, значение " + value);
    }

    public static void print(short value) {
        System.out.println("Это тип short, значение " + value);
    }

    public static void print(Integer value) {
        System.out.println("Это тип Integer, значение " + value);
    }
}<code>
  • ,

level09.lesson11.bonus03

Программа работает правильно. Но не проходит =( Подскажите, пожалуйста.
package com.javarush.test.level09.lesson11.bonus03;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String> list = new ArrayList<String>();
        while (true)
        {
            String s = reader.readLine();
            if (s.isEmpty()) break;
            list.add(s);
        }

        String[] array = list.toArray(new String[list.size()]);
        sort(array);

        for (String x : array)
        {
            System.out.println(x);
        }
    }

    public static void sort(String[] array)
    {
        //Напишите тут ваш код
        for ( int i=0; i<array.length; i++)
        {
            for (int j=i+1; j<array.length; j++)
            {
                if (isNumber(array[i]) && isNumber(array[j]))
                {
                    if(isGreaterThen(array[j], array[i]))
                    {
                       // System.out.println(array[i] + " " + array[j]);

                        String t = array[i] ;
                        array[i] = array[j];
                        array[j] = t;
                      //  System.out.println(array[i] + " " + array[j]);
                       // System.out.println("------------------");
                    }
                }

                else if (!isNumber(array[i]) && !isNumber(array[j]))
                        {
                      if (isGreaterThen(array[i].toLowerCase(), array[j].toLowerCase() ))
                      {
                         // System.out.println(array[i] + " " + array[j]);
                          String t = array[i];
                          array[i] = array[j];
                          array[j] = t;
                        //  System.out.println(array[i] + " " + array[j]);
                         // System.out.println("------------------");
                      }
                }

            }
        }
    }

    //Метод для сравнения строк: 'а' больше чем 'b'
    public static boolean isGreaterThen(String a, String b)
    {
        return a.compareTo(b) > 0;
    }


    //строка - это на самом деле число?
    public static boolean isNumber(String s)
    {
        if (s.length() == 0) return false;

        for (char c : s.toCharArray())
        {
            if (!Character.isDigit© && c != '-') return false;
        }
        return true;
    }
}


И ещё я не пойму вот это условие
c != '-'
для чего оно?
  • ,

level08.lesson11.bonus03

Добрый день!
Подскажите, пожалуйста, где спряталась ошибка:
public static void sort(String[] array)
    {
        String helpList;
        for (int i = 1; i < array.length; i++) {
            for (int b = (array.length - 1); b >= i; b--) {
                if (array[b].charAt(0) == array[b - 1].charAt(0)) {
                    if (isGreaterThen(array[b], array[b - 1])) {
                        for (int a = 1; a < array[b - 1].length() - 1; a++) {
                            if (array[b].charAt(a) < array[b - 1].charAt(a)) {
                                helpList = array[b - 1];
                                array[b - 1] = array[b];
                                array[b] = helpList;
                                break;
                            }
                        }
                    } else {
                        for (int a = 1; a < array[b].length() - 1; a++) {
                            if (array[b].charAt(a) < array[b - 1].charAt(a)) {
                                helpList = array[b - 1];
                                array[b - 1] = array[b];
                                array[b] = helpList;
                                break;
                            }
                        }

                    }
                } else if (array[b].charAt(0) < array[b - 1].charAt(0)) {
                    helpList = array[b - 1];
                    array[b - 1] = array[b];
                    array[b] = helpList;
                }
            }
        }


    }

    //Метод для сравнения строк: 'а' больше чем 'b'
    public static boolean isGreaterThen(String a, String b)
    {
        return a.compareTo(b) >= 0;
    }
}

Ошибка возникает на стадии определения идентичных символов в строках, с индексом 0;
Берутся 2 строки из массива, количество пробежек по строке должно быть ограничено размером меньшей из 2 строк -1; Но через раз ловится ошибка — индекс элемента в строке превышен. Уже мозг себе вывихнул, пытаясь понять где происходит косяк. Главное подозрение падает на внутренний цикл замены элементов:
helpList = array[b - 1];
      array[b - 1] = array[b];
      array[b] = helpList;
  • ,

level16.lesson07.task02

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

package com.javarush.test.level16.lesson07.task02;

/* Stopwatch (Секундомер)
2. Реализуй логику метода doSeveralSteps так, чтобы учитывалась скорость бегуна.
2.1. Метод getSpeed() в классе Runner показывает, сколько шагов в секунду делает бегун.
Нужно, чтобы бегун действительно делал заданное количество шагов в секунду.
Если Иванов делает 4 шага в секунду, то за 2 секунды он сделает 8 шагов.
Если Петров делает 2 шага в секунду, то за 2 секунды он сделает 4 шага.
2.2. Метод sleep в классе Thread принимает параметр типа long.
*/

МЕТОД №1
private void doSeveralSteps() throws InterruptedException {
stepNumber++;
//add your code here — добавь код тут
Thread.sleep(1000L);
System.out.println(owner.getName() + " делает шаг №" + (stepNumber *owner.getSpeed())+ "!");
}
Вывод:
Petrov делает шаг №2.0!
Ivanov делает шаг №4.0!
Petrov делает шаг №4.0!
Ivanov делает шаг №8.0!

МЕТОД №2
private void doSeveralSteps() throws InterruptedException {
//add your code here — добавь код тут
Thread.sleep(1000L);
stepNumber = stepNumber + (int)owner.getSpeed();
System.out.println(owner.getName() + " делает шаг №" + stepNumber+ "!");
}
Вывод:
Ivanov делает шаг №4!
Petrov делает шаг №2!
Ivanov делает шаг №8!
Petrov делает шаг №4!

МЕТОД №3
private void doSeveralSteps() throws InterruptedException {
//add your code here — добавь код тут
Thread.sleep(1000L);
stepNumber +=owner.getSpeed();
System.out.println(owner.getName() + " делает шаг №" + stepNumber+ "!");
Вывод:
Petrov делает шаг №2!
Ivanov делает шаг №4!
Ivanov делает шаг №8!
Petrov делает шаг №4!
  • ,

level09.lesson11.home04

Ребята, почему не проходит? В программе выводит только на русском языке, надо на английском. Почитал туториал перевода языка не нашёл(
package com.javarush.test.level09.lesson11.home04;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/* Конвертер дат
Ввести с клавиатуры дату в формате «08/18/2013»
Вывести на экран эту дату в виде «AUG 18, 2013».
Воспользоваться объектом Date и SimpleDateFormat.
*/

public class Solution {

    public static void main(String[] args) {
        //Напишите тут ваш код

        Date date = new Date("08/18/2013");
        SimpleDateFormat sf = new SimpleDateFormat("MMM dd, yyyy");
        System.out.println(sf.format(date).toUpperCase());

       }
}
  • ,

level06.lesson05.task03

Добрый день!

Программа успешно прошла тестирование.

Но смущает тот факт, что ни разу не высветилось сообщение «Cat destroyed» или «Dog destroyed», как предусмотрено в коде.
Насколько это нормально? Правильно ли я выполнил задание?

/* 10 000 объектов Cat и Dog
Создать в цикле 10 000 объектов Cat и Dog. (Java-машина должна начать уничтожать неиспользуемые, и метод finalize хоть раз да вызовется).
*/