level09.lesson11.home02

Вопрос к проверке данной задачи
Я добавил sleep, и как то, на автомате throws InterruptedException в main и прошел проверку, без единого try, что не соответствует задаче.
з.ы. И, дайте возможность повторной валидации, если я хочу оптимизировать и проверить свой код.

public static void main(String[] args) throws InterruptedException
    {
        for (int i = 10; i >= 0; i--)
        {
            System.out.println(i);
            Thread.sleep(100);
        }
    }

level09.lesson11.home02

Вопрос к проверке данной задачи
Я добавил sleep, и как то, на автомате throws InterruptedException в main и прошел проверку, без единого try, что не соответствует задаче.
з.ы. И, дайте возможность повторной валидации, если я хочу оптимизировать и проверить свой код.
public static void main(String[] args) throws InterruptedException
    {
        for (int i = 10; i >= 0; i--)
        {
            System.out.println(i);
            Thread.sleep(100);
        }
    }
  • ,

level08.lesson11.home05

Вроде все правильно выводит, но проверку не проходит. Может кто подскажет что тут не так?
package com.javarush.test.level08.lesson11.home05;

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

/* Мама Мыла Раму. Теперь с большой буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа заменяет в тексте первые буквы всех слов на заглавные.
Вывести результат на экран.

Пример ввода:
  мама     мыла раму.

Пример вывода:
  Мама     Мыла Раму.
*/

public class Solution
{


    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();
        s=s.trim();
        String[] S= s.split(" ");

        for (int i =0;i<S.length;i++)
        {
            char a[]=S[i].toCharArray();

            a[0]=Character.toUpperCase(a[0]);

            System.out.print(a);

            if (i!=S.length-1)
                System.out.print(" ");

        }







    }


}
  • ,

level08.lesson11.bonus03

Задачу решил элегантно, специальным стандартным методом :)
Но меня интересует почему этот код не прошел тестирование?
Вроде работает правильно, может проблема в том что я сортировал только по первому символу?

package com.javarush.test.level08.lesson11.bonus03;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;

/* Задача по алгоритмам
Задача: Введи с клавиатуры 20 слов и выведи их в алфавитном порядке.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] array = new String[20];
        for (int i = 0; i < array.length; i++)
        {
            array[i] = reader.readLine();
        }

        sort(array);

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

    public static void sort(String[] array)
    {
        String r;
        for (int i = 0; i < array.length; i++)
        {
            for (int j = 0; j < array.length - i - 1; j++)
            {
                if (isGreaterThen(array[j].substring(0, 1), array[j + 1].substring(0, 1)))
                {
                    r = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = r;
                }
            }
        }
    }

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

level13.lesson11.bonus01;

/* Сортировка четных чисел из файла
1. Ввести имя файла с консоли.
2. Прочитать из него набор чисел.
3. Вывести на консоль только четные, отсортированные по возрастанию.
Пример ввода:
5
8
11
3
2
10
Пример вывода:
2
8
10
*/

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader( new InputStreamReader(System.in));
        InputStream in = new FileInputStream(reader.readLine());
        List<Integer> list = new ArrayList<Integer>();

        while (in.available() > 0){
            int num = Integer.parseInt(String.valueOf(in.read()));
            if (num % 2 == 0){
                list.add(num);
            }
        }


И так и сяк, но не могу понять. Как при чтении из файла определить значение и перевести его в int? Подскажите, кто что использовал для этого?

level13.lesson11.home04;

package com.javarush.test.level13.lesson11.home04;

/* Запись в файл
1. Прочесть с консоли имя файла.
2. Считывать строки с консоли, пока пользователь не введет строку "exit".
3. Вывести все строки в файл.
*/

import java.io.*;

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader((new InputStreamReader(System.in)));
        String fileName = reader.readLine();
        OutputStream outputStream = new FileOutputStream(fileName);

        while (true)
        {
            String s = reader.readLine();
            if (s.equals("exit")){
                outputStream.write(s.getBytes());
                break;
            }
            outputStream.write(s.getBytes());
        }

        outputStream.close();
        reader.close();
    }
}


