Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

JAVA JAVA JAVA JAVA JAVA JAVA Hello, I have one error that I need to be fixed in

ID: 3713252 • Letter: J

Question

JAVA JAVA JAVA JAVA JAVA JAVA

Hello, I have one error that I need to be fixed in the code below:

NOTE: The error is bolded in my output and expected output.

INPUT:

2016
Honda Accord
27.5
15.5
2015
Chevrolet Tahoe
19.2
26.1

MY OUTPUT:

Enter auto model year:
Enter auto make and model:
Enter auto mileage (in miles per gallon):
Enter auto tank capacity (in gallons):

Enter auto model year:
Enter auto make and model:
Enter auto mileage (in miles per gallon):
Enter auto tank capacity (in gallons):

On average, 2016 cars have approximately 24000 miles on the odometer
2016 Honda Accord has a 15.5 gallon tank and gets 27.5 miles per gallon
Range is 426 miles

On average, 2015 cars have approximately 24000 miles on the odometer
2015 Chevrolet Tahoe has a 26.1 gallon tank and gets 19.2 miles per gallon
Range is 501 miles

2015 Chevrolet Tahoe has a longer range

Expected Output:

Enter auto model year:
Enter auto make and model:
Enter auto mileage (in miles per gallon):
Enter auto tank capacity (in gallons):

Enter auto model year:
Enter auto make and model:
Enter auto mileage (in miles per gallon):
Enter auto tank capacity (in gallons):

On average, 2016 cars have approximately 24000 miles on the odometer
2016 Honda Accord has a 15.5 gallon tank and gets 27.5 miles per gallon
Range is 426 miles

On average, 2015 cars have approximately 36000 miles on the odometer
2015 Chevrolet Tahoe has a 26.1 gallon tank and gets 19.2 miles per gallon
Range is 501 miles

2015 Chevrolet Tahoe has a longer range

import java.util.Scanner;

public class AutoManager {

public static void main(String[] args) {

/*

*

* Creating an Scanner class object which is used to get the inputs

*

* entered by the user

*

*/

Scanner sc = new Scanner(System.in);

// Creating an instance of Auto class

Auto auto1 = new Auto();

// calling the method

readAutoData(sc, auto1);

System.out.println();

// Displaying the output As requirement comment the following lines.F

// System.out.printf("%d %s has a %.1f gallon tank and gets %.1f miles per

// gallon ", auto.getModelYear(),

// auto.getMakeModel(), auto.getTankCapacity(), auto.getMileage());

Auto auto2 = createAutoWithReadData(sc);

System.out.println();

int auto1Range = (int) auto1.computeRange();

int auto2Range = (int) auto2.computeRange();

double auto1AvgMiles = auto1.computeAvgMiles();

System.out.printf("On average, %d cars have approximately %.0f miles on the odometer ", auto1.getModelYear(),

auto1AvgMiles);

auto1.displayAutoData();

System.out.println("Range is " + auto1Range + " miles");

System.out.println();

double auto2AvgMiles = auto2.computeAvgMiles();

System.out.printf("On average, %d cars have approximately %.0f miles on the odometer ", auto2.getModelYear(),

auto1AvgMiles);

auto2.displayAutoData();

System.out.println("Range is " + auto2Range + " miles");

System.out.println();

if (auto2Range > auto1Range) {

System.out.println(auto2.getModelYear() + " " + auto2.getMakeModel() + " has a longer range");

} else if (auto2Range < auto1Range) {

System.out.println(auto1.getModelYear() + " " + auto1.getMakeModel() + " has a longer range");

} else {

System.out.println("Range of both vehicle is same.");

}

}

// This method will read the input entered by the user

/**

*

* @param sc

* Scanner to get User input

* @return newly created Auto object

*/

private static Auto createAutoWithReadData(Scanner sc) {

System.out.println("Enter auto model year:");

int year = sc.nextInt();

sc.nextLine();

System.out.println("Enter auto make and model:");

String model = sc.nextLine();

System.out.println("Enter auto mileage (in miles per gallon):");

double mileage = sc.nextDouble();

System.out.println("Enter auto tank capacity (in gallons):");

double capacity = sc.nextDouble();

Auto newAuto = new Auto(year, model, mileage, capacity);// call Auto constructor with value obtained from user

// and get a new Auto object. Return that to main

// method.

return newAuto;

}

/**

*

* @param sc Scanner object to read user input

* @param auto Object in which value will be set after getting user input

*/

private static void readAutoData(Scanner sc, Auto auto) {

System.out.println("Enter auto model year:");

int year = sc.nextInt();

sc.nextLine();

System.out.println("Enter auto make and model:");

String make = sc.nextLine();

System.out.println("Enter auto mileage (in miles per gallon):");

double mileage = sc.nextDouble();

System.out.println("Enter auto tank capacity (in gallons):");

double gallons = sc.nextDouble();

// calling the setters

auto.setModelYear(year);

auto.setMakeModel(make);

auto.setMileage(mileage);

auto.setTankCapacity(gallons);

}

}

