すずろぐ

人生大逆転を目指す、鈴木俊吾の成長日記

WindowsでサクッとSwiftを試すなら「IBM Swift Sandbox」がおすすめ!

IBM Swift Sandbox

どもども、すずしんです。

最近、私はiPhoneアプリの開発に興味を持ち始めました。
iPhoneアプリを作るためには、Objective-CもしくはSwiftの学習が必要となります。
個人的には、Swiftが気になっていますね。

基本的には、iPhoneアプリを作るにはMacのパソコンでなければいけません。
Windowsでも開発できないことは無いのですが、設定などが少々難しいです。

そこで、もっと手軽にWindows環境でSwiftを試すことができないかと色々調べてみたところ…。
IBM Swift Sandbox」というものを発見しました!
これなら非常に簡単に利用できますよ。

Swiftとは?

Swiftというのは、iOSなどで使う事ができるアプリケーションを開発するためのプログラミング言語です。
SwiftはAppleが作り出し、Objective-Cに代わる新たな言語として設計されています。
スクリプト言語のような感覚で設計することができ、比較的簡単にアプリケーションを作成することが可能らしいです。
基本的には、SwiftはMacでの開発を想定されています。

Swiftの特徴

動作が軽い

SwiftではLLVMという高速なコンパイラを使用しています。
そのため、プログラムを実行した際に非常にスムーズな動作をしてくれます。

コーディングがしやすい

Objective-Cは、他のプログラミング言語と比べても難しく、習得には時間がどうしてもかかってしまいます。
それに比べて、SwiftではRubyやPythonのようなスクリプト言語の要素が採用されているため、比較的習得がしやすく簡単にコードが書けるようになります。
セミコロンが不要、型の指定が不要、などといった特徴を持ちます。

IBM Swift Sandboxとは?

IBM Swift Sandboxというのは、IBMが提供しています。
ウェブブラウザ上からSwiftのコードを編集・実行・シェアすることができます。
IBM Swift Sandboxは、以下のリンク先になります。

IBM Swift Sandboxの使い方

IBM Swift Sandboxの使い方はとても簡単です。

画面左側にSwiftのコードを書いていきます。
そして、実行するには画面中央下にある再生ボタン(▶)をクリックします。
すると、プログラムの実行結果が画面右側に表示されます。

IBM Swift Sandbox

サンプルプログラム

ここでは、フィボナッチ数を求めるサンプルプログラムを書いてみました。

fib()は引数nで与えられたn番目のフィボナッチ数を返す関数です。
そして、このfib()を使って、1番目から10番目までのフィボナッチ数を表示しています。

func fib(_ n: Int) -> Int {
    if(n == 1 || n == 2) { return 1 }
    return fib(n - 2) + fib(n - 1)
}

for n in 1...10 {
    print(fib(n))
}

実行結果

サンプルプログラムをIBM Swift Sandboxで実行させると以下のようになりました。
確かに、フィボナッチ数が正しく表示されているのが分かりますね。

1
1
2
3
5
8
13
21
34
55

ひとこと

今回の記事では、ウェブブラウザ上でSwiftを実行することができるIBM Swift Sandboxについて紹介してみました。
これなら、かなりお手軽にSwiftのコードを書いて動作チェックすることができますね。

Macのパソコンであれば、そのままXCodeでSwiftを使って開発ができますが…。
Windowsの場合では、Swiftの開発環境を整えるのはなかなか大変です。

Windows環境で、Swiftのプログラムをサクッと書いて試してみたい場合には…。
このIBM Swift Sandboxを使ってみてはいかがでしょうか?

最後まで読んでいただきありがとうございました。
それではまたお会いしましょう。
あなたの心友でありたい、すずしんより。

jQuery index(): 特定の要素が何番目にあるか(インデックス番号)を取得する

jQuery - index()

どもども、すずしんです。

jQueryについての備忘録を書いてみます。
今回は、index()の使い方についてです。

index()とは?

index()は、jQueryオブジェクト内で、引数で指定された要素のインデックス番号を返す関数です。
ちなみに、インデックス番号は0から始まる連番となっています。
もし渡された要素がjQueryオブジェクト内に無い場合、戻り値は-1となります。
引数には、検索したい要素を指定します。

基本的な使い方

例えば、以下のようなHTMLがあるとします。
これはフルーツの一覧を表しています。

