Я вроде всё описал, но не знаю что ещё ему нужно.
Данные на ввод:
-c "Костюм из латекса Супермен красно синий" 1659.9999 1524.
Как отработала программа:
- Отчёт о своей работе метода formatStroke + конечный результат:
id length: 8
productName length: 30
price length: 8
quantity length: 4
198491 Костюм из латекса Супермен кра1659.9991524
То есть результат работы соответствует условию.
Но по проверке - всё красное, почему?package com.javarush.task.task18.task1827;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
/*
Прайсы
*/
/**
* -c productName price quantity
* <p>
* Значения параметров:
* где id - 8 символов.
* productName - название товара, 30 символов.
* price - цена, 8 символов.
* quantity - количество, 4 символа.
* -c - добавляет товар с заданными параметрами в конец файла, генерирует id самостоятельно, инкрементируя максимальный id, найденный в файле.
* <p>
* args
* 19846 Шорты пляжные синие 159.00 12
* 198478 Шорты пляжные черные с рисунко173.00 17
* 19847983Куртка для сноубордистов, разм10173.991234
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
// String fileName = "C:\\Users\\Adam\\Desktop\\dataFile.txt";
if (args.length != 0) {
runProgram(args, fileName);
}
}
private static void runProgram(String[] args, String fileName) throws IOException {
if (args[0].equals("-c")) {
int id = 0;
String productName = args[1];
String price = args[2];
String quantity = args[3];
try (Scanner in = new Scanner(new File(fileName));) {
if (in.hasNextLine()) {
// найти максимальный id в файле
int searchId = 0;
while (in.hasNextLine()) {
String line = in.nextLine();
searchId = Integer.parseInt(line.substring(0, 8).trim());
if (searchId > id) id = searchId;
}
id = id + 1;
}
}
try (PrintWriter printWriter = new PrintWriter(new FileOutputStream(fileName, true));) {
String writeData = formatStroke(id, productName, price, quantity);
// System.out.println(writeData);
printWriter.print("\n" + writeData);
}
}
}
private static String formatStroke(int id, String productName, String price, String quantity) {
String strId = String.valueOf(id);
if (strId.length() < 8)
strId = managerFormat(strId, 8);
else strId = strId.substring(0, 8).trim();
if (productName.length() < 30)
productName = managerFormat(productName, 30);
else productName = productName.substring(0, 30).trim();
if (price.length() < 8)
price = managerFormat(price, 8);
else price = price.substring(0, 8).trim();
if (quantity.length() < 4)
quantity = managerFormat(quantity, 4);
else quantity = quantity.substring(0, 4).trim();
// System.out.println("id length: " + strId.length() + "\n"
// + "productName length: " + productName.length() + "\n"
// + "price length: " + price.length() + "\n"
// + "quantity length: " + quantity.length() + "\n");
return strId + productName + price + quantity;
}
private static String managerFormat(String value, int lengh){
char[] bufferValue = new char[lengh];
char[] tmpValue = value.toCharArray();
for (int i = 0; i < bufferValue.length; i++) {
if (i < tmpValue.length) bufferValue[i] = tmpValue[i];
else bufferValue[i] = ' ';
}
return String.valueOf(bufferValue);
}
}
тут неправильно ты делаешь: представь у тебя так идут id 1234 1235 так вот 1234 > 0, ты в id кладёшь 1234 и сразу же его увеличиваешь на 1!, а значит id равен будет 1235 следующая строка. 1235 > 1235 не выполняется уже. и у тебя останется максимальный id 1235, а должен быть 1236, понял? ты в цикле найди максимальный id, а уже в конце когда будешь формировать строку, тогда увеличь его на один. а эту строку удали совсемза обновлённый код в задаче лайк. редко тут люди так делают.