Java, написание метода для вычисления средних значений ватина, не дающих правильного вывода - PullRequest
1 голос
/ 29 сентября 2019

Мое вычисленное среднее значение получается равным 0,0 каждый раз, когда этого не должно быть.Любая помощь будет оценена.

Код в моем классе BaseballPlayer:

//BaseballPlayer parameters

String name;
int number;
int singles;
int doubles;
int triples;
int homeRuns;
int atBats;
int walks;
int sacrificeFlies;

//BaseballPlayer constructor method

public BaseballPlayer(String name, int number, int singles, int triples, int homeRuns, int atBats, int walks, 
        int sacrificeFlies)
{
    this.name            =   name;
    this.number          =   number;
    this.singles         =   singles;
    this.triples         =   triples;
    this.homeRuns        =   homeRuns;
    this.atBats          =   atBats;
    this.walks           =   walks;
    this.sacrificeFlies  =   sacrificeFlies;
}

// Batting average
public double getBattingAverage() {
    double average  = ((singles+doubles+triples+homeRuns)/atBats);
    return average;
}

Код в моем основном классе:

BaseballPlayer player01  =   new BaseballPlayer( "Mr. Business",13,12,13,4,84,63,7);

    System.out.println(player01.getBattingAverage());

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Чтобы получить более точный результат вместо int, необходимо сообщить JVM, что вы хотите во время процесса вычисления, а не после расчета.Один из самых простых способов - использовать Divisor или Dividend как удвоенный, как в примере выше.то есть

double average = ((double) (singles + doubles + triples + homeRuns) / atBats);

или

double average = ( (singles + doubles + triples + homeRuns) / (double) atBats);

В исходном коде поведение должно привести к повторному приведению результата к intto double после завершения всего вычисления (ссылка на разделы ниже приведена).Точность уже потеряна, и поэтому вы можете получить только 0 вместо точного числа:

double average  = (double) ( (singles+doubles+triples+homeRuns)/ atBats);
1 голос
/ 29 сентября 2019

Вместо этого:

double average  = ((singles+doubles+triples+homeRuns)/atBats);

попробуйте это:

double average = (double) (singles + doubles + triples + homeRuns) / atBats;

Поскольку типы данных для singles, doubles, triples, homeRuns иatBats - это все integer, он выполняет математические вычисления, получает результат в виде другого integer ("0"), а затем сохраняет его как double ("0.0"), что не то, что вам нужно.Добавляя (double) впереди, вы указываете JVM привести результат к типу данных double.

Запустив код, как указано выше, вот вывод, который я вижу локально:

0.0

после приведения результата к double вот что я вижу:

0.34523809523809523
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...