Ну, ок, RandomAccessFile не понравился.
А теперь то что ему не нравится?
Marina
35 уровень
Что не нравится валидатору?
Решен
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ваня Жуков
8 декабря 2017, 09:41
Всё плохо, программа совсем не рабочая. Это тот самый случай, когда проще написать заново, чем пытаться рефакторить.
0
Marina
8 декабря 2017, 09:55
Это Вы про вчерашний вариант?
0
Ваня Жуков
8 декабря 2017, 10:03
Да. Новый вариант тоже не работает, но правится. Метод readLine() всегда возвращает null, когда всё прочитает, вы вызываете str.isEmpty(), программа никогда не отработает.
Не понимаю, почему вы не используете явные индексы, а вычисляете их по length. Впрочем это не так важно, но prodactName у вас в итоге получается не верный.
+3
Marina
8 декабря 2017, 10:09
Ага, с реадлайн поправила за секунду до Вашего комментария
А с prodactName вот так лучше будет?
for(int i = 1; i < args.length-2; i++) prodactName = prodactName.concat(args[i]);
prodactName = prodactName.concat(" ").substring(0, 30);
Не использую явно индексы, потому как посчитала правильное замечание в комментариях, что наименование может быть с пробелами, а значит, это могут быть индексы 1, 2, 3, например
0
Marina
8 декабря 2017, 10:12
Ура! Получилось!!! И всего-то 8 попыток :)
Спасибо!
0
Сергеев ВикторMaster
7 декабря 2017, 21:24полезный
1. Если в конце файла уже будет перевод строки и вы добавите новую, у вас получится пустая строка посередине.
Если в конце файла перевод строки нет и вы его не поставите, то 2 строки слипнутся.
2. Так же вы слишком много действий выполняете для неверных входных данных
3. Если на входе будет название товара длиннее 30 символов?
+1
Marina
7 декабря 2017, 21:34
Спасибо!
1) Нужно весь файл заново переписать? это нашла в комментариях
2) Это я и сама заметила, но подумала, что вопрос не принципиальный
3) Я как-то об этом не подумала, спасибо!
0
Сергеев ВикторMaster
7 декабря 2017, 23:46
1) Нужно весь файл заново переписать? это нашла в комментариях
ваша задача - внести данные файл так, чтобы он остался валидным, как вы это сделаете - фантазируйте =)
0
Marina
8 декабря 2017, 09:38
Переписала:
public class Solution {
public static void main(String[] args) throws Exception {
if(args[0].equals("-c")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine();
reader.close();
ArrayList<String> strlist = new ArrayList<>();
BufferedReader readfile = new BufferedReader(new InputStreamReader(new FileInputStream(name)));
String str = null;
while (!(str=readfile.readLine()).isEmpty()) {
strlist.add(str);
}
readfile.close();
int max = 0;
for(String x : strlist) {
int id = Integer.parseInt(x.substring(0, 8).trim());
if (max < id) max = id;
}
String newline = String.valueOf(++max).concat(" ").substring(0, 8);
String prodactName = "";
for(int i = 1; i < args.length-2; i++) prodactName = prodactName + args[i];
prodactName = prodactName.concat(" ").substring(0, 30);
args[args.length-2] = args[args.length-2].concat(" ").substring(0, 8);
args[args.length-1] = args[args.length-1].concat(" ").substring(0, 4);
newline = newline + prodactName + args[args.length-2] + args[args.length-1];
strlist.add(newline);
BufferedWriter filewrite = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(name)));
for(String x: strlist) {
filewrite.write(x);
filewrite.newLine();
}
filewrite.close();
}
}
И все равно не проходит валидацию по тем же пунктам :(
+1
Pavlo PlynkoJava-разработчик в CodeGymExpert
8 декабря 2017, 10:12полезный
NullPointerException в этой строке:
+1
Marina
8 декабря 2017, 10:14
Спасибо! Уже разобрались :)
0