<ul class="fruits">
<li>りんご</li>
<li>ぶどう</li>
<li>もも</li>
<li>バナナ</li>
<li>メロン</li>
</ul>
<p class="index">選択されたのは<span>-</span>番目です。</p>

この一覧の中から、クリックされたフルーツ(li)のインデックス番号を取得するには以下のようなコードを書きます。
こうすると、変数indexにクリックされた要素のインデックス番号が代入されます。

$('ul.fruits li').click(function(){
  var index = $('ul.fruits li').index(this);
});

これをもとにして、選択された要素が何番目にあるかを表示させてみます。
この例のHTMLでは、p.indexのspan要素にインデックス番号を表示させるとしていますので…。
その場合のコードは以下のような感じです。

$('ul.fruits li').click(function(){
  var index = $('ul.fruits li').index(this);
  $('p.index span').text(index + 1);
});

サンプル

上記のコードを試しに導入してみました。
実際にフルーツを選んでクリックしてみてください。
選んだフルーツのインデックス番号が正しく表示されると思います。
りんごなら1番目、メロンなら5番目となりますよね。

  • りんご
  • ぶどう
  • もも
  • バナナ
  • メロン

選択されたのは-番目です。


ひとこと

今回の記事では、jQueryのindex()の使い方についてまとめてみました。
実際に試してみると分かりますが、特にこれといって難しい点はありませんよね。
特定の要素のインデックス番号が簡単に取得できると思います。

jQueryを使っている時に、ある特定の要素のインデックス番号を取得したい時があると思います。
その際には、今回取り上げたindex()を使ってくださいね。

最後まで読んでいただきありがとうございました。
それではまたお会いしましょう。
あなたの心友でありたい、すずしんより。

Java JavaFXで簡単なGUI版じゃんけんゲームを作成してみた!

JavaFX - じゃんけんゲームの実行結果

おはようございます、すずしんです。

最近あまりプログラミングをしていませんでしたので…。
久しぶりにJavaのプログラミングをしてみました。

何のプログラムを作成しようかと悩んだのですが…。
どうせなら、GUI付きのプログラム(JavaFX)で作成してみようと思い立ちました。
そして、あまり難しくなさそうなテーマを扱おうということで…。
今回は、簡単な「じゃんけんゲームを作成してみることにしました。

じゃんけんゲームの仕様

今回作成することにしたじゃんけんゲームの仕様は以下のような感じです。

  • コンピュータの手・自分の手・じゃんけんの結果を表示するラベルと、自分の手を選ぶためのボタン(グー・チョキ・パー)から構成される。
  • いずれかの手のボタンを押すと、コンピュータがランダムな手を選びじゃんけんをする。
  • じゃんけんをした時、コンピュータの手・自分の手・じゃんけんの結果を表示する。

じゃんけんゲームのプログラム作成

それでは、ここから実際にじゃんけんゲームを作成していきます。
今回のじゃんけんゲームでは、「Janken.fxml」「janken.css」「JankenController.java」「Janken.java」の4つのファイルを作ります。

Janken.fxmlの作成

Janken.fxmlでは、じゃんけんゲームの画面(GUI)を作成します。
SceneBuilderを使いながら、仕様に沿ってラベルとボタンを配置していきます。
ラベルとボタンの細かい部分は特に指定していませんので、自由に決めてもらって構いませんよ。
自分にとって分かりやすい画面になっていれば問題無いです。

とりあえず、私の場合は以下のような画面構成にしてあります。

JavaFX - じゃんけんゲーム

参考までに、私が作成したJanken.fxmlのコードを載せておきますので…。
もし同じ画面にしたい場合には利用してくださいね。

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0" prefWidth="360.0" stylesheets="@janken.css" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="jp.suzushin7.sample.janken.JankenController">
  <columnConstraints>
      <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" />
      <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" />
      <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints vgrow="SOMETIMES" />
    <RowConstraints vgrow="SOMETIMES" />
    <RowConstraints vgrow="SOMETIMES" />
    <RowConstraints vgrow="SOMETIMES" />
  </rowConstraints>
   <children>
      <Label fx:id="cpuHandLabel" text="コンピュータの手: -" GridPane.columnSpan="3" />
      <Label fx:id="myHandLabel" text="あなたの手: -" GridPane.columnSpan="3" GridPane.rowIndex="1" />
      <Label fx:id="resultLabel" text="結果: -" GridPane.columnSpan="3" GridPane.rowIndex="2" />
      <Button onAction="#putOutRockHand" text="グー" GridPane.rowIndex="3" />
      <Button onAction="#putOutScissorsHand" text="チョキ" GridPane.columnIndex="1" GridPane.rowIndex="3" />
      <Button onAction="#putOutPaperHand" text="パー" GridPane.columnIndex="2" GridPane.rowIndex="3" />
   </children>
