Как взять из ArrayList переменную и назначить её в аргумент?
Задание считать с файла информацию о автомобиле и потом когда считали с файла информацию назначить всё что мы считали в аргументы,считать с файла я смог а вот назначить аргументы не смог: Считывание с файла:
import java.io.*;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
String line;
ArrayList<String> list=new ArrayList<String>();
while((line=reader.readLine())!=null){
if(!line.isEmpty()){
list.add(line);
System.out.println(line);
}}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Информация в файле:
Lamborghini Huracan 2014 1.000.000
BMW M5 2012 16.000
Bugatti Chiron 2016 3.300.000
VAZ 21099 2007 1.000
Класс автомобиль:
public class Vehicle {
private String make;
private String model;
private int yearOfManufacture;
private int cost;
public void setCost(int cost) {
this.cost = cost;
if (cost <= 0) {
throw new IllegalArgumentException("Поле вартості автомобіля дорівнює нулю або менше нуля.");
}
}
public void setMake(String make) {
this.make = make;
if (make.isEmpty()) {
throw new IllegalArgumentException("Пусте поле виробника.");
}
}
public void setModel(String model) {
this.model = model;
if (model.isEmpty()) {
throw new IllegalArgumentException("Пусте поле моделі.");
}
}
public void setYearOfManufacture(int yearOfManufacture) {
this.yearOfManufacture = yearOfManufacture;
if (yearOfManufacture<=0) {
throw new IllegalArgumentException("Поле дати виготовлення дорівнює нулю або менше нулю.");
}
}
public int getCost() {
return cost;
}
public int getYearOfManufacture() {
return yearOfManufacture;
}
public String getMake() {
return make;
}
public String getModel() {
return model;
}
Vehicle(String make, String model, int cost, int yearOfManufacture) {
if (make.isEmpty()) {
throw new IllegalArgumentException("Пусте поле виробника.");
}
if (model.isEmpty()) {
throw new IllegalArgumentException("Пусте поле моделі.");
}
if (yearOfManufacture<=0) {
throw new IllegalArgumentException("Поле дати виготовлення дорівнює нулю або менше нулю.");
}
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Нужно распарсить полученные строки, преобразовать нужные элементы в требуемый тип (строка или целое число). Также имеет смысл создать конструктор в классе Vehicle, чтобы сразу принимать все аргументы:
// Vehicle
public Vehicle(String make, String model, int year, int cost) {
this.make = make;
this.model = model;
this.yearOfManufacture = year;
this.cost = cost;
}
Парсинг в данном простом случае можно выполнить при помощи разбиения по пробелам (пробелы в названии изготовителя или модели не допускаются):
List<Vehicle> cars = new ArrayList<>();
for (String line : list) {
String[] p = line.split("\\s+");
Vehicle v = new Vehicle(p[0], p[1], Integer.parseInt(p[2]), Integer.parseInt(p3.replaceAll("\\.", "")));
cars.add(v);
}
или же при помощи Stream API:
List<Vehicle> cars = list.stream() // Stream<String>
.map(s -> s.split("\\s+")) // Stream<String[]>
.map(p -> new Vehicle(p[0], p[1], Integer.parseInt(p[2]), Integer.parseInt(p3.replaceAll("\\.", "")))) // Stream<Vehicle>
.collect(Collectors.toList());