Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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/6/eclipse/8.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_Eclipse - Fatal编程技术网

Java 数组排序不正确

Java 数组排序不正确,java,eclipse,Java,Eclipse,下午好。我为java入门课程创建了一个应用程序,允许用户按标题、工作室或年份对DVD收藏进行排序。该应用程序还允许用户向其收藏中添加额外的DVD,从而扩大其阵列。这段代码编译得很好,但显然有些地方出了问题,因为标题、工作室和年份都混在一起了。要明确的是,这段代码来自教科书,是一个实验室的一部分,它需要使用您在代码中看到的确切方法、包等。我并不是在寻求如何使代码更高效的建议(尽管我正在学习这一点,这是受欢迎的),而是具体地说,所提供的代码有什么问题导致了“混乱”。以下是我的代码: import j

下午好。我为java入门课程创建了一个应用程序,允许用户按标题、工作室或年份对DVD收藏进行排序。该应用程序还允许用户向其收藏中添加额外的DVD,从而扩大其阵列。这段代码编译得很好,但显然有些地方出了问题,因为标题、工作室和年份都混在一起了。要明确的是,这段代码来自教科书,是一个实验室的一部分,它需要使用您在代码中看到的确切方法、包等。我并不是在寻求如何使代码更高效的建议(尽管我正在学习这一点,这是受欢迎的),而是具体地说,所提供的代码有什么问题导致了“混乱”。以下是我的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

public class DVD extends JFrame implements ActionListener
{
    // construct components
    JLabel sortPrompt = new JLabel("Sort by:");
    JComboBox fieldCombo = new JComboBox();
    JTextPane textPane = new JTextPane();

    // initialize data in arrays
    String title[] = {"Casablanca", "Citizen Kane", "Singin' in the Rain", "The Wizard of Oz"};
    String studio[] = {"Warner Brothers", "RKO Pictures", "MGM", "MGM"};
    String year[] = {"1942", "1941", "1952", "1939"};

    // construct instance of DVD
    public DVD()
    {
        super("Classics on DVD");
    }

    // create the menu system
    public JMenuBar createMenuBar()
    {
        // create an instance of the menu
        JMenuBar mnuBar = new JMenuBar();
        setJMenuBar(mnuBar);

        // construct and populate the File menu
        JMenu mnuFile = new JMenu("File", true);
            mnuFile.setMnemonic(KeyEvent.VK_F);
            mnuFile.setDisplayedMnemonicIndex(0);
            mnuBar.add(mnuFile);

        JMenuItem mnuFileExit = new JMenu("Exit");
            mnuFileExit.setMnemonic(KeyEvent.VK_X);
            mnuFileExit.setDisplayedMnemonicIndex(1);
            mnuFile.add(mnuFileExit);
            mnuFileExit.setActionCommand("Exit");
            mnuFileExit.addActionListener(this);

        // contruct and populate the Edit menu
        JMenu mnuEdit = new JMenu("Edit", true);
            mnuEdit.setMnemonic(KeyEvent.VK_E);
            mnuEdit.setDisplayedMnemonicIndex(0);
            mnuBar.add(mnuEdit);

        JMenuItem mnuEditInsert = new JMenuItem("Insert New DVD");
            mnuEditInsert.setMnemonic(KeyEvent.VK_I);
            mnuEditInsert.setDisplayedMnemonicIndex(0);
            mnuEdit.add(mnuEditInsert);
            mnuEditInsert.setActionCommand("Insert");
            mnuEditInsert.addActionListener(this);

        JMenu mnuEditSearch = new JMenu("Search");
            mnuEditSearch.setMnemonic(KeyEvent.VK_R);
            mnuEditSearch.setDisplayedMnemonicIndex(3);
            mnuEdit.add(mnuEditSearch);

        JMenuItem mnuEditSearchByTitle = new JMenuItem("by Title");
            mnuEditSearchByTitle.setMnemonic(KeyEvent.VK_T);
            mnuEditSearchByTitle.setDisplayedMnemonicIndex(3);
            mnuEditSearch.add(mnuEditSearchByTitle);
            mnuEditSearchByTitle.setActionCommand("title");
            mnuEditSearchByTitle.addActionListener(this);

        JMenuItem mnuEditSearchByStudio = new JMenuItem("by Studio");
            mnuEditSearchByStudio.setMnemonic(KeyEvent.VK_S);
            mnuEditSearchByStudio.setDisplayedMnemonicIndex(3);
            mnuEditSearch.add(mnuEditSearchByStudio);
            mnuEditSearchByStudio.setActionCommand("studio");
            mnuEditSearchByStudio.addActionListener(this);

        JMenuItem mnuEditSearchByYear = new JMenuItem("by Year");
            mnuEditSearchByYear.setMnemonic(KeyEvent.VK_Y);
            mnuEditSearchByYear.setDisplayedMnemonicIndex(3);
            mnuEditSearch.add(mnuEditSearchByYear);
            mnuEditSearchByYear.setActionCommand("year");
            mnuEditSearchByYear.addActionListener(this);

        return mnuBar;
    }