</GridPane>

janken.cssの作成

janken.cssでは、画面に表示するGUI部品の基本的な設定を行います。
ここでは、フォントサイズを20px、ボタンの推奨幅を100pxにしています。

.button, .label {
    -fx-font-size: 20px;
}

.button {
    -fx-pref-width: 100px;
}

JankenController.javaの作成

続いて、コントローラークラスとして「JankenController.java」を作成します。

cpuHandLabel・myHandLabel・resultLabelは、それぞれコンピュータの手・自分の手・じゃんけんの結果を表示するためのラベルです。
putOutRockHand()・putOutScissorsHand()・putOutPaperHand()は、それぞれ自分の手をグー・チョキ・パーとしてじゃんけんをするメソッドです。
これらはdoJanken()メソッドで処理しています。

doJanken()メソッドでは、ラベルの更新メソッドであるupdateLabels()を呼び出しています。
引数として、自分の手(myHand)と相手の手(cpuHand)を渡しています。
この際に、新規の相手の手はgetCpuHand()で取得しています。

updateLabels()では、自分の手・相手の手・じゃんけんの結果を各ラベルに表示させます。
じゃんけんの結果については、getResult()メソッドを使って取得しています。

package jp.suzushin7.sample.janken;

import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

public class JankenController implements Initializable {
    private final Random random = new Random();
    private final String[] hands = {
        "グー", "チョキ", "パー"
    };
    
    @FXML private Label cpuHandLabel;
    @FXML private Label myHandLabel;
    @FXML private Label resultLabel;
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
    
    }
    
    @FXML
    private void putOutRockHand() {
        doJanken(0);
    }
    
    @FXML
    private void putOutScissorsHand() {
        doJanken(1);
    }
    
    @FXML
    private void putOutPaperHand() {
        doJanken(2);
    }
    
    private void doJanken(int myHand) {
        updateLabels(myHand, getCpuHand());
    }
    
    private int getCpuHand() {
        return random.nextInt(3);
    }
    
    private String getResult(int myHand, int cpuHand) {
        int r = (myHand - cpuHand + 3) % 3;
        return (r == 2) ? "あなたの勝ち!" : ((r == 1) ? "あなたの負け!" : "あいこ!");
    }
    
    private void updateLabels(int myHand, int cpuHand) {
        cpuHandLabel.setText("コンピュータの手: " + hands[cpuHand]);
        myHandLabel.setText("あなたの手: " + hands[myHand]);
        resultLabel.setText("結果: " + getResult(myHand, cpuHand));
    }
}

Janken.javaの作成

最後に、メインクラスとなるJanken.javaの作成をします。

ここでは、単純にFXMLLoaderを使ってJanken.fxmlをロード、そしてSceneにセットするくらいです。
このアプリケーションのタイトルは「じゃんけん」としてみました。
…そのままですね!

package jp.suzushin7.sample.janken;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Janken extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {        
        Parent root = FXMLLoader.load(getClass().getResource("Janken.fxml"));
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        
        primaryStage.setTitle("じゃんけん");
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        Application.launch(args);
    }
}

じゃんけんゲームの実行結果

それでは、早速プログラムを実行してみます。

プログラムが実行されると、まず以下のような画面が表示されます。

JavaFX - じゃんけんゲーム

この画面上にある、グー・チョキ・パーのいずれかのボタンをクリックすると、コンピュータとじゃんけんができます。
じゃんけん後は、コンピュータの手・自分の手・じゃんけんの結果が画面上に表示されます。
ちなみに、コンピュータはランダムな手を選びますので、じゃんけんをする度に結果が変わります。

JavaFX - じゃんけんゲームの実行結果

ひとこと

今回は、JavaFXを使って簡単なじゃんけんゲームを作成してみました。
JavaFX入門用の題材としては、このじゃんけんゲームはちょうど良いのではないでしょうか?
もし良かったら、あなたもじゃんけんゲームを作成して遊んでみてくださいね。

