ArrayList problem z wydrukiem

0

Witam,

Mam problem z prawidłowym wydrukiem ArrayList. Dodaję obiekty do listy w klasie Main ale przy próbie wydruku zamiast mocy i pojemności silnika pojawia się wartość null :/

package my_project;

import java.util.Scanner;

public class Main {
	
	public static CarBase carsBase = new CarBase();
	public static Scanner scanner = new Scanner(System.in);

	public static void main(String[] args) {
		
		Engine engine = new Engine();
		Car car = new Car();
			
		boolean quit = false;
		int choice = 0;
		printInstructions();
		while(!quit) {
			System.out.println("Enter your choice");
			choice = scanner.nextInt();
			switch(choice) {
			case 1:
				System.out.println("Enter an engine power:");
				engine.setPower(scanner.nextInt());
				scanner.nextLine();
				System.out.println("Enter an engine capacity:");
				engine.setCapacity(scanner.nextInt());
				scanner.nextLine();
				System.out.println("Enter a brand name:");
				car.setBrand(scanner.nextLine());
				System.out.println("Enter a type:");
				car.setType(scanner.nextLine());
				System.out.println("Enter a color:");
				car.setColor(scanner.nextLine());
				carsBase.addCar(car);				
				break;
			case 2:
				System.out.println("Car list:");
				carsBase.printCarsBase();
				break;
			case 3:
				System.out.println("Enter a position to remove car:");
				carsBase.removeCar(scanner.nextInt());
				break;
			case 4:
				printInstructions();
				break;
			case 5:
				quit = true;
				break;
			}
		}
	
	}
	public static void printInstructions() {
		System.out.println("1. Add a new car to base");
		System.out.println("2. Print list of cars");
		System.out.println("3. Remove car in position");
		System.out.println("4. Print menu");
		System.out.println("5. Close program");
	}
}

```
```

package my_project;

import java.util.ArrayList;

public class CarBase {
	
	ArrayList<Car> carsBase = new ArrayList<Car>();
	
	public void addCar(Car car) {
		carsBase.add(car);
	}
	
	public void printCarsBase() {
		for(Car c : carsBase) {
			System.out.println(c);
		}
	}
	
	public void removeCar(int position) {
		carsBase.remove(position);
	}
	
}
```
```
package my_project;

public class Car {
	private Engine engine;
	private String type;
	private String color;
	private String brand;
		
	public Car() {}
	
	public Car(Engine engine, String type, String color, String brand) {
		this.engine = engine;
		this.type = type;
		this.color = color;
		this. brand = brand;
	}

	public Engine getEngine() {
		return engine;
	}

	public void setEngine(Engine engine) {
		this.engine = engine;
	}
	
	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {

		this.brand = brand;
	}

	@Override
	public String toString() {
		return "Car [engine=" + engine + ", type=" + type + ", color=" + color + ", brand=" + brand + "]";
	}
}

```
```
package my_project;

public class Engine {
	private int power;
	private int capacity;
	
	public Engine () {}
	
	public Engine(int power, int capacity) {
		this.power = power;
		this.capacity = capacity;
	}
		
	public int getPower() {
		return power;
	}
	public void setPower(int power) {
		this.power = power;
	}
	public int getCapacity() {
		return capacity;
	}
	public void setCapacity(int capacity) {
		this.capacity = capacity;
	}
	
	public void startEngine() {
		System.out.println("Engine has started");
	}
	
	public void stopEngine() {
		System.out.println("Engine has stoped");
	}

	@Override
	public String toString() {
		return "Engine [power=" + power + ", capacity=" + capacity + "]";
	}
}

```
0

einge.toString

1

Hmm... mógłbyś rozwinąć :) Domyślam się, że tutaj tkwi błąd ale siedzę nad tym pół dnia i nie wiem jak dokładnie powinno być :/

4

Po pierwsze to ile w ogóle RÓŻNYCH Car i Engine w twoim programie możesz mieć?
Odpowiedź może Cie zdziwić, ale tylko 1 Engine i 1 Car. Tylko tyle obiektów tych typów tworzysz. Więc wkładanie do tablicy niewiele da - możesz co najwyżej włożyć pięć razy ten sam...

Po drugie jak tworzysz Car to używasz konstruyktora Car(), który tworzy Car bez silnika (Engine == null) i to już tak zostaje. Nigdy nie wkładasz tam nic innego.

Po trzecie naprawa tego trochę Cię będzie kosztowała. Propozycja - wywal domyślne konstruktory Car() i Eingine() (bez parametrów) - nie ma takich samochodów, że z null silnikiem i null kolorem itp.. I twórz Car i Engine dopiero jak odczytasz WSZYSTKIE dane od użytkownia (wstaw w jakieś zmienne pomocnicze).

1
jarekr000000 napisał(a):

Po pierwsze to ile w ogóle RÓŻNYCH Car i Engine w twoim programie możesz mieć?
Odpowiedź może Cie zdziwić, ale tylko 1 Engine i 1 Car. Tylko tyle obiektów tych typów tworzysz. Więc wkładanie do tablicy niewiele da - możesz co najwyżej włożyć pięć razy ten sam...

Ale skąd wiesz, że on chciał różne wkładać? Może on chciał zamodelować taką sytuację:

  1. kupujemy do firmy zielone cinquecento
  2. mamy w firmie jedno cinquecento zielone, wymieniamy je na dwa żółte fordy fiesta
  3. wymieniamy dwa fordy fiesta na trzy czerwone fiaty stilo
  4. stilo ssie - wymieniamy je na cztery czarne audi 80
  5. rozwijamy się dalej czas wymienic 4 audiki na 5 różowych fiatów Multipla
  6. ...
    ...

Mamy tu do czynienia ze standaryzacją obsługi serwisowej oraz ujednoliconym korporacyjnym wzornictwem i kolorystyką.

Aczkolwiek w takim przypadku ilość sztuk naszego parku samochodowego lepiej by było przechowywać w zmiennej typu int niż rozpoznawać ją po długości tablicy...

1 użytkowników online, w tym zalogowanych: 0, gości: 1