Как я могу убедиться, что введенный ввод соответствует индексу массива, чтобы вывести правильное решение? - PullRequest
0 голосов
/ 30 ноября 2018

Так что, в основном, я пытаюсь вывести как лучший фильм за определенный год, так и общий доход, который фильмы принесли за этот год.Оба моих метода работают некорректно, и у меня особенно возникают проблемы с тем, чтобы год, который был введен, совпадал с годом, в котором фильмы находятся в массивах, чтобы вывести общий доход и лучший фильм того года.

На данный момент моя программа выводит примерно так:

** Введите год с 1991 - 2018: 2016

Спасибо, вы получили 2016

Общая суммав 2016 году было сделано 966,50 долларов

Самым большим доходом от фильма в 2016 году стала книга Джунглей за 966,50 долларов **

Однако общая сумма за 2016 год не равна 966,50 долларов, и лучший фильм 2016 годане Книга Джунглей, это В поисках Дори ...

Вот этот getInput.getUserInput()

    public static int getUserInput(int minYear, int maxYear) {
        int year = 0;
        boolean keepLooping = true;
        Scanner input = new Scanner(System.in);
        while (keepLooping) {
            System.out.printf("\nEnter a year from %s - %s:", minYear, maxYear);
            year = input.nextInt();
            if (year < minYear || year > maxYear) {
                System.out.printf("Invalid entry . . .");
            } else {
                keepLooping = false;
            }
        }
        return year;
    }

Вот этот класс

        public class Films {
            private String filmTitle;
            private double filmIncome;
            private int premiereYear;

        Films(String title, double income, int year) {
            filmTitle = title;
            filmIncome = income;
            premiereYear = year;

        }

        public String getFilmTitle() {
            return filmTitle;
        }

        public void setFilmTitle(String filmTitle) {
            this.filmTitle = filmTitle;
        }

        public double getFilmIncome() {
            return filmIncome;
        }

        public void setFilmIncome(double filmIncome) {
            this.filmIncome = filmIncome;
        }

        public int getPremiereYear() {
            return premiereYear;
        }

        public void setPremiereYear(int premiereYear) {
            this.premiereYear = premiereYear;
        }

    }

Вот этот файлкоторый запускает программу

public static void main(String[] args) {
        Films[] f = new Films[8];
        f[0] = new Films("Frozen", 1290.0, 2013);
        f[1] = new Films("The Lion King", 968.4, 1994);
        f[2] = new Films("Zootopia", 1023.7, 2016);
        f[3] = new Films("Incredibles 2", 1240.3, 2018);
        f[4] = new Films("Finding Dory", 1028.5, 2016);
        f[5] = new Films("Shrek 2", 919.8, 2004);
        f[6] = new Films("The Jungle Book", 966.5, 2016);
        f[7] = new Films("Despicable Me 2", 970.7, 2013);

        int yearEntered = getInput.getUserInput(1991, 2018);
        System.out.printf("\nThank you received %s", yearEntered);

        Films total = getTotalIncome(f, yearEntered);
        System.out.printf("\nThe total amount made for %s was $%2.2f", yearEntered, total.getFilmIncome());

        Films top = getTopFilm(f, yearEntered);
        if (top == null) {
            System.out.printf("0");
        } else {
            System.out.printf("\nThe greatest income made by a movie in %s was %s at $%2.2f", yearEntered,
                    top.getFilmTitle(), top.getFilmIncome());
        }

    }

    private static Films getTotalIncome(Films[] f, int yearEntered) {
        Films totalIncome = null;
        double add = 0;
        for (int i = 0; i < f.length; i++) {
            if (f[i].getPremiereYear() == yearEntered) {
                add += f[i].getFilmIncome();
                totalIncome = f[i];
            }

        }
        return totalIncome;

    }

    private static Films getTopFilm(Films[] f, int yearEntered) {
        Films topFilm = null;
        double max = 0;
        for (int i = 0; i < f.length; i++) {
            if (f[i].getPremiereYear() != yearEntered) {
                continue;
            }
            if (f[i].getFilmIncome() > max) {
                topFilm = f[i];
            }
        }
        return topFilm;
    }

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018
public static void main(String[] args) {
    Films[] f = new Films[8];
    f[0] = new Films("Frozen", 1290.0, 2013);
    f[1] = new Films("The Lion King", 968.4, 1994);
    f[2] = new Films("Zootopia", 1023.7, 2016);
    f[3] = new Films("Incredibles 2", 1240.3, 2018);
    f[4] = new Films("Finding Dory", 1028.5, 2016);
    f[5] = new Films("Shrek 2", 919.8, 2004);
    f[6] = new Films("The Jungle Book", 966.5, 2016);
    f[7] = new Films("Despicable Me 2", 970.7, 2013);

    int yearEntered = getInput.getUserInput(1991, 2018);
    System.out.printf("\nThank you received %s", yearEntered);
    Films total = getTotalIncome(f, yearEntered);
    System.out.printf("\nThe total amount made for %s was $%2.2f", yearEntered, total.getFilmIncome());
    Films top = getTopFilm(f, yearEntered, total.getFilmIncome());

    if (top == null) {
        System.out.printf("0");
    } else {
        System.out.printf("\nThe greatest income made by a movie in %s was %s at $%2.2f", yearEntered, top.getFilmTitle(), top.getFilmIncome());
    }
}