    // create the content pane
    public Container createContentPane()
    {
        // populate the JComboBox
        fieldCombo.addItem("Title");
        fieldCombo.addItem("Studio");
        fieldCombo.addItem("Year");
        fieldCombo.addActionListener(this);
        fieldCombo.setToolTipText("Click the drop-down arrow to display sort fields.");

        // construct and populate the north panel
        JPanel northPanel = new JPanel();
            northPanel.setLayout(new FlowLayout());
            northPanel.add(sortPrompt);
            northPanel.add(fieldCombo);

        // create the JTextPane and center panel
        JPanel centerPanel = new JPanel();
            setTabsAndStyles(textPane);
            textPane = addTextToTextPane();
            JScrollPane scrollPane = new JScrollPane(textPane);
                scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
                scrollPane.setPreferredSize(new Dimension(500, 200));
            centerPanel.add(scrollPane);

        // create Container and set attributes
        Container c = getContentPane();
            c.setLayout(new BorderLayout(10,10));
            c.add(northPanel,BorderLayout.NORTH);
            c.add(centerPanel,BorderLayout.CENTER);

        return c;
    }

    // method to create tab stops and set font styles
    protected void setTabsAndStyles(JTextPane textPane)
    {
        // create Tab Stops
        TabStop[] tabs = new TabStop[2];
            tabs[0] = new TabStop(200, TabStop.ALIGN_LEFT, TabStop.LEAD_NONE);
            tabs[1] = new TabStop(350, TabStop.ALIGN_LEFT, TabStop.LEAD_NONE);
        TabSet tabset = new TabSet(tabs);

        // set Tab Style
        StyleContext tabStyle = StyleContext.getDefaultStyleContext();
        AttributeSet aset =
            tabStyle.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.TabSet, tabset);
        textPane.setParagraphAttributes(aset, false);