Вопрос к знатокам, как добавить пробелы и enter? Идея, которая была у меня, это ввести строку в список, перевести в список байтов и выводить эту строку в файл, в конце вывода добавить пробел вручную, НО! возможно ли без таких махинаций, чтобы свести весь код к минимуму? Буду рад за помощь.

level10.lesson11.home05

package com.javarush.test.level10.lesson11.home05;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

/* Количество букв
Ввести с клавиатуры 10 строчек и подсчитать в них количество различных букв (для 33 букв алфавита).
Вывести результат на экран.
Пример вывода:
а 5
б 8
в 3
г 7
…
я 9
*/

public class Solution
{
    public static void main(String[] args)  throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        //алфавит
        ArrayList<Character> alphabet = new ArrayList<Character>();
        for(int i=0;i<32;i++)
        {
            alphabet.add( (char) ('а'+i));
        }
        alphabet.add(6,'ё');

        //ввод строк
        ArrayList<String> list = new ArrayList<String>();
        for(int i=0;i<10;i++)
        {
            String s = reader.readLine();
            list.add( s.toLowerCase());
        }

        ArrayList<Integer> number = new ArrayList<Integer>();
        for (int i = 0; i < 32; i++)
            number.add(0);

        for (int i = 0; i < list.size(); i++)
        {
            char[] m = list.get(i).toCharArray();
            for (int j1 = 0; j1 < alphabet.size(); j1++)
                for (int j2 = 0; j2 < m.length; j2++)
                    if (alphabet.get(j1).equals(m[j2]))
                        number.set(j1 ,number.get(j1) + 1);
        }

        for (int i = 0; i < number.size(); i++)
        {
            System.out.println(alphabet.get(i) + " " + number.get(i));
        }
    }
}


Проходит тест, но сервер не принимает, в чем может быть проблема?
  • ,

level08.lesson11.home09

Не проходит тестирование. Но результат выдает правильный. Помогите.
package com.javarush.test.level08.lesson11.home09;

import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;

/* Работа с датой
1. Реализовать метод isDateOdd(String date) так, чтобы он возвращал true, если количество дней с начала года — нечетное число, иначе false
2. String date передается в формате MAY 1 2013
*/

public class Solution
{
static String ruleDate;// Cтрока дата в читабельном формате
static Date dDate;
public static void main(String[] args)
{
String date = «APRIL 15 1979»;
String[] month ={«JANUARY»,«FEBRUARY»,«MARCH»,«APRIL»,«MAY»,«JUNE»,«JULY»,«AUGUST»,«SEPTEMBER»,«OCTOBER»,«NOVEMBER»,«DECEMBER»};
for (int i = 0; i < month.length; i++)
{
if (date.contains(month[i])) ruleDate = date.replace(month[i], Integer.toString(i + 1));// меняем слово месяца на его номер
}
if (isDateOdd(ruleDate)) System.out.println(«кол-во дней нечетно»);
else System.out.println(«кол-во дней четно»);

}

public static boolean isDateOdd(String date)
{
try
{
SimpleDateFormat format = new SimpleDateFormat(«MM dd yyyy»);
dDate= format.parse(date);// преобразовываем строку в дату
}
catch (ParseException e)
{
e.printStackTrace();
}
Date newYearDate = new Date(dDate.getYear(), 0, 1);// объявляем дату — начало года
long msTime = dDate.getTime() — newYearDate.getTime();// разница в милисекундах в вводной дате и дате начала года
long msDay = 24 * 60 * 60 * 1000;// количество милисекунд в дне
int days = (int)(msTime/msDay);// находим кол-во дней с начала года
return days % 2 != 0;// четное или нечетное число дней
}
}
  • ,

level08.lesson11.home09

Работа с датой
1. Реализовать метод isDateOdd(String date) так, чтобы он возвращал true, если количество дней с начала года — нечетное число, иначе false
2. String date передается в формате MAY 1 2013
На всех этапах (там где закоментированный System.out.println()) код выдает верные значения, но при этом задача не проходит проверку.