public class Auto {

// Declaring instance variables

private int modelYear;

private String makeModel;

private double mileage;

private double tankCapacity;

// Zero argument constructor

public Auto() {

this.modelYear = 0;

this.makeModel = "unknown";

this.mileage = 0.0;

this.tankCapacity = 0.0;

}

public Auto(int year, String model, double mileage, double capacity) {

this.modelYear = year;

this.makeModel = model;

this.mileage = mileage;

this.tankCapacity = capacity;

}

// getters and setters

public int getModelYear() {

return modelYear;

}

public void setModelYear(int modelYear) {

this.modelYear = modelYear;

}

public String getMakeModel() {

return makeModel;

}

public void setMakeModel(String makeModel) {

this.makeModel = makeModel;

}

public double getMileage() {

return mileage;

}

public void setMileage(double mileage) {

this.mileage = mileage;

}

public double getTankCapacity() {

return tankCapacity;

}

public void setTankCapacity(double tankCapacity) {

this.tankCapacity = tankCapacity;

}

public double computeAvgMiles() {

final int CURRENT_YEAR = 2018;

final double MILES_PER_YEAR = 12000;

int age = CURRENT_YEAR - modelYear;

return age * MILES_PER_YEAR;

}

public double computeRange() {

return (mileage * tankCapacity);

}

public void displayAutoData() {

System.out.printf("%d %s has a %.1f gallon tank and gets %.1f miles per gallon ", modelYear, makeModel,

tankCapacity, mileage);

}

}

Explanation / Answer

Hello, there was a simple mistake in your code; you were displaying auto1AvgMiles instead of auto2AvgMiles in displaying data of second auto. I have changed it, now it is working as expected. Thanks.

// AutoManager.java

import java.util.Scanner;

public class AutoManager {

                public static void main(String[] args) {

                                /*

                                * Creating an Scanner class object which is used to get the inputs

                                * entered by the user

                                */

                                Scanner sc = new Scanner(System.in);

                                // Creating an instance of Auto class

                                Auto auto1 = new Auto();

                                // calling the method

                                readAutoData(sc, auto1);

                                System.out.println();

                                // Displaying the output As requirement comment the following lines.F

                                // System.out.printf("%d %s has a %.1f gallon tank and gets %.1f miles

                                // per

                                // gallon ", auto.getModelYear(),

                                // auto.getMakeModel(), auto.getTankCapacity(), auto.getMileage());

                                Auto auto2 = createAutoWithReadData(sc);

                                System.out.println();

                                int auto1Range = (int) auto1.computeRange();

                                int auto2Range = (int) auto2.computeRange();

                                double auto1AvgMiles = auto1.computeAvgMiles();

                                System.out

                                                                .printf("On average, %d cars have approximately %.0f miles on the odometer ",

                                                                                                auto1.getModelYear(),

                                                                                                auto1AvgMiles);

                                auto1.displayAutoData();

                                System.out.println("Range is " + auto1Range + " miles");

                                System.out.println();

                                double auto2AvgMiles = auto2.computeAvgMiles();

                                /**

                                * you were printing auto1AvgMiles instead of auto2AvgMiles, that was

                                * the reason it was displaying incorrect range. Fixed it

                                */

                                System.out

                                                                .printf("On average, %d cars have approximately %.0f miles on the odometer ",

                                                                                                auto2.getModelYear(),

                                                                                                auto2AvgMiles);

                                auto2.displayAutoData();

                                System.out.println("Range is " + auto2Range + " miles");

                                System.out.println();

                                if (auto2Range > auto1Range) {

                                                System.out.println(auto2.getModelYear() + " "

                                                                                + auto2.getMakeModel() + " has a longer range");

                                } else if (auto2Range < auto1Range) {

                                                System.out.println(auto1.getModelYear() + " "

                                                                                + auto1.getMakeModel() + " has a longer range");

                                } else {

                                                System.out.println("Range of both vehicle is same.");

                                }

                }

