level09.lesson11.bonus01 - "Программа работал слишком долго и была закрыта"

Всем привет!

Задание: Нужно исправить программу, чтобы компилировалась и работала
Задача: Программа вводит два имени файла. И копирует первый файл на место заданное вторым именем.

Как только не пробовал корректировать. Либо не проходит тестирование, либо «Программа работал слишком долго и была закрыта». Ниже привожу вариант приводящий к «Программа работал слишком долго и была закрыта».


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

        String sourceFileName = reader.readLine();
        String destinationFileName = reader.readLine();

        java.io.FileInputStream fileInputStream = new java.io.FileInputStream(sourceFileName);
        java.io.FileOutputStream fileOutputStream = new java.io.FileOutputStream(destinationFileName);

        int count = 0;
        while (fileInputStream.available()>0);
        {
            int data = fileInputStream.read();
            fileOutputStream.write(data);
            count++;
        }

        System.out.println("Скопировано байт " + count);

        fileInputStream.close();
        fileOutputStream.close();
    }
}


Подскажите, какое решение этой задачи у вас прошло тестирование.

com.javarush.test.level09.lesson11.bonus03

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++) {
            if (isNumber(array[i])) {
                for (int j = i; j < array.length; j++) {
                    if (isNumber(array[j])) {
                        int a = Integer.parseInt(array[i]);
                        int b = Integer.parseInt(array[j]);
                        if (a>b) {
                            String buffer = array[i];
                            array[i] = array[j];
                            array[j] = buffer;
                        }
                    }
                }

            } else {
                for (int j = i; j < array.length; j++) {
                    if (!isNumber(array[j]) && isGreaterThan(array[i], array[j])) {
                        String buffer = array[i];
                        array[i] = array[j];
                        array[j] = buffer;
                    }
                }
            }
        }
    }

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


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

        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++)
        {
            char c = chars[i];
            if ((i != 0 && c == '-') //есть '-' внутри строки
                    || (!Character.isDigit© && c != '-') ) // не цифра и не начинается с '-'
            {
                return false;
            }
        }
        return true;
    }
}


Подскажите, почему не проходит тестирование?
  • ,

level09.lesson11.home02

Условие задачи сбивает с толку:
/* Обратный отсчёт от 10 до 0
Написать в цикле обратный отсчёт от 10 до 0. Для задержки иcпользовать Thread.sleep(100);
Обернуть вызов sleep в try..catch.
*/

Исходный код:
public class Solution
{
public static void main(String[] args)
{
for (int i = 10; i >= 0; i--)
{
System.out.println(i);
//Напишите ваш код тут
}
}
}

В исходном коде задачи уже написан обратный отсчет, необходимо просто в нём написать Thread.sleep(100); обернутый в try...catch

Я же как и сказано в условии написал еще один обратный отсчет и задача не прошла, хотя принципиально код был верный, поправьте пожалуйста

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);
        }
    }

level09.lesson08.task04

Друзья, здравствуйте! Подскажите, что не так я сделал в этой задаче? Программа не компилируется на сервере у меня же всё адекватно запускается, работает, правда выводит на экран только IOException. А мне казалось, что должно быть на экране три строчки со всевозможными исключениями. Собственно, я всё для этого и делал.
package com.javarush.test.level09.lesson08.task04;

import com.sun.xml.internal.ws.api.model.CheckedException;

import java.io.IOException;
import java.rmi.RemoteException;

/* Перехват checked исключений
В методе processExceptions обработайте все checked исключения.
Нужно вывести на экран каждое возникшее checked исключение.
Можно использовать только один блок try..
*/

public class Solution {
    public static void main(String[] args)
    {
        processExceptions(new Solution());
    }

    public static void processExceptions(Solution obj)
    {
        try
        {
            obj.method1();
            obj.method2();
            obj.method3();
        }


        catch(RemoteException rE){
           System.out.println("RemoteException");}
        catch(IOException ioE){
           System.out.println("IOException");}
        catch(NoSuchFieldException nsfE){
            System.out.println("NoSuchFieldException");}

    }

    public void method1() throws IOException {
        throw new IOException();
    }

    public void method2() throws NoSuchFieldException {
        throw new NoSuchFieldException();
    }