private static Films getTotalIncome(Films[] f, int yearEntered) { 
    Films totalIncome = null; 
    double add = 0; 
    double max = Double.MIN_VALUE; 
    for (int i = 0; i < f.length; i++) { 
        if (f[i].getPremiereYear() == yearEntered && max < f[i].getFilmIncome()) { 
            max = f[i].getFilmIncome(); totalIncome = f[i]; 
        } 
    } 
    return totalIncome; 
} 

private static Films getTopFilm(Films[] f, int yearEntered,double total) { 
    Films topFilm = null; 
    double max = 0; 
    for (int i = 0; i < f.length; i++) { 
        if (f[i].getPremiereYear() != yearEntered) { 
            continue; 
        } 
        if (f[i].getFilmIncome() == total) { 
            topFilm = f[i]; 
            break;
        } 
    } 

    return topFilm; 
}
0 голосов
/ 30 ноября 2018

Как сказал Вивек, у вас есть проблема в функции max

private static Films getTopFilm(Films[] f, int yearEntered) {
    Films topFilm = null;
    double max = 0;
    for (int i = 0; i < f.length; i++) {
        if (f[i].getFilmIncome() > max) {
            topFilm = f[i];
            //need to reset max here
            max = f[i].getFilmIncome();
        }
    }
    return topFilm;
}

, но у вас также есть ошибка в вашем методе get getTotalIncome:

private static double getTotalIncome(Films[] f, int yearEntered) {
    double total = 0;
    for (int i = 0; i < f.length; i++) {
        if (f[i].getPremiereYear() == yearEntered) {
            total += f[i].getFilmIncome();
        }
    }
    return total;
}

Я ненаверняка, почему вы возвращали оттуда Film объект, то, что вы хотели сделать, - это перебирать фильмы, суммирующие все фильмы того года.

вы затем отредактировали бы свою основную функцию, чтобы вызывать ее как таковую

public static void main(String[] args) {
    ...
    double total = getTotalIncome(f, yearEntered);
    System.out.printf("\nThe total amount made for %s was $%2.2f", yearEntered, total);
    ...
}
0 голосов
/ 30 ноября 2018

Кажется, в вашей функции max есть ошибка.

private static Films getTopFilm(Films[] f, int yearEntered) {
        Films topFilm = null;
        double max = 0;
        for (int i = 0; i < f.length; i++) {
            if (f[i].getPremiereYear() != yearEntered) {
                continue;
            }
            if (f[i].getFilmIncome() > max) {
                topFilm = f[i];
                max = f[i].getFilmIncome(); // you forget to set the value of max.
            }
        }
        return topFilm;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...