Как мне вставить объект в правильную позицию, используя Java? - PullRequest
0 голосов
/ 28 октября 2019

В моей программе есть каталог объектов, каждый из которых содержит такие вещи, как названия, номера элементов, исполнители песен и т. Д. Мне нужно взять уже написанный код и изменить метод addItem, чтобы он не просто помещал элемент в конец элемента. массив, но вместо этого помещает его в правильное место в массиве, чтобы он оставался отсортированным. Я пытаюсь сделать это, сравнивая тип элемента сначала в алфавитном порядке (книга, фильм или музыка), и если они совпадают, то я буду сравнивать по номеру элемента. Я не сортирую весь массив после вставки объекта, поэтому я знаю, что мне нужен только один цикл, а не два вложенных. Единственное, что я видел, это можно сделать только в том случае, если сам массив является одним из аргументов метода, поэтому заголовок метода будет выглядеть примерно так:

 public static void insertionSort (Comparable[] list)

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

  public void addItem(Item theItem)
    {

        items[size] = theItem;
        size++;


    }



//This Is a class for a general Item 
public class Item implements Comparable<Item>
{
    // instance variables - replace the example below with your own
    private int itemnum;
    private String title;
    private double price;

    /**
     * Constructor for objects of class Item
     */
    public Item(int id, String t, double p)
    {
        // initialise instance variables
        itemnum = id;
        title = t;
        price = p;
    }

    /**
     * An example of a method - replace this comment with your own
     *
     * @param  y  a sample parameter for a method
     * @return    the sum of x and y
     */
    public int getItemNumber()
    {
        // put your code here
        return itemnum;
    }

    public String getItemType()
    {
        return "Item";
    }

    public String getItemTitle()
    {
      return title;  
    }

    public String toString()
    {
        String line1, line2, line3, line4, out;
        String itemtype = this.getItemType();
        line1 = String.format("Item number: %d%n", itemnum);
        line2 = String.format("Item type: %s%n", itemtype);
        line3 = String.format("Item title: %s%n", title);
        line4 = String.format("Item price: %.2f%n", price);
        out = line1 + line2 + line3 + line4 + "\n";
        return out;
    } 
    public int compareTo(Item other){
        //items are equal
        if(this.getItemType().equals(other.getItemType())){
           return this.itemnum - other.itemnum;
        }
        //item types are not equal
        else
        return this.getItemType().compareTo(other.getItemType());


    }
}

Как создать метод для вставки объекта в массив в правильную позицию, используя только сам объект в качестве параметра?

1 Ответ

0 голосов
/ 28 октября 2019

Рассматривали ли вы использовать LinkedList для обработки дела? Во-первых, он сохраняет упорядоченные данные (порядок вставки по умолчанию), во-вторых, вы можете добавить / удалить объект по определенному индексу. См. Пример ниже (извлечено из быстрого поиска в Google)

import java.util.*;
public class JavaExample{
   public static void main(String args[]){

     LinkedList<String> list=new LinkedList<String>();

     //Adding elements to the Linked list
     list.add("Steve");
     list.add("Carl");
     list.add("Raj");

     //Adding an element to the first position
     list.addFirst("Negan");

     //Adding an element to the last position
     list.addLast("Rick");

     //Adding an element to the 3rd position
     list.add(2, "Glenn");

     //Iterating LinkedList
     Iterator<String> iterator=list.iterator();
     while(iterator.hasNext()){
       System.out.println(iterator.next());
     }
   } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...