入力文字列を 1 次元配列に変換し、選択ソートを使用して配列をソートするプログラムを作成します。
考え方は次のとおりです。
「乱数を生成」ボタンをクリックして乱数オブジェクトを作成します。
テキスト領域をクリアするには、JTextArea の setText() メソッドを使用します。
整数の 1 次元配列を作成し、長さ 10 のスペースを割り当てます。
配列要素を初期化し、Random クラスの nextInt() メソッドを使用して 50 以内の乱数を生成し、JTextArea クラスの append() メソッドを使用して配列要素をテキスト フィールド コントロールに表示します。
[並べ替え] ボタンをクリックし、JTextArea クラスの setText() メソッドを使用してテキスト領域をクリアします。
二重層の for ループを使用して、各パスを 2 番目の要素から最後の要素までソートし、ソートに含まれる要素を走査して、最大値に対応する配列添字を見つけます。
array.length-i の位置とインデックス (最大値) の 2 つの数値を交換して、各ソート後に見つかった最大値がそのソートに含まれる配列の末尾になるようにします。
for ループを使用して配列を走査し、Random クラスの append メソッドを使用して、並べ替えられた配列要素をテキスト フィールドに表示します。
コードは次のとおりです。
次のようにコードをコピーします。
インポートjava.awt.EventQueue;
java.awt.GridBagConstraintsをインポートします。
インポートjava.awt.GridBagLayout;
java.awt.Insetsをインポートします。
インポートjava.awt.event.ActionEvent;
インポート java.awt.event.ActionListener;
java.util.Randomをインポートします。
javax.swing.JButton をインポートします。
javax.swing.JFrameをインポートします。
javax.swing.JPanelをインポートします。
javax.swing.JScrollPaneをインポートします。
インポート javax.swing.JTextArea;
インポート javax.swing.border.EmptyBorder;
パブリック クラス SelectSort extends JFrame {
/**
*
*/
プライベート静的最終ロングserialVersionUID = 6824538613659403529L;
プライベートJPanelコンテンツペイン;
/**
* アプリケーションを起動します。
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
試す {
SelectSort フレーム = 新しい SelectSort();
フレーム.setVisible(true);
} catch (例外 e) {
e.printStackTrace();
}
}
});
}
/**
※フレームを作成します。
*/
public SelectSort() {
setTitle("選択ソートを使用して配列をソートします");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = 新しい JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[] { 0, 0 };
gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0, 0 };
gbl_contentPane.columnWeights = 新しい double[] { 1.0, Double.MIN_VALUE };
gbl_contentPane.rowWeights = 新しい double[] { 1.0, 0.0, 1.0, 0.0,
Double.MIN_VALUE };
contentPane.setLayout(gbl_contentPane);
JScrollPane スクロールペイン = 新しい JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.insets = 新しいインセット(0, 0, 5, 0);
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 0;
gbc_scrollPane.gridy = 0;
contentPane.add(scrollPane, gbc_scrollPane);
textArea1 = 新しい JTextArea();
スクロールペイン.setViewportView(textArea1);
JButton ボタン = new JButton("乱数を生成");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
GridBagConstraints gbc_button = new GridBagConstraints();
gbc_button.insets = 新しいインセット(0, 0, 5, 0);
gbc_button.gridx = 0;
gbc_button.gridy = 1;
contentPane.add(ボタン, gbc_ボタン);
JScrollPane ScrollPane_1 = 新しい JScrollPane();
GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
gbc_scrollPane_1.insets = 新しいインセット(0, 0, 5, 0);
gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
gbc_scrollPane_1.gridx = 0;
gbc_scrollPane_1.gridy = 2;
contentPane.add(scrollPane_1, gbc_scrollPane_1);
textArea2 = 新しい JTextArea();
scrollPane_1.setViewportView(textArea2);
JButton button_1 = new JButton("並べ替え");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_1_actionPerformed(e);
}
});
GridBagConstraints gbc_button_1 = new GridBagConstraints();
gbc_button_1.gridx = 0;
gbc_button_1.gridy = 3;
contentPane.add(button_1, gbc_button_1);
}
プライベート int[] 配列 = 新しい int[10];
プライベート JTextArea textArea1;
プライベート JTextArea テキストエリア 2;
protected void do_button_actionPerformed(ActionEvent e) {
Random random = new Random();//乱数オブジェクトを作成する
textArea1.setText("");//テキストエリアをクリア
for (int i = 0; i < array.length; i++) {//配列要素を初期化します
array[i] = random.nextInt(50);//50以内の乱数を生成します
textArea1.append(array[i]+" ");// テキストエリアコントロールに配列要素を表示します
}
}
protected void do_button_1_actionPerformed(ActionEvent e) {
textArea2.setText("");//テキストエリアをクリア
整数インデックス;
for (int i = 1; i < array.length; i++) {
インデックス = 0;
for (int j = 1; j <= array.length - i; j++) {
if (配列[j] > 配列[インデックス]) {
Index = j; // 最大値を求める
}
}
//array.length-i の位置とインデックス (最大値) の 2 つの数値を交換します。
int temp = array[array.length - i];
配列[配列.長さ - i] = 配列[インデックス];
配列[インデックス] = 一時;
}
for (int i = 0; i < array.length; i++) {
textArea2.append(array[i] + " ");//ソートされた配列要素をテキストエリアに表示します
}
}
}
効果は次の図に示すとおりです。