public class Solution
{
    public static void main(String[] args) throws ParseException
    {
        //isDateOdd("MAY 1 2013");
    }

    public static boolean isDateOdd(String date) throws ParseException
    {
        SimpleDateFormat ft = new SimpleDateFormat("MMM dd yyyy");
        Date newDate = new Date();
        Date yearStartDate = new Date();
        newDate = ft.parse(date);
        yearStartDate = ft.parse(date);

        //System.out.println(newDate);

        yearStartDate.setSeconds(0);
        yearStartDate.setMinutes(0);
        yearStartDate.setHours(0);
        yearStartDate.setDate(1);
        yearStartDate.setMonth(0);

        //System.out.println(yearStartDate);

        long timeDistance = newDate.getTime() - yearStartDate.getTime();
        long msDay = 24 * 60 * 60 * 1000;
        int dayCount = (int) (timeDistance/msDay);

        //System.out.println(dayCount);

        if (dayCount % 2 != 0){
            //System.out.println("true");
            return true;
        }else{
            //System.out.println("false");
            return false;
        }
    }
}

level08.lesson11.bonus03

Решая вот эту задачу.
/* Задача по алгоритмам
Задача: Введи с клавиатуры 20 слов и выведи их в алфавитном порядке.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] array = new String[20];
        for (int i = 0; i < array.length; i++)
        {
            array[i] = reader.readLine();
        }

        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 = 0; j < array.length; j++)
            {
                if (isGreaterThen(array[i], array[j]) == false )
                {
                    String temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }

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


Возник вопрос: а правильно ли она поставлена? Если рассматривать сортировку через compareTo(), то этот этот метод не учитывает регистр.
При вводе: а, Б
Ответ будет: Б, а
Не правильно ли будет изменить метод compareTo() на ccollator? Это так, мысли в слух, никому не в обиду)

level08.lesson11.home01

В чем косяк?

/* Set из котов
1. Внутри класса Solution создать public static класс кот – Cat.
2. Реализовать метод createCats, он должен создавать множество (Set) котов и добавлять в него 3 кота.
3. В методе main удалите одного кота из Set cats.
4. Реализовать метод printCats, он должен вывести на экран всех котов, которые остались во множестве.
Каждый кот с новой строки.
*/

public class Solution
{
    public static void main(String[] args)
    {
        Set<Cat> cats = createCats();
        Iterator<Cat> iterator = cats.iterator();
        iterator.next();
        iterator.remove();
        printCats(cats);
    }

    public static Set<Cat> createCats()
    {
        Set<Cat> result = new HashSet<Cat>();
        result.add(new Cat());
        result.add(new Cat());
        result.add(new Cat());
        return result;
    }

    public static void printCats(Set<Cat> cats)
    {
        Iterator<Cat> iterator = cats.iterator();
        while (iterator.hasNext())
        {
            Cat text = iterator.next();
            System.out.println(text);
        }
    }

    public static class Cat{}
}
  • ,

level13.lesson11.home03;

Доброго времени суток всем. Не пойму, что не так, видимо что-то с компилятором, или же я неправильно ввожу путь к файлу? Он лежит в корневой папке диска C:, создал его в блокноте и занес туда пару чисел. Уже напрямую указываю программе, что читать надо этот файл, она вылетает с "Exception in thread «main» java.io.FileNotFoundException: c:\a.txt (Не удается найти указанный файл)"

Код:
package com.javarush.test.

/* Чтение файла
1. Считать с консоли имя файла.
2. Вывести в консоль(на экран) содержимое файла.
3. Не забыть закрыть файл и поток.
*/

import java.io.*;

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        //add your code here
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String nameoffile = " ";

        nameoffile = reader.readLine();

        FileInputStream stream = new FileInputStream("c:/a.txt");

        while (stream.available()>0)
        {
            System.out.println(stream.read());
        }

    }
}