Member 14039473 Ответов: 0

Напишите программу под названием 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

Вы действительно установили точку останова или две и отладили это? Я почти уверен, что если вы сделаете это, то ответ откроется вам, и вы снова будете едины со вселенной.

0 Ответов