    public void method3() throws RemoteException {
        throw new RemoteException();
    }
}

level09.lesson02.task05

/* Метод должен возвращать результат – глубину её стек-трейса
Написать метод, который возвращает результат – глубину его стек трейса – количество методов в нем (количество элементов в списке). Это же число метод должен выводить на экран.
*/
Первый способ, которым решил:

public class Solution
{
public static int getStackTraceDeep()
{
StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
return stackTraceElement.length;
}
}

Второй способ, которым решил:

public class Solution
{
public static int getStackTraceDeep()
{
StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
int count =0;
for (StackTraceElement element: stackTraceElement){
count++;
}
return count;
}
}

Ни один не проходит. Не могу понять в чем ошибка?

level09.lesson11.home09

package com.javarush.test.level09.lesson11.home09;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/* Десять котов
Создать класс кот – Cat, с полем «имя» (String).
Создать словарь Map(<String, Cat>) и добавить туда 10 котов в виде «Имя»-«Кот».
Получить из Map множество(Set) всех имен и вывести его на экран.
*/

public class Solution
{
    public static void main(String[] args)
    {
        Map<String, Cat> map = createMap();
        Set<Cat> set = convertMapToSet(map);
        printCatSet(set);
    }

    public static Map<String, Cat> createMap()
    {
        //Напишите тут ваш код
    }

    public static Set<Cat> convertMapToSet(Map<String, Cat> map)
    {
        //Напишите тут ваш код
    }

    public static void printCatSet(Set<Cat> set)
    {
        for (Cat cat:set)
        {
            System.out.println(cat);
        }
    }

    public static class Cat
    {
        private String name;

        public Cat(String name)
        {
            this.name = name;
        }

        public String toString()
        {
            return "Cat "+this.name;
        }
    }

}
  • ,

level09.lesson11.home05

Помогите, пожалуйста, найти ошибку( При исполнении пишет: Exception in thread «main» java.lang.ArrayIndexOutOfBoundsException.

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

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

/* Гласные и согласные буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа должна вывести на экран две строки:
1. первая строка содержит только гласные буквы
2. вторая - только согласные буквы и знаки препинания из введённой строки.
Буквы соединять пробелом.

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

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        //Написать тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String str = reader.readLine();

        char[] chars = str.toCharArray();

        List<Character> list1 = new ArrayList<Character>();
        List<Character> list2 = new ArrayList<Character>();

        for(int i : chars)
        {
            if(isVowel(chars[i]))
                list1.add(chars[i]);
            else
                list2.add(chars[i]);
        }


        for(int i : list1)
            System.out.print(list1.get(i) + " ");

        System.out.println("");

        for(int j : list2)
            System.out.print(list2.get(j) + " ");

    }


    public static char[] vowels = new char[]{'а', 'я', 'у', 'ю', 'и', 'ы', 'э', 'е', 'о', 'ё'};

    //метод проверяет, гласная ли буква
    public static boolean isVowel(char c)
    {
        c = Character.toLowerCase©;  //приводим символ в нижний регистр - от заглавных к строчным буквам

        for (char d : vowels)   //ищем среди массива гласных
        {
            if (c == d)
                return true;
        }
        return false;
    }
}

  • ,

level09.lesson02.task01;

Задание решил. Вопросы по выводимому результату:

Подскажите пожалуйста, что такое invoke? Почему их четыре, и почему у каждого первого стоит 0?

method5: getStackTrace
method5: method5
method5: method4
method5: method3
method5: method2
method5: method1
method5: main
method5: invoke0
method5: invoke
method5: invoke
method5: invoke
method5: main
method4: getStackTrace
method4: method4
method4: method3
method4: method2
method4: method1
method4: main
method4: invoke0
method4: invoke
method4: invoke
method4: invoke
method4: main
method3: getStackTrace
method3: method3
method3: method2
method3: method1
method3: main
method3: invoke0
method3: invoke
method3: invoke
method3: invoke
method3: main
method2: getStackTrace
method2: method2
method2: method1
method2: main
method2: invoke0
method2: invoke
method2: invoke
method2: invoke
method2: main
method1: getStackTrace
method1: method1
method1: main
method1: invoke0
method1: invoke
method1: invoke
method1: invoke
method1: main