Sibainu Relax Room

愛犬の柴犬とともに過ごす部屋

JAVAでクイックソート1

柴犬の目線の先に子犬がいます。あの子こっちに来ないかなぁーと思っている柴犬です。

概要

JAVAを始めるつもりで、昨年(令和4年)9月29日に「JAVA 始める」と投稿しましたが、その後全く進んでいませんでした。

原因は GO言語 RUSTに興味があったのでそちらを先にしただけです。

VSCodeでコードを書く予定にしていたのでイントールの記事を投稿しましたが、今回使った参考書が、Eclipse IDE を使っていますのでこれをインストールして始めることにしました。

JAVAはファイルダイヤログが使えますので、これを使いファイルを読み込み、クイックソートをして、ソート後にファイルダイヤログを開き書き出すということを試みようと考えています。

クイックソートのデータは、GO言語、RUSTなどのクイックソートに使ったものと同じものを使います。

今回、教科書に利用した本は次のものです。

これまでプログラミングに縁がなかった初心者を対象にしているような内容ですが、私は一人で独学で習得しているだけなので基礎の教え方など改めて勉強になりました。

著者の三谷さんは2016年度筑波大学オープンコースウェアの講師でその時の講義をネットで見ることができます。

ファイルダイヤログ

先ずは、ファイルを実行してボタン2つとラベルを配置したフォームを開くことから始めます。

そして、2つのボタンそれぞれにオープンファイルダイヤログ、セイブファイルダイヤログを開く機能を持たせます。

ボタンをクリックしてダイヤログが開き、ファイルを選択したらラベルにフルパスを表示するようにします。

公式のホームページの「クラスFileDialog」を調べてダイヤログを呼び出すコードを書いてみました。公式のホームページにデフォルトパスの設定メソッドも載っています。

https://docs.oracle.com/javase/jp/8/docs/api/java/awt/FileDialog.html

copy

import java.awt.FileDialog;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class test extends JFrame implements ActionListener {
	FileDialog fd;
	JLabel lb;

	public static void main(String[] args) {
		new test();
	}

	public test() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(600 , 240);
		setLayout(new GridLayout(3,1));

                //この感覚は JavaScript を思わせます。
		JButton load = new JButton("LOAD");
		load.addActionListener(this);
		getContentPane().add(load);

		JButton save = new JButton("SAVE");
		save.addActionListener(this);
		getContentPane().add(save);
		
		lb = new JLabel();
		getContentPane().add(lb);
		
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		//クリックしたボタンにより処理を分ける
		if (e.getActionCommand() == "LOAD" ) {
			fd = new FileDialog(this , "ファイルを開く" , FileDialog.LOAD);
		} else {
			fd = new FileDialog(this , "ファイルの保存" , FileDialog.SAVE);
		}

		//ファイルダイヤログの表示
		fd.setVisible(true);

		//クリックしたファイルのフルパスをレベルに表示します。
キャンセル対応
		if (fd.getDirectory() != null) {
			lb.setText(fd.getDirectory() + fd.getFile());
		} else {
			lb.setText("");
		}
	}

}

コードの実行

エクリプスのコードエディター部に上記コードを書いて(コピペ)実行してみました。

フォームが開きました。

ボタン「LOAD」をクリックしてみます。

ダイヤログが開きました。成功です。

左から2つ目のファイルを開いてみます。ラベルにフルパスを表示でき、想定した結果が得られました。

これで、ファイルの読み込みの目途が立ちました。

今日はここまでとします。次回はCSVファイルの読み込みとソートの実行をしてみます。