Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要对可供出租的电影列表进行排序_Java_Arrays_Sorting - Fatal编程技术网

Java 我需要对可供出租的电影列表进行排序

Java 我需要对可供出租的电影列表进行排序,java,arrays,sorting,Java,Arrays,Sorting,我有我的方法,在dvd类的数组(dArray)中对所有电影进行排序。现在我只需要对可用电影进行排序(setAvailable==true)。该阵列由从菜单中输入电影的客户动态填充。我的代码目前在数组中搜索并对A到B的所有电影进行排序,但现在我希望它只搜索和排序d.setAvailable(true)的电影。。。谢谢你的帮助。非常感谢 以下是阵列中所有电影的排序列表: if(e.getSource() == sortMovBtn) { if(dArray[0

我有我的方法,在dvd类的数组(dArray)中对所有电影进行排序。现在我只需要对可用电影进行排序(setAvailable==true)。该阵列由从菜单中输入电影的客户动态填充。我的代码目前在数组中搜索并对A到B的所有电影进行排序,但现在我希望它只搜索和排序d.setAvailable(true)的电影。。。谢谢你的帮助。非常感谢

以下是阵列中所有电影的排序列表:

if(e.getSource() == sortMovBtn)
        {
            if(dArray[0]==null)
            {
                JOptionPane.showMessageDialog(null,"No movies, please enter\na movie from the main menu","Error",JOptionPane.ERROR_MESSAGE);
            }

            else
            {
                BtnPanel.setVisible(false);
                imgPnl.setVisible(false);
                btnBackDvd.setVisible(true);
                txtAreaSortDvd.setVisible(true);
                sortDvdPnl.setVisible(true);
                Dvd tmp;

                for (int i = 0; i < manyDvd; i++)
                {
                    for (int j = 0; j < (manyDvd - 1 - i); j++)
                    {
                        if (dArray[j].getTitle().compareTo(dArray[j+1].getTitle()) > 0)
                        {
                            tmp = dArray[j];
                            dArray[j] = dArray[j+1];
                            dArray[j+1] = tmp;
                        }
                    }
                }
                a = "";
                for (int k = 0; k <manyDvd /*dArray.length*/; k++)
                    a += (dArray[k]);
                txtAreaSortDvd.setText(a);
                txtAreaSortDvd.setVisible(true);
                txtAreaSortDvd.setEditable(false);

                //Set font of text area
                txtAreaSortDvd.setFont(new Font("Arial", Font.BOLD, 12));

                //Initialize JScrollPane
                JScrollPane pane1 = new JScrollPane(txtAreaSortDvd);

                //Enable user to use wheel on mouse to scroll
                pane1.setWheelScrollingEnabled(true);

                //Set the scrollbar to always show
                pane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

                //Add ScrollPane to Panel
                sortDvdPnl.add(pane1);

                //Add panel to frame
                add(sortDvdPnl);

            }

        }
if(e.getSource()==sortMovBtn)
{
if(dArray[0]==null)
{
JOptionPane.showMessageDialog(null,“没有电影,请从主菜单输入电影”,“错误”,JOptionPane.Error\u消息);
}
其他的
{
BtnPanel.setVisible(false);
imgPnl.setVisible(false);
btnBackDvd.setVisible(真);
txtAreaSortDvd.setVisible(真);
sortDvdPnl.setVisible(true);
Dvd-tmp;
对于(int i=0;i0)
{
tmp=dArray[j];
dArray[j]=dArray[j+1];
dArray[j+1]=tmp;
}
}
}
a=“”;

首先,对于(int k=0;k使用比较器使用比较器),您不应该将用于处理模型(数据)的代码与UI代码混合在一起

第二,您不应该在UI线程上对数据进行排序,而是在后台工作线程上进行排序

第三,您不应该自己编写排序,特别是不应该这样。您的排序是O(n^2)。对于数组,在java.util.Arrays中有很好的排序选项,对于集合类,在java.util.Collections中也有很好的排序选项

有两种基本方法可以仅对满足特定条件的项进行排序。您可以使用自定义比较器对整个数据集进行排序,首先按条件进行匹配,然后按排序条件的其余部分进行匹配。然后,您的结果将显示在数据的开始处,并且您将只显示结果,直到第一个项出现为止不符合标准

这样做的好处是,除了存储数据所需的空间之外,它不需要额外的空间

一种更简洁的方法是,只复制符合条件的那部分数据,然后对其进行排序。如果数据位于列表而不是数组中,那么处理起来也会容易得多,因为您不需要对数据进行两次传递:一次是找出符合条件的项目数,另一次是筛选出符合条件的项目数ng项。(在这两者之间,您将分配一个数组来保存它们。)

假设您的数据在列表中。您可以获得如下可用电影:

public List<Movie> getAvailable(List<Movie> movies) {
    List<Movie> avail = new ArrayList<Movie>();
    for (Movie movie : movies) {
        if (movie.isAvailable()) {
            avail.add(movie);
        }
    }
    return avail;
}
List<Movie> availOnly = getAvailable(movies);
Collections.sort(availOnly);
public List getAvailable(列出电影){
List avail=new ArrayList();
用于(电影:电影){
if(movie.isAvailable()){
添加(电影);
}
}
回报效用;
}
然后,您可以对这些电影进行如下排序(按其自然排序顺序):

public List<Movie> getAvailable(List<Movie> movies) {
    List<Movie> avail = new ArrayList<Movie>();
    for (Movie movie : movies) {
        if (movie.isAvailable()) {
            avail.add(movie);
        }
    }
    return avail;
}
List<Movie> availOnly = getAvailable(movies);
Collections.sort(availOnly);
List availOnly=getAvailable(电影);
集合。排序(有效);
另外,在Java 8中,您将能够执行以下操作:

Iterable<Movie> avail = movies.filter(Movie::isAvailable).sorted();
Iterable avail=movies.filter(Movie::isAvailable.sorted();

首先,您不应该将用于处理模型(数据)的代码与UI代码混为一谈

第二,您不应该在UI线程上对数据进行排序,而是在后台工作线程上进行排序

第三,您不应该自己编写排序,特别是不应该这样。您的排序是O(n^2)。对于数组,在java.util.Arrays中有很好的排序选项,对于集合类,在java.util.Collections中也有很好的排序选项

有两种基本方法可以仅对满足特定条件的项进行排序。您可以使用自定义比较器对整个数据集进行排序,首先按条件进行匹配,然后按排序条件的其余部分进行匹配。然后,您的结果将显示在数据的开始处,并且您将只显示结果,直到第一个项出现为止不符合标准

这样做的好处是,除了存储数据所需的空间之外,它不需要额外的空间

一种更简洁的方法是,只复制符合条件的那部分数据,然后对其进行排序。如果数据位于列表而不是数组中,那么处理起来也会容易得多,因为您不需要对数据进行两次传递:一次是找出符合条件的项目数,另一次是筛选出符合条件的项目数ng项。(在这两者之间,您将分配一个数组来保存它们。)

假设您的数据在列表中。您可以获得如下可用电影:

public List<Movie> getAvailable(List<Movie> movies) {
    List<Movie> avail = new ArrayList<Movie>();
    for (Movie movie : movies) {
        if (movie.isAvailable()) {
            avail.add(movie);
        }
    }
    return avail;
}
List<Movie> availOnly = getAvailable(movies);
Collections.sort(availOnly);
public List getAvailable(列出电影){
List avail=new ArrayList();
用于(电影:电影){
if(movie.isAvailable()){
添加(电影);
}
}
回报效用;
}
然后,您可以对这些电影进行如下排序(按其自然排序顺序):

public List<Movie> getAvailable(List<Movie> movies) {
    List<Movie> avail = new ArrayList<Movie>();
    for (Movie movie : movies) {
        if (movie.isAvailable()) {
            avail.add(movie);
        }
    }
    return avail;
}
List<Movie> availOnly = getAvailable(movies);
Collections.sort(availOnly);
List availOnly=getAvailable(电影);
集合。排序(有效);
另外,在Java 8中,您将能够执行以下操作:

Iterable<Movie> avail = movies.filter(Movie::isAvailable).sorted();
Iterable avail=movies.filter(Movie::isAvailable.sorted();

请删除与问题不直接相关的所有代码。请参阅将所有可用电影添加到新列表,排序并显示该列表?如何向用户显示信息?请注意,a具有内置的功能,也可以过滤条目。如何将可用电影添加到新列表?请删除所有代码,而不是directly与问题相关。请参阅将所有可用电影添加到新列表,排序并显示该电影?如何进行