2015-02-21 3 views
0

Я работаю над простой домашней работой Java. Похоже, я правильно понял синтаксис и логику. Однако конструктор не может понять аргумент, который я пытаюсь передать, поэтому все вычисления ошибочны. Я включил вывод. Кто-нибудь знает, как решить эту проблему? Любая помощь будет оценена. Спасибо!Как передать аргумент в конструкторе?

public class DT_CarStats 
{ 
    private double gallons; 
    private double mpg; 
    private double ppg; 

public DT_CarStats(double gallons, double mpg, double ppg) 
{ 
    gallons = gallons; 
    mpg = mpg; 
    ppg = ppg; 
} 

public double CostPer100() 
{ 
    return 100/(mpg * ppg); 
} 

public double MaxDistance() 
{ 
    return mpg * gallons; 
} 
} 
import java.util.Scanner; 

public class DT_CarStatsTester 
{ 
    public static void main(String[] args) 
    { 
    Scanner scannerObject = new Scanner(System.in); 
    double gallons, mpg, ppg; 
    System.out.printf("******************************************* \n"); 
    System.out.printf("* Welcome to my Distance to Empty App * \n"); 
    System.out.printf("******************************************* \n"); 
    System.out.printf("Please enter the number of gallons of gas in the  tank: "); 
    gallons = scannerObject.nextDouble(); 
    System.out.printf("Please enter the fuel efficiency (miles per gallon): "); 
    mpg = scannerObject.nextDouble(); 
    System.out.printf("Please enter the price of gas per gallon: "); 
    ppg = scannerObject.nextDouble(); 
    DT_CarStats cs = new DT_CarStats(gallons,mpg,ppg); 
    System.out.printf("\n"); 
    System.out.printf("To drive 100 miles, it will cost $" + cs.CostPer100() + ". \n"); 
    System.out.printf("The car can currently drive a maximum of " + cs.MaxDistance() + " miles. \n"); 
    System.out.printf("******************************************* \n"); 
    System.out.printf("* Thanks for using our App, Safe Travels! * \n"); 
    System.out.printf("******************************************* \n"); 
    } 
} 

Пример запуска:

******************************************* 
******************************************* 
* Welcome to my Distance to Empty App * 
******************************************* 
Please enter the number of gallons of gas in the tank: 17.6 
Please enter the fuel efficiency (miles per gallon): 24.8 
Please enter the price of gas per gallon: 2.36 

To drive 100 miles, it will cost $Infinity. ==> This is wrong, should be $9.52 
The car can currently drive a maximum of 0.0 miles. ==> This should be 436.48 miles 
******************************************* 
* Thanks for using our App, Safe Travels! * 
******************************************* 

ответ

3

Используйте this, чтобы указать, что вы имеете в виду поле класса, а не аргумент конструктора, так как они называются так же.

public DT_CarStats(double gallons, double mpg, double ppg) 
{ 
    this.gallons = gallons; 
    this.mpg = mpg; 
    this.ppg = ppg; 
} 
+0

Спасибо. Теперь работает! –

+0

Ты рад, рад, что помог. –

0
gallons = gallons; 
mpg = mpg; 
ppg = ppg; 

Подсказка: в этом блоке кода, какие gallons, mpg и ppg?

Это параметры! Они всегда являются параметрами, независимо от того, с какой стороны находится =. Переменные имена на левой стороне = не обрабатываются специально.

Чтобы получить доступ к полям, используйте this:

this.gallons = gallons; 
this.mpg = mpg; 
this.ppg = ppg; 

или дают параметры разные имена из полей.

+0

Благодарим за помощь! –

0

Здесь переменные экземпляра переопределяются параметрами метода. Таким образом, чтобы дифференцировать переменные экземпляра с параметрами метода (когда оба имени одинаковы), используйте ключевое слово «this» внутри конструктора.

this.gallons = gallons; 

В вашем случае, параметры метода снова присваивается значение, оставляя нетронутыми переменные экземпляра, следовательно, неправильные значения

+0

Спасибо за вашу помощь! –

0

В конструкторе вы имеете в виду ваши поля с тем же именем, что и входные параметры , Вы должны использовать ключевое слово «this», чтобы убедиться, что вы задаете переменные объекта this.gallons = gallons и т. Д.

+0

Теперь он работает! благодаря –

Смежные вопросы