Hallo, in einer Aufgabe soll ich für ein Programm in einer Methode ein Objekt "Vehicle" mit passendem Typus und Tankgröße (für Benzin 40l und für Diesel 80l) zurückgeben. Der JUnit test gibt aber eine Fehlermeldung aus, die ich nicht nachvollziehen kann.
Hier der Fehler:
Das Programm funktioniert ansonsten wie es soll und ich habe auch getestet ob das Objekt übergeben wird, nur diese eine Sache macht mich verrückt.
In der Aufgabe heißt es:
Werden aber ein Fahrzeug (PKW oder LKW) (bzw. mehrere) eines bestimmten Herstellers verkauft, dann soll als Methoden-Rückgabewert ein Objekt der Klasse Vehicle mit dem richtigen Treibstofffüllstand (Feld fuel) und Typus (Feld vehicleType) zurückgegeben werden. Bei mehreren gleichzeitig verkauften Fahrzeugen eines beliebigen PKWoder LKW-Herstellers legen sie mehrere Instanzen an und geben sie einen passenden befüllten Array zurück
CarTrader inklusive Methode für Einzelfahrzeugverkauf:
Methode aus CarTrader-Klasse zum Verkauf für mehrere Fahrzeuges eines beliebigen Typs.
Vehicle-Klasse
Hier der Fehler:
Code:
private void testSoldCarAttributes(byte vehicleType, final Vehicle v) {
switch (vehicleType) {
case VehicleType.PASSENGER_CAR:
assertEquals(40.f, v.getFuel(), DELTA_FLOAT);
Das Programm funktioniert ansonsten wie es soll und ich habe auch getestet ob das Objekt übergeben wird, nur diese eine Sache macht mich verrückt.
In der Aufgabe heißt es:
Werden aber ein Fahrzeug (PKW oder LKW) (bzw. mehrere) eines bestimmten Herstellers verkauft, dann soll als Methoden-Rückgabewert ein Objekt der Klasse Vehicle mit dem richtigen Treibstofffüllstand (Feld fuel) und Typus (Feld vehicleType) zurückgegeben werden. Bei mehreren gleichzeitig verkauften Fahrzeugen eines beliebigen PKWoder LKW-Herstellers legen sie mehrere Instanzen an und geben sie einen passenden befüllten Array zurück
CarTrader inklusive Methode für Einzelfahrzeugverkauf:
Java:
public abstract class CarTrader {
public static final float CAPACITY_DIESEL_LITERS = 350.f;
public static final float CAPACITY_GAS_LITERS = 180.f;
public static final int CAPACITY_PASSENGER_CARS = 15;
public static final int CAPACITY_TRUCKS = 8;
int passengerCarsStock=15;
int trucksStock=8;
public CarTrader(){
}
void setGasStockLiters(float gasStockLiters){
PassengerCarTrader.gasStockLiters=gasStockLiters;
}
void setDieselStockLiters(float dieselStockLiters){
TruckTrader.dieselStockLiters=dieselStockLiters;
}
void setPassengerCarsStock(int passengerCarsStock){
this.passengerCarsStock=passengerCarsStock;
}
void setTrucksStock(int trucksStock){
this.trucksStock=trucksStock;
}
int getPassengerCarsStock(){
return passengerCarsStock;
}
int getTrucksStock(){
return trucksStock;
}
float getGasStockLiters(){
return PassengerCarTrader.gasStockLiters;
}
float getDieselStockLiters(){
return TruckTrader.dieselStockLiters;
}
public Vehicle sellVehicle(byte vehicleType, int brand){
Vehicle soldCar=null;
switch (vehicleType){
case 0:
if (PassengerCarTrader.gasStockLiters>=Vehicle.TANK_SIZE_PASSENGER_CAR){
switch (brand) {
case VehicleBrand.AUDI:
if (PassengerCarTrader.audiStock>=1){
PassengerCarTrader.audiStock = PassengerCarTrader.audiStock - 1;
PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR;
passengerCarsStock = passengerCarsStock - 1;
soldCar = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
}else {
soldCar=null;
System.err.println("Nicht genug Audi oder Benzin vorhanden");
}
break;
case VehicleBrand.BMW:
if( PassengerCarTrader.bMWStock>=1){
PassengerCarTrader.bMWStock = PassengerCarTrader.bMWStock -1;
PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR ;
passengerCarsStock =passengerCarsStock - 1;
soldCar = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
} else {
soldCar=null;
System.err.println("Nicht genug BMW oder Benzin vorhanden");
}
break;
case VehicleBrand.MERCEDES:
if ( PassengerCarTrader.mercedesStock>=1){
PassengerCarTrader.mercedesStock = PassengerCarTrader.mercedesStock - 1;
PassengerCarTrader.gasStockLiters =PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR;
passengerCarsStock = passengerCarsStock - 1;
soldCar = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
} else {
soldCar=null;
System.err.println("Nicht genug Mercedes oder Benzin vorhanden");
}
break;
case VehicleBrand.OPEL:
if( PassengerCarTrader.opelStock>=1){
PassengerCarTrader.opelStock = PassengerCarTrader.opelStock -1;
PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR;
passengerCarsStock = passengerCarsStock - 1;
soldCar = new Vehicle(VehicleType.PASSENGER_CAR, Vehicle.TANK_SIZE_PASSENGER_CAR);
} else {
soldCar=null;
System.err.println("Nicht genug Opel oder Benzin vorhanden");
}
break;
default: soldCar=null;
break;
}
} else {
soldCar=null;
}
System.out.println("Fahrzeug(e) erfolgreich verkauft");
break;
case 1:
if (TruckTrader.dieselStockLiters>=Vehicle.TANK_SIZE_TRUCK){
switch (brand) {
case VehicleBrand.MAN://MAN
if (TruckTrader.mANStock>=1){
TruckTrader.mANStock = (TruckTrader.mANStock-1);
trucksStock = trucksStock - 1;
TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - Vehicle.TANK_SIZE_TRUCK;
soldCar = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
System.out.println("Fahrzeug(e) erfolgreich verkauft");
} else {
soldCar=null;
System.err.println("Nicht genug MAN-Trucks oder Diesel vorhanden");
}
break;
case VehicleBrand.SCANIA:
if(TruckTrader.scaniaStock>=1){
TruckTrader.scaniaStock = TruckTrader.scaniaStock -1;
trucksStock = trucksStock - 1;
TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - Vehicle.TANK_SIZE_TRUCK;
System.out.println("Fahrzeug(e) erfolgreich verkauft");
soldCar = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
} else {
soldCar=null;
System.err.println("Nicht genug Scania-Trucks oder Diesel vorhanden");
}
break;
default: soldCar=null;
break;
}
} else{
soldCar=null;
}
}
return soldCar;
}
Methode aus CarTrader-Klasse zum Verkauf für mehrere Fahrzeuges eines beliebigen Typs.
Code:
public Vehicle[] sellVehicles(byte vehicleType, int brand, int amount){
Vehicle[] soldVehicle= new Vehicle[amount];
boolean soldCar=false;
boolean soldTruck=false;
if(vehicleType==0){
if(TruckTrader.dieselStockLiters>=Vehicle.TANK_SIZE_TRUCK*amount){
switch (brand) {
case VehicleBrand.MAN://MAN
if (TruckTrader.mANStock>=amount){
TruckTrader.mANStock = TruckTrader.mANStock - amount;
trucksStock = trucksStock - amount;
TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - (Vehicle.TANK_SIZE_TRUCK*amount);
soldTruck=true;
for(int i=0; i<amount;i++){
soldVehicle[i] = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
}
System.out.println("Verkauf erfolgreich");
} else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
break;
case VehicleBrand.SCANIA://Scania
if(TruckTrader.scaniaStock>=amount){
TruckTrader.scaniaStock = TruckTrader.scaniaStock -amount;
trucksStock = trucksStock - amount;
TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - Vehicle.TANK_SIZE_TRUCK*amount;
soldTruck=true;
for(int i=0; i<amount;i++){
soldVehicle[i] = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
}
System.out.println("Verkauf erfolgreich");
} else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
break;
}
}else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
}
if(vehicleType==1){
if (PassengerCarTrader.gasStockLiters>=Vehicle.TANK_SIZE_PASSENGER_CAR*amount){
switch (brand){
case VehicleBrand.AUDI://AUDI
if ( PassengerCarTrader.audiStock>=amount){
PassengerCarTrader.audiStock = PassengerCarTrader.audiStock - amount;
PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - (Vehicle.TANK_SIZE_PASSENGER_CAR*amount);
passengerCarsStock = passengerCarsStock - amount;
soldCar=true;
for(int i=0; i<amount;i++){
soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
}
System.out.println(soldVehicle[0].getVehicleType());
System.out.println(soldVehicle[0].getFuel());
System.out.println(soldVehicle[1].getVehicleType());
System.out.println(soldVehicle[1].getFuel());
System.out.println("Verkauf erfolgreich");
} else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
break;
case VehicleBrand.BMW://BMW
if( PassengerCarTrader.bMWStock>=amount){
PassengerCarTrader.bMWStock = PassengerCarTrader.bMWStock -amount;
PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - (Vehicle.TANK_SIZE_PASSENGER_CAR*amount);
passengerCarsStock = passengerCarsStock - amount;
soldCar=true;
for(int i=0; i<amount;i++){
soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
}
System.out.println("Verkauf erfolgreich");
} else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
break;
case VehicleBrand.MERCEDES://MERCEDES
if ( PassengerCarTrader.mercedesStock>=amount){
PassengerCarTrader.mercedesStock = PassengerCarTrader.mercedesStock - amount;
PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR*amount;
passengerCarsStock =passengerCarsStock - amount;
soldCar=true;
for(int i=0; i<amount;i++){
soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
}
System.out.println("Verkauf erfolgreich");
} else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
break;
case VehicleBrand.OPEL://OPEL
if( PassengerCarTrader.opelStock>=amount){
PassengerCarTrader.opelStock = PassengerCarTrader.opelStock -amount;
PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - (Vehicle.TANK_SIZE_PASSENGER_CAR *amount);
passengerCarsStock = passengerCarsStock - amount;
soldCar=true;
for(int i=0; i<amount;i++){
soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
}
System.out.println("Verkauf erfolgreich");
} else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
break;
}
}
else {
for(int i=0; i<amount;i++){
soldVehicle[i] =null;
}
}
}
return soldVehicle;
}
Vehicle-Klasse
Java:
public class Vehicle {
public static final float TANK_SIZE_PASSENGER_CAR = 40.f;
public static final float TANK_SIZE_TRUCK = 80.f;
public float fuel;
public byte mVehicleType;
public int brand;
public Vehicle(){}
public Vehicle(byte vehicleType, float fuel){
this();
if (vehicleType == VehicleType.PASSENGER_CAR){
this.mVehicleType= VehicleType.PASSENGER_CAR ;
}
if (fuel==TANK_SIZE_PASSENGER_CAR){
this.fuel=fuel;
}
if(vehicleType == VehicleType.TRUCK){
this.mVehicleType= VehicleType.TRUCK;
}
if(fuel==TANK_SIZE_TRUCK){
this.fuel=fuel;
}
}
public float getFuel(){
return this.fuel;
}
public byte getVehicleType(){
return this.mVehicleType;
}
}