我是Java新手。我将使用JFrame创建一个带有排序菜单选项的GUI,项目包括(冒泡,插入,快速排序)。我还要使用在JFrame中自动创建的动作执行事件来输入我的代码,以便根据排序选择对数字进行排序。当用户在textField中输入不超过10个整数并选择冒泡排序时,结果应显示在JLabel中。我运行我的代码没有错误,但我的结果没有出现在标签中。任何人都可以帮助解决错误编码的问题吗?请参阅下面的气泡选择代码。
private void jMenu1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int c, n, d, swap;
Scanner in = new Scanner(System.in);
n=in.nextInt();
int array[] = new int[n];
for (c = 0; c < n; c++)
{
array[c]= in.nextInt();
for(c=0;c < (n-1);c++)
{
for (d=0; d < n-c-1;d++)
{
if(array[d]>array[d+1])
{
swap=array[d];
array[d]=array[d+1];
array[d+1]=swap;
}
}
}
for ( c=0;c<n;c++)
{
jTextArea1.setText(Integer.toString(array[c]));
//Integer.toStri
}
}
}
答案 0 :(得分:1)
我希望我的样本会帮助你,即使我做了一些个人决定,因为它并非一帆风顺。无论如何,让我做一些准确性:默认情况下,如果您没有从排序菜单中选择任何内容并直接点击启动,它将调用冒泡排序。此外,如果选中它,则复选框将尝试计算升序,如果不是,则表示降序。
对于isSortable()方法,你提到了我在代码中包含的大约10个数字的条件,但是,我不知道你想要哪个条件,所以我实现了一个return true方法,我会告诉你完成,同样的算法,我明确地把默认值检查GUI是好的。 至于分隔符,我假设你只想管理整数并用“,”分隔,所以,再次,如果你想要丰富它:)!
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Sorter extends JPanel implements ActionListener {
private static final long serialVersionUID = -5548803322850070957L;
private static final String BUBBLE_SORT = "bubble sort";
private static final String INSERTION_SORT = "insertion sort";
private static final String QUICK_SORT = "quick sort";
private static final String SEPARATOR = ",";
private static final String NO_RESULT = "no result";
private static final Dimension TEXT_INPUT_DIM = new Dimension(200, 30);
private static final JMenuBar MENU = new JMenuBar();
private static final JMenu SORT = new JMenu("Sorting Algorithms");
private static final JMenuItem BUBBLE = new JMenuItem(BUBBLE_SORT);
private static final JMenuItem INSERTION = new JMenuItem(INSERTION_SORT);
private static final JMenuItem QUICK_S = new JMenuItem(QUICK_SORT);
private final JTextField textfieldInput = new JTextField();
private final JCheckBox checkbox = new JCheckBox();
private final JLabel orderLabel = new JLabel("sort in ascending order");
private final JLabel labRes = new JLabel("sorted result : ");
private final JLabel res = new JLabel(NO_RESULT);
private static String selectedMenu;
public Sorter() {
setLayout(new GridLayout(2, 1));
textfieldInput.setPreferredSize(TEXT_INPUT_DIM);
JPanel top = new JPanel();
top.setLayout(new FlowLayout(10));
top.add(textfieldInput);
top.add(createPanelCheckbox());
top.add(createSortButton());
add(top);
add(createPanelResult());
}
private Component createSortButton() {
JButton sortButton = new JButton("Launch");
sortButton.addActionListener(this);
return sortButton;
}
private final JPanel createPanelResult() {
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(labRes, BorderLayout.WEST);
p.add(res, BorderLayout.CENTER);
return p;
}
private final JPanel createPanelCheckbox() {
JPanel p = new JPanel();
p.setLayout(new FlowLayout(10));
p.add(checkbox);
p.add(orderLabel);
return p;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(500, 300);
f.setLocationRelativeTo(null);
f.add(new Sorter());
f.setJMenuBar(createMenu());
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private static JMenuBar createMenu() {
BUBBLE.addActionListener(new MenuItemListener());
SORT.add(BUBBLE);
INSERTION.addActionListener(new MenuItemListener());
SORT.add(INSERTION);
QUICK_S.addActionListener(new MenuItemListener());
SORT.add(QUICK_S);
MENU.add(SORT);
return MENU;
}
static class MenuItemListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
selectedMenu = e.getActionCommand();
}
}
@Override
public void actionPerformed(ActionEvent e) {
String content = textfieldInput.getText();
String[] parsedNumbers = content.split(SEPARATOR);
if (isSortable(parsedNumbers) && parsedNumbers.length < 10) {
int[] result = null;
if(selectedMenu==null)
selectedMenu = BUBBLE_SORT;
switch (selectedMenu) {
case BUBBLE_SORT:
result = bubbleSort(checkbox.isSelected());
break;
case INSERTION_SORT:
result = insertionSort(checkbox.isSelected());
break;
case QUICK_SORT:
result = quickSort(checkbox.isSelected());
break;
}
res.setText(result == null ? NO_RESULT : fillResultLabel(result));
}
}
private String fillResultLabel(int[] result) {
StringBuilder res = new StringBuilder();
for (int nb : result) {
res.append(nb + " ");
}
return res.toString();
}
private final boolean isSortable(String[] numbers) {
return true;
}
private int[] bubbleSort(boolean sortAscending) {
return new int[]{1,2,3,4};
}
private int[] insertionSort(boolean sortAscending) {
return new int[]{5,6,7,8};
}
private int[] quickSort(boolean sortAscending) {
return new int[]{9,10,11,12};
}
}