Java NetBeansでコマンドライン引数を複数指定して実行する方法

NetBeans

こんにちは、すずしんです。

Javaのプログラムを作成するときに、実行時に引数を渡して処理したい時がありますよね?
コンソールを使って実行させるなら、引数を直接指定できますが…。
もしIDEを使っているなら、そのままでは引数を指定することができません。
IDEでプログラムを実行する時に引数を渡すためには、あらかじめ設定をしておく必要があります。

そこで、今回の記事では、NetBeansコマンドライン引数複数指定してプログラムを実行する方法について書いてみます。
ついでに、受け取ったコマンドライン引数の簡単な扱い方についても解説します。

コンソール上でコマンドライン引数を指定する方法

仮に、コマンドライン引数を受け取るプログラムを「CommandLine.java」とします。
コンパイルするときには「javac」を使いますね。
コンパイルが終了すると、「CommandLine.class」ファイルが作成されます。

javac CommandLine.java

このプログラムを実行するときにコマンドライン引数を渡すには…。
「java」コマンドに続いてプログラム名を指定した後に、スペース区切りで与えたい文字列を入力します。

例えば、「Hello」と「World」をコマンドライン引数に渡したい場合は以下のようにします。

java CommandLine.class Hello World

ちなみに、「Hello World」というスペースが入った文字列を指定したい場合には、その文字列をダブルクォーテーションで囲みます。
つまり、以下のように指定します。

java CommandLine.class "Hello World"

NetBeansでコマンドライン引数を指定する方法

NetBeansでコマンドライン引数を指定するには…。
まず、「デフォルト構成」と表示されている部分をクリックします。
すると、「カスタマイズ」という項目が表示されますので、それをクリックしてください。

NetBeans - カスタマイズ

プロジェクト・プロパティ画面が表示されます。
「メイン・クラス」に、実行したいプログラムが指定されているのを確認します。
そして、「引数」に、与えたいコマンドライン引数をスペース区切りで入力してください。
その後「OK」をクリックすれば、設定は完了です。

NetBeans - プロジェクト・プロパティ

プログラムの実行は、▶ボタンをクリックするかF6ボタンを押します。
これで、プログラムがコマンドライン引数を与えられた状態で実行されます。

コマンドライン引数の受け取り方

コマンドライン引数は、mainメソッドの引数であるargsの中に格納されています。
argsは配列になっていて、0番目に最初の引数、1番目に次の引数…というように順番に入っています。
引数の数は「args.length」で分かります。

サンプルプログラム

このサンプルプログラム(Args.java)は、入力されたコマンドライン引数の内容を全て表示するというものです。
for文でループしながら、argsの内容をSystem.out.printf()メソッドで表示させています。

package jp.suzushin7.sample;

public class Args {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.printf("args[%d]: %s%n", i, args[i]);
        }
    }
}

実行結果

上記サンプルプログラムの実行結果の例は以下のようになります。
コマンドライン引数に「Hello World 1 2 3 4 5」を与えた場合には、このような結果になります。

args[0]: Hello
args[1]: World
args[2]: 1
args[3]: 2
args[4]: 3
args[5]: 4
args[6]: 5

ひとこと

今回の記事では、NetBeansでコマンドライン引数を指定してプログラムを実行する方法について書いてみました。
実際やってみると分かりますが、引数に指定するだけですので難しいということはないですよね。

「コマンドライン引数は、プロジェクト・プロパティ画面から指定する。」
「プログラム上では、受け取ったコマンドライン引数はargsに格納されている。」
以上の事を覚えておけば問題無いです。

コマンドライン引数を使う事で、プログラムの処理を柔軟に切り替えることができますので…。
ぜひあなたもコマンドライン引数を使ったプログラムを作成してみてくださいね。

Java カレントディレクトリを取得するサンプルプログラム

Java - カレントディレクトリ

こんにちは、すずしんです。

Javaでプログラミングをしている時に…。
カレントディレクトリ取得したいという事が時々あると思います。
ファイルを参照するときなどに、カレントディレクトリを利用しますよね。

そこで、今回の記事では、Javaでカレントディレクトリを取得する方法についてまとめておきます。
やり方が一度分かってしまえば簡単ですよ。

カレントディレクトリの取得方法

Javaでカレントディレクトリを取得する方法は主に2つあります。
現在位置の絶対パスから取得する方法」と「System.getProperty()で取得する方法」ですね。
それぞれの方法について、簡単に解説していきます。

現在位置の絶対パスから取得する方法

まずは、現在位置の絶対パスから取得する方法についてです。

この方法では、まず現在位置のFileを作成します。
そして、そのFileの絶対パスをgetAbsoluteFile()で取得します。
最後に、この絶対パスの親ディレクトリをgetParent()で取得します。
このディレクトリがカレントディレクトリとなります。

この方法を使って、カレントディレクトリを取得するサンプルプログラムは以下のようになります。

package jp.suzushin7.sample;

import java.io.File;

public class CurrentDirectory {
    public static void main(String[] args) {
        String cd = new File(".").getAbsoluteFile().getParent();
        System.out.println(cd);
    }
}

System.getProperty()で取得する方法

続いて、System.getProperty()で取得する方法についてです。

こちらの場合は、System.getProperty()で与えるkeyに「user.dir」を指定するだけです。
これで取得できる値がカレントディレクトリとなっています。

この方法を使って、カレントディレクトリを取得するサンプルプログラムは以下のようになります。

package jp.suzushin7.sample;

public class CurrentDirectory {
    public static void main(String[] args) {
        String cd = System.getProperty("user.dir");
        System.out.println(cd);
    }
}

ひとこと

今回の記事では、Javaでカレントディレクトリを取得する方法について書いてみました。
2通りのやり方がありますが…。
個人的には、何となく前者の方法が好きですかね?

ファイルを参照するときなどに、カレントディレクトリを取得したくなったら…。
ぜひこの記事の方法を参考にしてくださいね。

Java 指定したURLの存在を確認するサンプルプログラム

Java

こんばんは、すずしんです。

今回の記事では、Java言語のプログラミングをしてみます。
テーマとしては「指定したURL存在確認する」というものです。

指定したURLの存在を確認する方法

指定したURLの存在を確認するには、HttpURLConnectionクラスを使います。
試しに対象のURLに接続してみて、そのレスポンスコードがHTTP_OK(200)になるかどうかを確認します。
HTTP_OKならURLが存在しているということですね。

この考え方をもとにして、指定したURLの存在を確認するメソッドisExistURL()を作成してみました。
それが以下のようなコードです。
urlStringで表されるURLが存在すればtrue、存在しなければfalseを返します。