        // set Font styles
        Style fontStyle =
            StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);

        Style regular = textPane.addStyle("regular", fontStyle);
        StyleConstants.setFontFamily(fontStyle, "SansSerif");

        Style s = textPane.addStyle("italic", regular);
        StyleConstants.setItalic(s, true);

        s = textPane.addStyle("bold", regular);
        StyleConstants.setBold(s, true);

        s = textPane.addStyle("large", regular);
        StyleConstants.setFontSize(s, 16);
    }

    // method to add new text to the JTextPane
    public JTextPane addTextToTextPane()
    {
        Document doc = textPane.getDocument();
        try
        {
            // clear the previous text
            doc.remove(0, doc.getLength());

            // insert title
            doc.insertString(0,"TITLE\tSTUDIO\tYEAR\n",textPane.getStyle("large"));

            // insert detail
            for (int j = 0; j<title.length; j++)
            {
                doc.insertString(doc.getLength(), title[j] + "\t", textPane.getStyle("bold"));
                doc.insertString(doc.getLength(), studio[j] + "\t", textPane.getStyle("italic"));
                doc.insertString(doc.getLength(), year[j] + "\t", textPane.getStyle("regular"));
            }
        }
        catch(BadLocationException ble)
        {
            System.err.println("Couldn't insert text.");
        }

        return textPane;
    }

    // event to process user clicks
    public void actionPerformed(ActionEvent e)
    {
        String arg = e.getActionCommand();

        // user clicks the sort by combo box
        if (e.getSource() == fieldCombo)
        {
            switch(fieldCombo.getSelectedIndex())
            {
                case 0:
                    sort(title);
                    break;
                case 1:
                    sort(studio);
                    break;
                case 2:
                    sort(year);
                    break;
            }
        }

        // user clicks Exit on the File menu
        if (arg == "Exit")
            System.exit(0);

        // user clicks Insert New DVD on the Edit Menu
        if (arg == "Insert")
        {
            // accept new data
            String newTitle = JOptionPane.showInputDialog(null, "Please enter the new movie's title");
            String newStudio = JOptionPane.showInputDialog(null, "Please enter the studio for " + newTitle);
            String newYear = JOptionPane.showInputDialog(null, "Please enter the year for " + newTitle);

            // enlarge arrays
            title = enlargeArray(title);
            studio = enlargeArray(studio);
            year = enlargeArray(year);

            // add new data to arrays
            title[title.length-1] = newTitle;
            studio[studio.length-1] = newStudio;
            year[year.length-1] = newYear;

            // call sort method
            sort(title);
            fieldCombo.setSelectedIndex(0);
        }

        // user clicks Title on the Search submenu
        if (arg == "title")
            search(arg, title);

        // user clicks Studio on the Search submenu
        if (arg == "studio")
            search(arg, studio);

        // user clicks Year on the Search submenu
        if (arg == "year")
            search(arg, year);
    }

    // method to enlarge an array by 1
    public String[] enlargeArray(String[] currentArray)
    {
        String[] newArray = new String[currentArray.length + 1];
        for (int i = 0; i<currentArray.length; i++)
            newArray[i] = currentArray[i];
        return newArray;
    }

    // method to sort arrays
    public void sort(String tempArray[])
    {
        // loop ton control number of passes
        for (int pass = 1; pass < tempArray.length; pass++)
        {
            for (int element = 0; element < tempArray.length - 1; element++)
                if (tempArray[element].compareTo(tempArray[element + 1])>0)
                {
                    swap(title, element, element + 1);
                    swap(studio, element, element + 1);
                    swap(year, element, element + 1);
                }
        }
        addTextToTextPane();
    }

    // method to swap two elements of an array
    public void swap(String swapArray[], int first, int second)
    {
        String hold; // temporary holding area for swap
        hold = swapArray[first];
        swapArray[first] = swapArray[second];
        swapArray[second] = hold;
    }

    public void search(String searchField, String searchArray[])
    {
        try
        {
            Document doc = textPane.getDocument(); // assign text to document object
            doc.remove(0,doc.getLength()); // clear previous text

            // display column titles
            doc.insertString(0,"TITLE\tSTUDIO\tYEAR\n",textPane.getStyle("large"));

            // prompt user for search data
            String search = JOptionPane.showInputDialog(null, "Please enter the "+searchField);
            boolean found = false;

            // search arrays
            for (int i = 0; i<title.length; i++)
            {
                if (search.compareTo(searchArray[i])==0)
                {
                    doc.insertString(doc.getLength(), title[i] + "\t", textPane.getStyle("bold"));
                    doc.insertString(doc.getLength(), studio[i] + "\t", textPane.getStyle("italic"));
                    doc.insertString(doc.getLength(), year[i] + "\t", textPane.getStyle("regular"));
                    found = true;
                }
            }
            if (found == false)
            {
                JOptionPane.showMessageDialog(null, "Your search produced no results.","No results found",JOptionPane.INFORMATION_MESSAGE);
                sort(title);
            }
        }
        catch(BadLocationException ble)
        {
            System.err.println("Couldn't insert text.");
        }
    }

    // main method executes at run time
    public static void main(String arg[])
    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        DVD f = new DVD();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setJMenuBar(f.createMenuBar());
        f.setContentPane(f.createContentPane());
        f.setSize(600,375);
        f.setVisible(true);
    }
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.text.*;
公共类DVD扩展JFrame实现ActionListener
{
//构造组件
JLabel sortPrompt=新的JLabel(“排序依据:”);
JComboBox fieldCombo=新的JComboBox();
JTextPane textPane=新的JTextPane();
//初始化数组中的数据
字符串标题[]={“卡萨布兰卡”、“公民凯恩”、“雨中歌唱”、“绿野仙踪”};
弦乐工作室[]={“华纳兄弟”、“RKO电影”、“米高梅”、“米高梅”};
字符串年份[]={“1942”、“1941”、“1952”、“1939”};
//DVD的构造实例
公共DVD()
{
超级(“DVD上的经典作品”);
}
//创建菜单系统
公共JMenuBar createMenuBar()
{
//创建菜单的一个实例
JMenuBar mnuBar=新的JMenuBar();
setJMenuBar(mnuBar);
//构造并填充“文件”菜单
JMenu mnuFile=新JMenu(“文件”,true);
mnuFile.setMnemonic(KeyEvent.VK_F);
mnuFile.setDisplayedMononicIndex(0);
mnuBar.add(mnuFile);
JMenuItem mnuFileExit=新JMenu(“退出”);
mnuFileExit.setMnemonic(KeyEvent.VK_X);
mnuFileExit.setDisplayedMonicIndex(1);
mnuFile.add(mnuFileExit);
mnuFileExit.setActionCommand(“退出”);
mnuFileExit.addActionListener(此);
//构造并填充编辑菜单
JMenu mnuEdit=新JMenu(“编辑”,真);
mnuEdit.setMnemonic(KeyEvent.VK_E);
mnuEdit.setDisplayedMonicIndex(0);
mnuBar.add(mnuEdit);
JMenuItem mnuEditInsert=新JMenuItem(“插入新DVD”);
mnuEditInsert.setMnemonic(KeyEvent.VK_I);
mnuEditInsert.setDisplayedMonicIndex(0);
mnuEdit.add(mnuEditInsert);
mnuEditInsert.setActionCommand(“插入”);
mnuEditInsert.addActionListener(此);
JMenu mnuEditSearch=新JMenu(“搜索”);
mnuEditSearch.setMnemonic(KeyEvent.VK_R);
mnuEditSearch.setDisplayedMonicIndex(3);
mnuEdit.add(mnuEditSearch);
JMenuItem mnuEditSearchByTitle=新的JMenuItem(“按标题”);
mnuEditSearchByTitle.set助记符(KeyEvent.VK_T);
mnuEditSearchByTitle.setDisplayedMonicIndex(3);
mnuEditSearch.add(mnuEditSearchByTitle);
mnuEditSearchByTitle.setActionCommand(“标题”);
mnuEditSearchByTitle.addActionListener(此);
JMenuItem mnuEditSearchByStudio=新JMenuItem(“由工作室”);
mnuEditSearchByStudio.set助记符(KeyEvent.VK_S);
mnuEditSearchByStudio.setdisplayednemonicindex(3);
mnuEditSearch.add(mnuEditSearchByStudio);
mnuEditSearchByStudio.setActionCommand(“studio”);
mnuEditSearchByStudio.addActionListener(此);
JMenuItem mnuEditSearchByYear=新的JMenuItem(“按年”);
mnuEditSearchByYear.setMemonic(KeyEvent.VK_Y);
mnuEditSearchByYear.SetDisplayedMonicIndex(3);
mnuEditSearch.add(mnuEditSearchByYear);
mnuEditSearchByYear.setActionCommand(“年”);
mnuEditSearchByYear.addActionListener(此);
返回mnuBar;
}
//创建内容窗格
公共容器createContentPane()
{
//填充JComboBox
fieldCombo.addItem(“标题”);
fieldCombo.addItem(“工作室”);
fieldCombo.addItem(“年度”);
fieldCombo.addActionListener(此);
setToolTipText(“单击下拉箭头以显示排序字段”);
//构造并填充北面板
JPanel northPanel=新的JPanel();
setLayout(新的FlowLayout());
添加(sortPrompt);
添加(字段组合);
//创建JTextPane和中心面板
JPanel centerPanel=新的JPanel();
设置选项卡和样式(文本窗格);
textPane=addTextToTextPane();
JScrollPane scrollPane=新的JScrollPane(textPane);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
scrollPane.setPreferredSize(新维度(500200));
添加(滚动窗格);
//创建容器并设置属性
容器c=getContentPane();
c、 setLayout(新边界布局(10,10));
c、 添加(northPanel,BorderLayout.NORTH);
c、 添加(中心面板,BorderLayout.CENTER);
返回c;
}
//方法创建制表位并设置字体样式
受保护的无效设置选项卡和样式(JTextPane textPane)
{
//创建制表位
TabStop[]tabs=新TabStop[2];
制表符[0]=新制表符(200,制表符.ALIGN\u LEFT,制表符.LEAD\u NONE);
制表符[1]=新制表符(350,TabStop.ALIGN\u LEFT,TabStop.LEAD\u NONE);
TabSet TabSet=新的TabSet(tabs);
//设置选项卡样式
StyleContext tabStyle=StyleContext.getDefaultStyleContext();
属性集=
tabStyle.addAttribute(SimpleAttributeSet.EMPTY、StyleConstants.TabSet、TabSet);
setParagraphAttributes(aset,false);
//设置字体样式
doc.insertString(doc.getLength(), year[j] + "\t", textPane.getStyle("regular"));
doc.insertString(doc.getLength(), year[j] + "\n", textPane.getStyle("regular"));
doc.insertString(doc.getLength(), year[j] + "\n", textPane.getStyle("regular"));