Skip to content

Instantly share code, notes, and snippets.

@Vox1oot
Created March 5, 2014 06:54
Show Gist options
  • Save Vox1oot/9362412 to your computer and use it in GitHub Desktop.
Save Vox1oot/9362412 to your computer and use it in GitHub Desktop.
com.javarush.test.level17.lesson10.home09
package com.javarush.test.level17.lesson10.home09;
import java.io.IOException;
public class CorruptedDataException extends IOException {
}
package com.javarush.test.level17.lesson10.home09;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/* Транзакционность
Сделать метод joinData транзакционным, т.е. если произошел сбой, то данные не должны быть изменены.
1. Считать с консоли 2 имени файла
2. Считать построчно данные из файлов. Из первого файла - в allLines, из второго - в forRemoveLines
В методе joinData:
3. Если список allLines содержит все строки из forRemoveLines, то удалить из списка allLines все строки, которые есть в forRemoveLines
4. Если список allLines НЕ содержит каких-либо строк, которые есть в forRemoveLines, то
4.1. выбросить исключение CorruptedDataException
4.2. очистить allLines от данных
Сигнатуру метода main не менять
*/
// 1 и 2 готово
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
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileOne = reader.readLine();
String fileTwo = reader.readLine();
writeInList(fileOne,allLines);
writeInList(fileTwo, forRemoveLines);
}
public void joinData () throws CorruptedDataException {
if (allLines.containsAll(forRemoveLines) ) {
allLines.removeAll(forRemoveLines) ;
return;
}
for (String s : forRemoveLines) {
if (!allLines.contains(s)){
allLines.clear();
throw new CorruptedDataException();
}
}
}
public static void writeInList(String file, List<String> list) throws FileNotFoundException
{
BufferedReader in = new BufferedReader(new FileReader(file));
try{
String s;
while((s = in.readLine()) != null){
String[] strings = s.split(" ");
for (String x : strings){
list.add(x);
}
}
}catch (Exception e){
}
}
}
@chocopiedono
Copy link

файл считывать нужно построчно, строчки отделяются \r\n, а в этом примере строчки отделяются пробелом, что, видимо, не соответствует условию задачи.

@alexshavelev
Copy link

\r\n на винде
в unix системах \n

@ipkalm
Copy link

ipkalm commented Jul 4, 2015

Цикл странный в joinData(), если же allLines не содержит первый элемент из forRemoveLines, то всё удаляем и выкидываем Exception. В задании то, по другому сказано.

@alekseytimoshchenko
Copy link

Я вообще честно говоря половину заданий сижу раз 5 читаю задание, потом читаю код и пытаюсь понять, что хотел задать автор... Очень как по мне он запутанно формулирует свои мысли... А когда открываешь пример кто уже сделал, то совсем не понятно как они до такого додумались ведь в условии совершенно по другому написано... Вот это явный тому пример...

@Lodo4ka
Copy link

Lodo4ka commented Jan 11, 2017

Согласен с Алексеем. Тока я перечитываю раз по 10))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment