level21.lesson16.big01 задание 15 : Метод getWinner не принимается

Ипподром(15)
В классе Hippodrome сделаем два метода:
public Horse getWinner() и public void printWinner()
Метод getWinner должен возвращать лошадь пробежавшую самую большую дистанцию.
Метод printWinner выводит на экран имя победителя в виде: Winner is !
Пример:
Winner is Lucky!

Валидатор выдает: Метод getWinner должен возвращать лошадь пробежавшую наибольшую дистанцию.

До этого задания все принято нормально. Я всего лишь добавил в Ippodrom 2 метода:

public Horse getWinner()
    {
        Horse winner=horses.get(0);
        for (int i=1;i<horses.size();i++)
        {
            if (winner.getDistance()<=horses.get(i).getDistance())
                winner=horses.get(i);
        }
        return winner;
    }

    public void printWinner()
    {
        System.out.println("Winner is "+ getWinner().getName()+"!");
    }


Ну и в самом main() добавил вызов: game.printWinner();

Все выдает правильно, проверено раз 20 уже. Пробовал getWinner() делать через for-each, и обращаться к списку через game.getHorses вместо напрямую horses, менял знаки равенства. Куда копать то?


package com.javarush.task.task21.task2113;

import java.util.ArrayList;
import java.util.List;

public class Hippodrome {

    private ArrayList<Horse> horses=new ArrayList<>();
    public static Hippodrome game;

    public Hippodrome (ArrayList<Horse> horses) {this.horses=horses;}

    public List<Horse> getHorses(){return horses;}

    public static void main(String[] args) throws InterruptedException {
        game = new Hippodrome(new ArrayList<Horse>());
        game.getHorses().add(new Horse("Burenka",3,0));
        game.getHorses().add(new Horse("Mustang",3,0));
        game.getHorses().add(new Horse("Przhevalsk",3,0));
        game.run();
        game.printWinner();

    }

    public Horse getWinner()
    {
        Horse winner=horses.get(0);
        for (int i=1;i<horses.size();i++)
        {
            if (winner.getDistance()<=horses.get(i).getDistance())
                winner=horses.get(i);
        }
        return winner;
    }

    public void printWinner()
    {
        System.out.println("Winner is "+ getWinner().getName()+"!");
    }

    public void run()  {
        for (int i=1; i<=100;i++)
        {
            move();
            print();
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public void move() {
        for (Horse h: horses)  {    h.move();  }
    }
    public void print() {
        for (Horse h: horses) { h.print(); }

        for (int i=1;i<=10;i++) System.out.println();

    }

}

4 комментария

lichMax
  • lichMax
  • +1
  • Комментарий отредактирован 2017-05-18 19:41:17 пользователем lichMax
Не знаю, что тут такого. У меня почти такое же решение, нет только равенства в условии. Может без этого попробуешь?
Да, ещё. В выводе победителя у меня вместо getName() используется name (прямой доступ к полю, оно там не приватное). Вроде как раз из-за этого у многих не проходило это задание.
victoor
Перепробовал все эти моменты, а оказалась причина в инициализации коней! И ведь прошло же на начальных этапах, так что даже подумать на них не мог. Вот суть:
так не принмиало:
game.getHorses().add(new Horse("Burenka",3,0));

а так приняло:
game.getHorses().add(new Horse("Burenka",3.0 ,0.0));


32 попытки!!) больше не буду так биться с валидатором, а то времени уходит просто немерено. А толку то никакого — чему я научился, пытаясь сдать вполне рабочий код?
lichMax
Да, тоже заметил такое: не принимает то, что было в одной из предыдущих частей большой задачи. А какой класс коней-то? Напомни-ка. А то неохота опять лезть в идею, искать, где этот код.
(Просто не могу понять, откуда взялось ещё одно число с плавающей запятой, в конструкторе.)
victoor
Вот кони. Все довольно просто. Даже не думал так долго засесть на этой задаче.
public class Horse {
    private String name;
    private double speed;
    private double distance;

    public Horse(String name, double speed, double distance)
    {
        this.name = name;
        this.speed = speed;
        this.distance = distance;
    }
    public void move()
    {
        distance += speed * Math.random();
    }
    public void print()
    {
        for (int i = 0;i<(int)distance;i++)
        {
            System.out.print(".");
        }
        System.out.println(name);
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSpeed() {
        return speed;
    }

    public void setSpeed(double speed) {
        this.speed = speed;
    }

    public double getDistance() {
        return distance;
    }

    public void setDistance(double distance) {
        this.distance = distance;
    }
}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.