                // This method will read the input entered by the user

                /**

                * @param sc

                *            Scanner to get User input

                * @return newly created Auto object

                */

                private static Auto createAutoWithReadData(Scanner sc) {

                                System.out.println("Enter auto model year:");

                                int year = sc.nextInt();

                                sc.nextLine();

                                System.out.println("Enter auto make and model:");

                                String model = sc.nextLine();

                                System.out.println("Enter auto mileage (in miles per gallon):");

                                double mileage = sc.nextDouble();

                                System.out.println("Enter auto tank capacity (in gallons):");

                                double capacity = sc.nextDouble();

                                Auto newAuto = new Auto(year, model, mileage, capacity);// call Auto

                                                                                                                                                                                                                                                                // constructor

                                                                                                                                                                                                                                                                // with value

                                                                                                                                                                                                                                                                // obtained from

                                                                                                                                                                                                                                                                // user

                                // and get a new Auto object. Return that to main

                                // method.

                                return newAuto;

                }

                /**

                * @param sc

                *            Scanner object to read user input

                * @param auto

                *            Object in which value will be set after getting user input

                */

                private static void readAutoData(Scanner sc, Auto auto) {

                                System.out.println("Enter auto model year:");

                                int year = sc.nextInt();

                                sc.nextLine();

                                System.out.println("Enter auto make and model:");

                                String make = sc.nextLine();

                                System.out.println("Enter auto mileage (in miles per gallon):");

                                double mileage = sc.nextDouble();

                                System.out.println("Enter auto tank capacity (in gallons):");

                                double gallons = sc.nextDouble();

                                // calling the setters

                                auto.setModelYear(year);

                                auto.setMakeModel(make);

                                auto.setMileage(mileage);

                                auto.setTankCapacity(gallons);

                }

}

// Auto.java

public class Auto {

                // Declaring instance variables

                private int modelYear;

                private String makeModel;

                private double mileage;

                private double tankCapacity;

                // Zero argument constructor

                public Auto() {

                                this.modelYear = 0;

                                this.makeModel = "unknown";

                                this.mileage = 0.0;

                                this.tankCapacity = 0.0;

                }

                public Auto(int year, String model, double mileage, double capacity) {

                                this.modelYear = year;

                                this.makeModel = model;

                                this.mileage = mileage;

                                this.tankCapacity = capacity;

                }

                // getters and setters

                public int getModelYear() {

                                return modelYear;

                }

                public void setModelYear(int modelYear) {

                                this.modelYear = modelYear;

                }

                public String getMakeModel() {

                                return makeModel;

                }

                public void setMakeModel(String makeModel) {

                                this.makeModel = makeModel;

                }

                public double getMileage() {

                                return mileage;

                }

                public void setMileage(double mileage) {

                                this.mileage = mileage;

                }

                public double getTankCapacity() {

                                return tankCapacity;

                }

                public void setTankCapacity(double tankCapacity) {

                                this.tankCapacity = tankCapacity;

                }

                public double computeAvgMiles() {

                                final int CURRENT_YEAR = 2018;

                                final double MILES_PER_YEAR = 12000;

                                int age = CURRENT_YEAR - modelYear;

                                return age * MILES_PER_YEAR;

                }

                public double computeRange() {

                                return (mileage * tankCapacity);

                }

                public void displayAutoData() {

                                System.out

                                                                .printf("%d %s has a %.1f gallon tank and gets %.1f miles per gallon ",

                                                                                                modelYear, makeModel,

                                                                                                tankCapacity, mileage);

                }

}

/*OUTPUT*/

Enter auto model year:

2016

Enter auto make and model:

Honda Accord

Enter auto mileage (in miles per gallon):

27.5

Enter auto tank capacity (in gallons):

15.5

Enter auto model year:

2015

Enter auto make and model:

Chevrolet Tahoe

Enter auto mileage (in miles per gallon):

19.2

Enter auto tank capacity (in gallons):

26.1

On average, 2016 cars have approximately 24000 miles on the odometer

2016 Honda Accord has a 15.5 gallon tank and gets 27.5 miles per gallon

Range is 426 miles

On average, 2015 cars have approximately 36000 miles on the odometer

2015 Chevrolet Tahoe has a 26.1 gallon tank and gets 19.2 miles per gallon

Range is 501 miles

2015 Chevrolet Tahoe has a longer range