Написал код по аналогии с правильным решением из смежной задачи, её я решал первой. Смежную задачу решал манипулируя со строками, и это было не так изящно =) Как бы то ни было в моем коде я напрямую меняю переменные объекта, но валидатор не принимает решения. Я догадываюсь что меняю переменные не того объекта... Ну или того, но в списке остается версия неизмененного, хотя там вроде как только ссылки на объекты хранятся... Жду комментарии опытных коллег касательно этого момента =) По сути вопрос в том можно ли напрямую изменить объект внутри списка, не меняя список? Например сеттеры дописать или что-то еще?
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Прайсы 2
*/
public class Solution {
static class Product {
int id;
String name;
double prise;
int quantity;
public Product(int id, String name, double price, int quantity) {
this.id = id;
this.name = name;
this.prise = price;
this.quantity = quantity;
}
@Override
public String toString() {
return String.format("%-8d%-30s%-8f%-4d", id, name, prise, quantity);
}
}
public static Product getProduct(String str) {
String id = str.substring(0, 8).trim();
String name = str.substring(8, 38).trim();
String prise = str.substring(38, 46).trim();
String quantity = str.substring(46, 50).trim();
return new Product(Integer.parseInt(id), name, Double.parseDouble(prise), Integer.parseInt(quantity));
}
public static void main(String[] args) throws IOException {
if (args.length == 0) return;
List<Product> list = new ArrayList<>();
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String fileName = console.readLine();
console.close();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
while (reader.ready()) {
list.add(getProduct(reader.readLine()));
}
}
int id;
boolean flag = true;
switch (args[0]) {
case "-u":
id = Integer.parseInt(args[1]);
String name = args[2];
double price = Double.parseDouble(args[3]);
int quantity = Integer.parseInt(args[4]);
for (Product product : list) {
if (product.id == id) {
int index = list.indexOf(product);
list.get(index).name = name;
list.get(index).prise = price;
list.get(index).quantity = quantity;
flag = false;
}
}
if (flag) return;
break;
case "-d":
id = Integer.parseInt(args[1]);
for (Product product : list) {
if (product.id == id) {
list.remove(product);
flag = false;
}
}
if (flag) return;
break;
}
try (FileWriter writer = new FileWriter(fileName)) {
for (Product product : list) {
writer.write(product.toString());
writer.write("\n");
}
}
}
}