Напишите программу под названием rankmovies, которая считывает данные в рейтингах.перечислите и ответьте на запросы следующей формы.
Вопрос:
Цель этого набора задач состоит в том, чтобы получить представление о кучах и приоритете
очереди.
База данных фильмов в Интернете (http://www.imdb.com) представляет собой онлайновую базу данных
информация, связанная с фильмами, телепрограммами и видео. Вы можете скачать простой
текстовые файлы данных; направления находятся по адресу http://www.imdb.com/interfaces. Прочесть
заявление об ограничениях на использование данных при http://www.imdb.com/help/
show_leaf?usedatasoftware.
В этом упражнении мы будем работать с файлом ratings.list, который содержит, для каждого
фильм в базе данных, информация о том, как зрители забили фильм. Здесь
это типичная запись:
0000012211 29974 7.4 Выстрел Пощечиной (1977)
Каждый рецензент присваивает фильму оценку от 1 (худший) до 10 (лучший). Первая группа
из 10 цифр указывается доля зрителей, давших соответствующее числовое значение
счет. Для “пощечины выстрел”, от 0 до 10% зрителей дали фильму 1, между
20 и 30% зрителей дали фильму 8 баллов, а от 10 до 20% зрителей дали
фильм а 10, и так далее. Следующее число-это общее количество отзывов, а также
третье число-это средний балл. Затем идет название фильма и Год выпуска.
Напишите программу под названием RankMovies, которая считывает данные в рейтингах.список и
отвечает на запросы следующей формы. Пользователь вводит два целых числа, скажем k и
m, с 0 ≤ k ≤ 2 × 106 и 0 ≤ m ≤ 105
Затем ваша программа должна перечислить, в
убывающий порядок рейтинга, m самых высокорейтинговых фильмов среди тех, что имели на
крайней мере, к отзывы. Ваша программа должна зацикливаться, принимая входные данные и создавая списки
пока хотя бы одно из входных чисел не будет равно 0. После каждого списка он должен сообщать о
время в миллисекундах, которое потребовалось для составления списка. На экране появится снимок экрана.
следующая страница.
Несколько файлов находятся на Moodle. Файл ratings-utf8 содержит список рейтингов,
лишен дополнительной информации и преобразован в набор символов UTF-8. Если ваш
компьютер использует другой набор символов, вам нужно будет его изменить. Например,
в Eclipse нажмите кнопку Выполнить, запустить конфигурации, общие, кодировка и выберите
“Другое” и UTF-8. Досье MaxHeap.java содержит реализацию приоритета
очередь, основанная на максимальной куче. MovieRating.java это класс, предназначенный для хранения записи
информации о фильме. Наконец, Ранкмовики.java содержит стартовый код с необходимыми
входные и выходные операторы.
TLDR; Эй, так мне поручили эту задачу написать программу под названием "RankMovies.java-и ранжируйте максимальное количество фильмов из данного файла с минимальным рейтингом, заданным пользователем. Может ли кто-нибудь помочь мне, как это сделать? Спасибо, любая помощь была бы великолепна!
Код, данный для использования в этой задаче:
MovieRating.java
import java.util.LinkedList; import java.util.Scanner; public class MovieRating implements Comparable<MovieRating> { private int votes; private float rating; private String title; MovieRating(String v, String r, String t) { votes = Integer.parseInt(v); rating = Float.parseFloat(r); title = t; } public int getVotes() { return votes; } public float getRating() { return rating; } public String getTitle() { return title; } public String toString() { String s = Integer.toString(votes)+" "+ Float.toString(rating) + " " + title; return s; } public int compareTo(MovieRating m) { if(this.rating - m.rating > 0.0) { return 1; } else if(this.rating - m.rating < 0.0) { return -1; } else { return 0; } } }
RankMovies.java
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; import java.util.List; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.Collections; /* Starter code for PS8. */ public class RankMovies { public static void main(String[] args) { File file = new File("../resource/asnlib/publicdata/ratings-utf8"); ArrayList<MovieRating> rl = new ArrayList<MovieRating>(); try { Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { /* Read in lines, using fact that the * title starts in column 32, and the * other information is separated by * 1 or more blanks. */ String line = scanner.nextLine(); String pre = line.substring(0, 31); String post = line.substring(32); String[] tkns = pre.split("\\s+"); MovieRating nr = new MovieRating(tkns[2], tkns[3], post); rl.add(nr); } scanner.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } int minVotes = 1; int numRecords = 1; Scanner input = new Scanner(System.in); while (true) { System.out.println(); System.out.println("Enter minimum vote threshold and number of records:"); minVotes = input.nextInt(); numRecords = input.nextInt(); if (minVotes * numRecords == 0) break; long startTime = System.currentTimeMillis(); /* Fill in code to determine the top numRecords movies that have at least * minVotes votes. For each record mr, in decreaseing order of average rating, * execute a System.out.println(mr). * Do not sort the movie list! */ System.out.println();; long readTime = System.currentTimeMillis(); System.out.println("Time: "+(System.currentTimeMillis()-startTime)+" ms"); } } }
Maxheap.java
import java.util.ArrayList; import java.util.Arrays; /** Max-heap implementation */ public class MaxHeap<E extends Comparable<E>> { private ArrayList<E> Heap; private int n; // Number of things in heap /** Constructor for initially empty heap */ public MaxHeap() { Heap = new ArrayList<E>(); n = 0; } public MaxHeap(E[] h) { Heap = new ArrayList<E>(Arrays.asList(h)); n = h.length; buildheap(); } /** @return Current size of the heap */ public int heapsize() { return n; } public boolean isEmpty() { return n == 0; } /** @return True if pos a leaf position, false otherwise */ public boolean isLeaf(int pos) { return (pos >= n / 2) && (pos < n); } /** @return Position for left child of pos */ public int leftchild(int pos) { assert 2 * pos + 1 < n : "Position has no left child"; return 2 * pos + 1; } /** @return Position for right child of pos */ public int rightchild(int pos) { assert 2 * pos + 2 < n : "Position has no right child"; return 2 * pos + 2; } /** @return Position for parent */ public int parent(int pos) { assert pos > 0 : "Position has no parent"; return (pos - 1) / 2; } /** Insert val into heap */ public void insert(E val) { Heap.add(val); // Start at end of heap int curr = n; n++; // Now sift up until curr parents key > currs key while ((curr != 0) && (Heap.get(curr).compareTo(Heap.get(parent(curr))) > 0)) { swap(curr, parent(curr)); curr = parent(curr); } } /** Heapify contents of Heap */ public void buildheap() { for (int i = n / 2 - 1; i >= 0; i--) { siftdown(i); } } /** Put element in its correct place */ private void siftdown(int pos) { assert (pos >= 0) && (pos < n) : "Illegal heap position"; while (!isLeaf(pos)) { int j = leftchild(pos); if ((j < (n - 1)) && (Heap.get(j).compareTo(Heap.get(j + 1)) < 0)) { j++; // j is now index of child with greater value } if (Heap.get(pos).compareTo(Heap.get(j)) >= 0) { return; } swap(pos, j); pos = j; // Move down } } /** Remove and return maximum value */ public E removemax() { assert n > 0 : "Removing from empty heap"; swap(0, --n); // Swap maximum with last value if (n != 0) // Not on last element { siftdown(0); // Put new heap root val in correct place } return Heap.get(n); } private void swap(int i, int j) { E temp = Heap.get(j); Heap.set(j, Heap.get(i)); Heap.set(i, temp); } }
Что я уже пробовал:
Я попытался использовать приоритетные очереди из класса MaxHeap, но у меня возникли проблемы с этим. Я думаю, что это самый простой способ решить эту проблему, но я не уверен.
Richard MacCutchan
- но у меня возникли проблемы."
Извините, но такие комментарии абсолютно ничего не значат. Если у вас есть проблема, то вам нужно точно объяснить, что это такое и как это влияет на вашу программу. Случилось ли что-то, чего вы не ожидали, или что-то, чего вы не ожидали? В любом случае, какие переменные влияют на ответ? и т. д.
Member 14039473
сожалеть об этом. Я пытаюсь использовать метод removemax из MaxHeap.java в самом деле RankMovies.java. Я хочу использовать этот метод, чтобы я мог вытащить лучшие фильмы для меня, а затем я могу перечислить их. Моя проблема в том, что я получаю ошибки, потому что MaxHeap расширяется сопоставимо, поэтому, когда я пытаюсь использовать его в RankMovies.но это говорит мне, что я не могу. Мне просто нужна помощь в том, как правильно написать один метод в rank movies, чтобы я мог использовать его для распечатки списка лучших фильмов.
Slacker007
Вы действительно установили точку останова или две и отладили это? Я почти уверен, что если вы сделаете это, то ответ откроется вам, и вы снова будете едины со вселенной.