• ,

level17.lesson10.home09

Ребят, просто уже не могу дальше долбится с этой задачей.Ну что не так? Про то, что в условии сказано про транзакционность, которой нет, я вообще молчу. Спасибо за помощь заранее.
* Транзакционность
Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены.
1. Считать с консоли 2 имени файла
2. Считать построчно данные из файлов. Из первого файла - в allLines, из второго - в forRemoveLines
В методе joinData:
3. Если список allLines содержит все строки из forRemoveLines, то удалить из списка allLines все строки, которые есть в forRemoveLines
4. Если список allLines НЕ содержит каких-либо строк, которые есть в forRemoveLines, то
4.1. очистить allLines от данных
4.2. выбросить исключение CorruptedDataException
Метод joinData должен вызываться в main. Все исключения обработайте в методе main.
*/

public class Solution {
    public static List<String> allLines = new ArrayList<String>();
    public static List<String> forRemoveLines = new ArrayList<String>();

    public static void main(String[] args) throws IOException{
        String fileName1, fileName2;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        fileName1 = reader.readLine();
        fileName2 = reader.readLine();


        BufferedReader reader1=new BufferedReader(new FileReader(fileName1));
        BufferedReader reader2=new BufferedReader(new FileReader(fileName1));

        while(reader1.readLine() !=null){
            allLines.add(reader1.readLine());
        }
        while(reader2.readLine() !=null){
            forRemoveLines.add(reader1.readLine());
        }

        try
        {
            new Solution().joinData();
        }catch (Exception e){

        }
    }
    public void joinData () throws CorruptedDataException
    {
        if (allLines.containsAll(forRemoveLines))
        {
            allLines.removeAll(forRemoveLines);
        } else
        {
            allLines.clear();
            throw new CorruptedDataException();
        }
    }
}
  • ,

level17.lesson10.home09

Ребят, просто уже не могу дальше долбится с этой задачей.Ну что не так? Про то, что в условии сказано про транзакционность, которой нет, я вообще молчу. Спасибо за помощь заранее.
* Транзакционность
Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены.
1. Считать с консоли 2 имени файла
2. Считать построчно данные из файлов. Из первого файла - в allLines, из второго - в forRemoveLines
В методе joinData:
3. Если список allLines содержит все строки из forRemoveLines, то удалить из списка allLines все строки, которые есть в forRemoveLines
4. Если список allLines НЕ содержит каких-либо строк, которые есть в forRemoveLines, то
4.1. очистить allLines от данных
4.2. выбросить исключение CorruptedDataException
Метод joinData должен вызываться в main. Все исключения обработайте в методе main.
*/

public class Solution {
    public static List<String> allLines = new ArrayList<String>();
    public static List<String> forRemoveLines = new ArrayList<String>();

    public static void main(String[] args) throws IOException{
        String fileName1, fileName2;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        fileName1 = reader.readLine();
        fileName2 = reader.readLine();


        BufferedReader reader1=new BufferedReader(new FileReader(fileName1));
        BufferedReader reader2=new BufferedReader(new FileReader(fileName1));

        while(reader1.readLine() !=null){
            allLines.add(reader1.readLine());
        }
        while(reader2.readLine() !=null){
            forRemoveLines.add(reader1.readLine());
        }

        try
        {
            new Solution().joinData();
        }catch (Exception e){

        }
    }
    public void joinData () throws CorruptedDataException
    {
        if (allLines.containsAll(forRemoveLines))
        {
            allLines.removeAll(forRemoveLines);
        } else
        {
            allLines.clear();
            throw new CorruptedDataException();
        }
    }
}

level17.lesson10.home09, работает, но тестирование не проходит

Уважаемые форумчане, помогите с решением задачи, вроде как все работает, но тестирование не проходит.
Условие задачи:
/* Транзакционность
Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены.
1. Считать с консоли 2 имени файла
2. Считать построчно данные из файлов. Из первого файла - в allLines, из второго - в forRemoveLines
В методе joinData:
3. Если список allLines содержит все строки из forRemoveLines, то удалить из списка allLines все строки, которые есть в forRemoveLines
4. Если список allLines НЕ содержит каких-либо строк, которые есть в forRemoveLines, то
4.1. очистить allLines от данных
4.2. выбросить исключение CorruptedDataException
Сигнатуру метода main не менять.  Метод joinData должен вызываться в main.
*/

Код задачи :

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

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Solution {
    public static List<String> allLines = new ArrayList<String>();
    public static List<String> forRemoveLines = new ArrayList<String>();

    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            Scanner scanner_file_1 = new Scanner(new File(reader.readLine()));
            Scanner scanner_file_2 = new Scanner(new File(reader.readLine()));

            while (scanner_file_1.hasNext()){
                allLines.add(scanner_file_1.next());
            }
            scanner_file_1.close();

            while (scanner_file_2.hasNext()){
                forRemoveLines.add(scanner_file_2.next());
            }
            scanner_file_2.close();

            new Solution().joinData();

        }
        catch (IOException e) {
        }
    }

    public void joinData () throws CorruptedDataException {
        // Проверяю, если все строки из forRemoveLines есть в allLines
        if (allLines.containsAll(forRemoveLines)){
            allLines.removeAll(forRemoveLines);
        }
        // инате, проверяем есть, ли хоть одна строка из forRemoveLines в allLines
        else {
        for (int i = 0; i < forRemoveLines.size(); i++) {
            // если такая строка есть, возвращаем управление
            if (allLines.contains(forRemoveLines.get(i))){
                return;
            }
            // если мы дошли до конца списка и такой строки нет, очищаем allLines, и кидаем Exception
            if (i == forRemoveLines.size() - 1){
                allLines.clear();
                throw new CorruptedDataException();
            }
        }
        }
    }
}


P.S. задачи на 17 уровне «даются» тяжелее всех остальных.

level17.lesson10.home09 ПОНЯТНОЕ ОБЬЯСНЕНИЕ

Великолепно сформулированное условие вьінудило меня запилить пост для страждущих, коим бьіл я еще 5 минут тому назад.
Итак:
1. Нельзя менять модификаторьі joinData() или давать ему аргументьі, но можно разрешить ему бросать исключения.
2. Нужно вьізвать joinData() в main(), причем поскольку он не статический, вьізьівать его можно только из обьекта класса Solution.
3. В методе joinData() вьіполняются только 3 и 4 пунктьі условия, все остальное делается в main().
4. Перехватьівать CorruptedDataException нельзя. Оно перехватится само в main() вместе с другим неизбежньім исключением.
5. Почитайте про коллекции и не плодите бесполезньіх циклов for each там, где можно обойтись одним вьізовом метода.
6. С сигнатурой метода main() лучше не баловаться — без понятия, как влияет на решение.
Надеюсь, помог.
Борітеся і поборете.