Я создаю PriorityQueue без использования класса PQ в Java, и методы get
и put
работают как задумано, к сожалению, метод toString()
не проходит мои тестовые случаи, и я не могу ничего напечататьна консоль. Я совершенно заблудился в том, в чем проблема, поскольку методы get () и put () работают нормально, но приведенные несколько тестовых примеров не проходят. Мой код:
private int priority;
private String data;
Element(int priority, String data) {
// Ihr Code
this.priority = priority;
this.data = data;
}
public String getData() {
// Ihr Code
return data;
}
public int getPriority() {
// Ihr Code
return priority;
}
/**
* Return data and priority as string
* Format: Data (Priority)
* e.g: abc (7)
*/
public String toString() {
String str = data + " " + Integer.toString(priority) + ")";
return str;
}
}
public class PriorityQueue {
static final int SIZE = 32;
private Element[] data = null;
// actual number of entries
private int len = 0;
/**
* Creates a new PriorityQueue
*/
public PriorityQueue() {
data = new Element[SIZE];
}
/**
* Adds a new element into the queue as long as there is space
* Returns true if element could be added, otherwise false
*/
boolean put(Element element) {
// Ihr Code
if (len == SIZE) {
return false;
}else if (len > 0 && len < SIZE){
int i = len;
while (i > 0 && element.getPriority() > data[i-1].getPriority()){
data[i] = data[i-1];
i--;
}
data[i] = element;
len++;
return true;
}else{
return false;
}
}
/**
* Returns element with the highest priority
* and removes it from the queue. Otherwise returns null
*
*/
Element get() {
// Ihr Code
if(len==0){
return null;
}else if (len > 0){
Element x = data[0];
for(int i = 1; i < len; i++){
data[i-1] = data[i];
}
--len;
return x;
}else{
return null;
}
}
/**
* Number of entries
*/
int length() {
// Ihr Code
return len;
}
/**
* Returns contents of the queue as a String
* Format: data1 (priority1), data2 (priority2)
* e.g: abc (7), cde (8)
* Attention: There should be no comma at the end of the String
*/
public String toString() {
// Code
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++){
sb.append(data[i]).append(",");
}
if(sb.length() > 0){
sb.deleteCharAt(sb.length()-1);
}
String res = sb.toString();
return res;
}
Я могу прекрасно скомпилировать программу, но ничего не печатается так, как задумано. Мои тесты, такие как
pq.put(new Element(3, "hello"));
pq.put(new Element(7, "world"));
String pqAsString = pq.toString().replace(" ", "");
assertTrue(pqAsString.contains("hello"));
Судья говорит, что assertTrue
не проходит. Кроме того, другой тестовый пример assertEquals(gt.getPriority(), e.getPriority());
также не работает, и я не получаю вообще. gt
и e
являются элементами, определенными в методе, без дальнейшего объявления.
Буду очень признательна за любую помощь в улучшении моего PQ или за помощь в использовании метода toString
! Благодарю.