private static boolean isExistURL(String urlString) {
    URL url;
    int response = 0;
        
    try {
        url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("HEAD");
        connection.connect();
        response = connection.getResponseCode();
        connection.disconnect();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
        
    return response == HttpURLConnection.HTTP_OK;
}

サンプルプログラム

このisExistURL()の動作確認用に、サンプルプログラムURLCheckerを作成してみました。
URL_STRINGSに記述したそれぞれのURLに対してisExistURL()を実行して、その結果をコンソールに出力します。

package jp.suzushin7.sample;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class URLChecker {
    private static final String[] URL_STRINGS = {
        "http://www.suzushin7.jp/", "http://www.suzushin7.jp/sample/", "https://www.google.co.jp/"
    };
    
    public static void main(String[] args) {
        for(String u: URL_STRINGS) {
            System.out.println(u + " : " + isExistURL(u));
        }
    }
    
    private static boolean isExistURL(String urlString) {
        URL url;
        int response = 0;
        
        try {
            url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("HEAD");
            connection.connect();
            response = connection.getResponseCode();
            connection.disconnect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return response == HttpURLConnection.HTTP_OK;
    }
}

実行結果

上記サンプルプログラムを実行した結果は以下のようになります。
確かに、存在しているURLはtrue、存在していないURLはfalseとなっているのが分かりますね。

http://www.suzushin7.jp/ : true
http://www.suzushin7.jp/sample/ : false
https://www.google.co.jp/ : true

ひとこと

今回の記事では、指定したURLが存在するかどうかを確認するサンプルプログラムを作成してみました。
一度原理が分かれば、割とスムーズに作成することができますね。

isExistURL()を使う事で、リンク切れの確認ができるようになります。
これを応用して、リンク切れ確認ツールのようなプログラムを今後作成してみたいですね。

Java XMLをDOMで読み込んで内容を取得するサンプルプログラム

Java

こんにちは、すずしんです。

XMLは、データをシンプルに扱うためのデータ構造です。
非常に使い勝手が良く、Webなどの世界ではよく利用されます。

そのXMLを、Javaで扱う方法について今回は書いてみようと思います。
具体的には、XMLをDOMで読み込んで内容を取得する方法を扱います。

DOMとは?

DOMというのは、XMLを扱うためのAPI仕様の事をいいます。
この仕様では、XMLによって書かれた文書全体をドキュメントと呼びます。
ドキュメントはノードから構成されるノードツリーとなっています。

ドキュメントの取得方法(Java)

Javaでドキュメントを取得するには、主に3つのステップがあります。

ステップ1: DocumentBuilderFactoryクラスのnewInstance()メソッドを使用します。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

ステップ2: DocumentBuiderFactoryのインスタンスからnewDocumentBuilder()メソッドを呼び出します。

DocumentBuilder builder = factory.newDocumentBuilder();

ステップ3: DocumentBuilderのインスタンスからparse()メソッドを呼び出します。

Document document = builder.parse("sample.xml");

ドキュメントの操作方法

ドキュメントを操作するには、まずgetDocumentElement()メソッドでElementノードを取得します。
このElementノードに対して操作メソッドを使います。

Element root = document.getDocumentElement();

その後は、NodeやElementに対する操作が多くなりますが…。
これらで使用できるメソッド群についての詳細はAPIを参照してください。

Node (Java Platform SE 7 )
Element (Java Platform SE 7 )

今回の例で使用するのは、主に以下のメソッドです。

Node
String getNodeName(): ノード名を取得。
NodeList getChildNodes(): このノードの子をすべて含むNodeListを取得。

Element
String getAttribute(String name): 属性を取得。

NodeList
int getLength(): リスト内のノード数を取得。
Node item(int index): リスト内のindex番目の項目を取得。

DOMでXMLを扱うサンプルプログラム

このサンプルで扱うXMLは以下のようになっています。
友達リストのような形です。
これをpersons.xmlとして保存してあります。

<?xml version="1.0" encoding="utf-8" ?>
<persons name="friends">
  <person name="Asakura">
    <gender>Male</gender>
    <age>20</age>
    <interest>Game</interest>
  </person>
  <person name="Kikuchi">
    <gender>Male</gender>
    <age>23</age>
    <interest>Tennis</interest>
  </person>
  <person name="Suzuki">
    <gender>Female</gender>
    <age>19</age>
    <interest>Baseball</interest>
  </person>
</persons>

persons.xmlの内容を取得して、コンソールに取得するサンプルプログラムは以下のようになります。
ここではXMLReaderクラスとしてみました。

package jp.suzushin7.sample;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLReader {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("persons.xml");
        
        Element root = document.getDocumentElement();
        
        System.out.println("Node: " + root.getNodeName());
        System.out.println("name: " + root.getAttribute("name"));
        
        System.out.println("==============================");
        
        NodeList personsNodeList = root.getChildNodes();
        for(int i = 0; i < personsNodeList.getLength(); i++) {
            Node personNode = personsNodeList.item(i);
            if(personNode.getNodeType() == Node.ELEMENT_NODE) {
                Element personElement = (Element)personNode;
                if(personElement.getNodeName().equals("person")) {
                    System.out.println("[" + personElement.getAttribute("name") + "]");
                    NodeList personChildrenNodeList = personElement.getChildNodes();
                    for(int j = 0; j < personChildrenNodeList.getLength(); j++) {
                        Node node = personChildrenNodeList.item(j);
                        if(node.getNodeType() == Node.ELEMENT_NODE) {
                            System.out.println(node.getNodeName() + ": " + node.getTextContent());
                        }
                    }
                }
            }
        }
        
        System.out.println("==============================");
    }
}

実行結果

上記サンプルプログラムを実行すると、以下のような結果が得られます。
確かに、persons.xmlの内容が正しく取得できているのが分かりますね。

Node: persons
name: friends
==============================
[Asakura]
gender: Male
age: 20
interest: Game
[Kikuchi]
gender: Male
age: 23
interest: Tennis
[Suzuki]
gender: Female
age: 19
interest: Baseball
==============================

ひとこと

今回の記事では、JavaでDOMを使ってXMLを扱う方法について書いてみました。
やり方が分かってしまえば、それほど難しいというわけでもなさそうですね。

今回のサンプルプログラムは、XMLの内容を表示するだけの非常にシンプルなものでしたが…。
XMLを扱えるようになると、もっと色々な応用ができると思います。
ぜひ工夫して便利なプログラムを作成してみてくださいね。

Java String 文字列がnullまたは空文字列かどうかの確認方法(isEmpty)

Java - isEmptyメソッド

こんにちは、すずしんです。

Javaでプログラミングをしていると、文字列の処理をすることがあると思いますが…。
特に、「文字列がnullまたは空文字列かどうか」を確認することが多いのではないでしょうか?
主に入力チェックをした時によく利用しますね。

そこで、今回の記事では…。
文字列がnullまたは空文字列かどうかを確認する方法について書いてみます。

isEmptyメソッド

ここでは、文字列がnullまたは空文字列かどうかの結果を返すメソッドを定義します。
メソッド名はisEmptyとしてみました。

このisEmptyメソッドの実装例としては以下のような感じです。
まさに条件をそのままプログラムにしてありますね。

package jp.suzushin7.sample;

public class StringUtils {
    public static boolean isEmpty(String value) {
        if(value == null || value.length() == 0)
            return true;
        else
            return false;
    }
}

サンプルプログラム

上記のisEmptyメソッドを使ったサンプルプログラムの例は以下のような感じです。
mainメソッドでは、まずvalue1にnull、value2に空文字列、value3には"Sample"という文字列を代入したインスタンスを用意しておきます。
そして、それぞれのインスタンスに対してisEmptyを実行して、その結果を出力しています。

package jp.suzushin7.sample;

public class IsEmptyTest {
    public static void main(String[] args) {
        String value1 = null;
        String value2 = "";
        String value3 = "Sample";

        System.out.println(StringUtils.isEmpty(value1));
        System.out.println(StringUtils.isEmpty(value2));
        System.out.println(StringUtils.isEmpty(value3));
    }
}

サンプルプログラムの実行結果

上記サンプルプログラムの実行結果は以下のようになります。
文字列がnullまたは空文字列の時(value1とvalue2)は、結果がtrueになっています。
そして、それ以外の文字列の時(value3)には、結果はfalseとなっていますね。

true
true
false

ひとこと

文字列がnullまたは空文字列かどうかを確認する機会というのは結構あるかもしれません。
その時に備えて予めisEmptyメソッドを準備しておくと、ちょっと幸せになるのではないでしょうか。

Java 整数配列をバブルソートするプログラムを作成してみた

Java - バブルソート

こんにちは、すずしんです。

しばらく私はプログラミングをしていませんでしたので…。
久しぶりに、簡単なプログラムを書いてみました。

今回作成したプログラムというのは、「整数配列をバブルソートで整列する」というものです。
具体的には、ランダムな数字の整数配列を昇順に並び替えるプログラムとなっています。
ちなみに、使用したプログラミング言語はJavaです。

プログラムの難易度としては、かなり簡単な部類になると思いますが…。
久しぶりに書くのでリハビリにはちょうど良いかなと。

バブルソートとは?

バブルソートというのは、リスト(配列)に対して、隣り合う二つの要素の値を比較して条件に応じた交換を行う整列アルゴリズムです。
ここで、条件というのは要素の大小関係の事をいいます。
値の大きい順(降順)または小さい順(昇順)で並び替えます。
このソートを行うと、値の大きいまたは小さい要素が浮かびあがってくるように見えるので、バブル(泡)ソートと呼ばれます。

バブルソートの例

ここでは、以下のような配列の昇順でのバブルソートの例を挙げてみます。

1回目で最も小さい値の1が左端へ順に移動していきます。
続いて、2回目で次に小さい値の3が左へ移動していきます。
同様に3回目、4回目と同じ操作をしていくと、最終的に昇順に整列されます。

7,9,5,1,3 - スタート時
7,9,1,5,3
7,1,9,5,3
1,7,9,5,3 - 1回目終了時
1,7,9,3,5
1,7,3,9,5
1,3,7,9,5 - 2回目終了時
1,3,7,5,9
1,3,5,7,9 - 3回目終了時
1,3,5,7,9 - 4回目終了時

バブルソートのサンプルプログラム

整数配列のバブルソートを行うサンプルプログラムを書いてみました。
ここでは、10個の要素を持つ整数配列を昇順に並び替えています。

mainメソッドでは、まず乱数を扱うためにRandomクラスのインスタンスrを用意します。
そして、int型配列を生成した後、forループ中で乱数を代入していきます。
printArrayメソッドで整列前の配列の中身を表示してから、bubbleSortメソッドでソートし、再びprintArrayメソッドで整列後の配列の中身を表示しています。

package jp.suzushin7.sample;

import java.util.Random;

public class BubbleSort {
    public static void main(String[] args) {
        Random r = new Random();

        int[] n = new int[10];
        for(int i = 0; i < n.length; i++) {
            n[i] = r.nextInt(100);
        }

        printArray(n);
        bubbleSort(n);
        printArray(n);
    }

    private static void bubbleSort(int[] n) {
        int tmp;
        for(int i = 0; i < n.length - 1; i++) {
            for(int j = n.length - 1; i < j; j--) {
                if(n[j-1] > n[j]) {
                    tmp = n[j-1];
                    n[j-1] = n[j];
                    n[j] = tmp;
                }
            }
        }
    }

    private static void printArray(int[] n) {
        for(int i = 0; i < n.length; i++) {
            if(i == n.length - 1) {
                System.out.println(n[i]);
            } else {
                System.out.print(n[i]+",");
            }
        }
    }
}

バブルソートのサンプルプログラムの実行結果

上記サンプルプログラムの実行結果の例を載せておきます。

ソート前の配列は、ランダムな数字が並んでいます。
そして、ソートされた後の配列は綺麗に昇順になっています。

乱数を使っていますので、実行するたびに数字が変わりますが…。
全てのパターンで正しく昇順にソートされるのが分かります。

93,88,96,74,76,32,46,90,37,54
32,37,46,54,74,76,88,90,93,96

ひとこと

今回は、バブルソートのプログラムを作成してみましたが…。
実際やってみると、意外と簡単にプログラムが組めてしまうというのが分かりましたね。
パパっとできましたよっ!

実装の難易度はとても低いですので…。
プログラミングを学び始めた方にとって、バブルソートを実装してみるというのは非常に良い練習になるのではないでしょうか。

ドットインストールでPHP入門のプログラミング学習をしてみた!

ドットインストール

こんにちは、すずしんです。

ここ最近は、あまりプログラミング関連の勉強をしていませんでしたので…。
何かしないとと思いまして、今回はPHPの学習をしてみることにしました。

参考書を読んで勉強するという手もありますが…。
動画で解説してもらった方が分かりやすいかもという事で、ドットインストールを利用してみました。
今回は「PHP入門」をやってみましたよ。

ドットインストールとは?

ドットインストールというのは、簡単に言ってしまうと、3分ほどの動画を視聴しながらプログラミングの学習をする初心者向けのサイトです。

各レッスンは何回かの項目に分かれていますが…。
それぞれの項目は、およそ3分ほどの動画でまとめられています。

例えば、今回のPHP入門であれば全30回ありますので…。
全部でおよそ90分の動画で学習できるという事ですね。

レッスンの内容としては、PHPの他にもHTML/CSS/JavaScript/Ruby/WordPress/Swiftなど多岐にわたります。
無料の範囲でも、かなりの学習をすることができますが…。
プレミアム会員になると、より高度な内容の学習をすることが可能になります。

PHP入門

ドットインストールのPHP入門では、まず初めてのプログラムから始まります。
そして、PHPの言語仕様について、実際にコードを書きながら進んでいきます。
その都度解説が入りますので、非常に分かりやすいと思いますよ。

全30回のレッスンとなっていますので、一見時間がかかって大変そうに思うかもしれませんが…。
体感としてはそれほどでもなく、あっという間のような気がしますよ。

ドットインストールを使うと、PHP入門なら90分ほどでざっくりとPHPの学習ができます。
基本的な学習をするのならちょうど良いのではないでしょうか。

私は過去にPHPの学習をしていましたが…。
だいぶ前の事だったので忘れてしまっていました。
ただ、このPHP入門の動画を観ることで、改めてこんな感じだったなと思い出すことができました。

ひとこと

ドットインストールを利用すると、プログラミングの基本について動画で学習することができます。
1回分の動画は3分ほどですので、集中して視聴することができますね。

今回はPHP入門の学習に利用してみましたが…。
他の言語の学習にももちろん使えますので…。
私は積極的に利用していきたいと思っていますよ。

プログラミングに興味はあるけど、独学ではなかなか学習が続かないということがあると思います。
そんな時は、このドットインストールのようなサイトを利用してみるのも良いのではないでしょうか?