Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜

イントロダクション

プログラムを学習する事で、身につく事が結構あります。例えばしたのようなことです。

  • 物事を順序だてて考える、説明する
  • 知りたい事を明確に言葉にする
  • 物事の問題究明の手順を導く
  • 目的の為にロードマップを作れる

以上のようなものがありますが、このように認識する、しないは本人次第になります。早い話が理論的思考が身につくと言うことです。言葉を変えているならば、

物事を順序だてて考えることができるということです。

具体的には、「プログラムを組み立てる」という、行為に上に挙げた事が必要なので、身につくといううわけです。

コードを書く

プログラミングの初めは、真似から入ります。古い人は、このことを「写経」といいます。

でわ、早速、初めてのコードを写経しましょう。

ハローワールド

プログラムに限らず創造は模倣に始まるという様に、はじめに動かす決まった形のプログラムがあります。
俗に言う「ハローワールド」というプログラムです。コンソール(コマンドプロンプトやターミナル)に出力するものですが、今回はJavaFxでやります。

Hello Java Fx

とりあえずは、プログラムの構成イメージ図を作ってみました。

Java Fxのアプリケーションクラスの上にシーンが、クラス・コンテナ(Map)に登録されていて、切り替えが出来るような物を作ります。
※図の作成はDrawExpressを使用しました。

とりあえず、以下のリンクも参考にどうぞ

開発手順〜プロジェクトの作成〜

Eclipseでの開発は、以下の通りです。

  1. まずプロジェクトを作成します。
  2. そして、作成したプロジェクトで使用するJDK(JREライブラリ)をJava1.8に修正します。

Lv1.ハローワールド

HelloWorldをやります。とりあえずコードは下のようになります。

package jp.zenryoku.fx;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
/**
* JavaFXでのハローワールド〜OpenCVなどの
* 作成したアプリをテストするための、スタンドアロンアプリ。
* 
* @author takunoji
* 2019/01/23
*/
public class RootFxMain extends Application {
    /** 画面の縦幅 */
    private double VIEW_HEIGHT;
    /** 画面の横幅 */
    private double VIEW_WIDTH;
    /**
    * 親クラスのメソッドをオーバーライドする。
    * 画面を作成したり、シーンを作成したり、色々。。。
    * 
    * @see javafx.application.Application#start(javafx.stage.Stage)
    */
    @Override
    public void start(Stage primaryStage) throws Exception {
        // Stageの設定
        primaryStage.setHeight(VIEW_HEIGHT);
        primaryStage.setWidth(VIEW_WIDTH);
        // ラベルの設定
        Label label = new Label();
        // ペインの作成
        Group root = new Group();
        root.getChildren().add(label);
        // シーンの作成
        Scene scene = new Scene(root, VIEW_WIDTH, VIEW_HEIGHT);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    /**
    * メインメソッド
    * @param args プログラム引数
    */
    public static void main(String[] args) {
        // 親クラスのメソッドを呼び出す、これは上のstart()を呼び出す。
        launch();
    }
}

起動すると、下のような感じで表示されます。

真っ白な部分がこのJavaFXで作られた画面になります。

初めのプログラムを書くためのスペース(領域)を作成する必要があります。

なので下のメソッドを1つ追加します。

/**
* JavaFX版のハローワールド実装用のメソッドになります。
* @return 画面に出力する文字列
*/
public String myFirstProgram() {
    String hyoji = "Hello World";
    return hyoji;
}

そして、上の「start」メソッドに下の2行を追加します。

// ハローワールドを出力する
label.setText(myFirstProgram());
label.setFont(new Font("RobotRegular", 24));

実行結果:作成したコードはこちら(GIT)

ちょっとかけ離れているかもですが、一応、OpenCVでのテストを行う準備も含めています。。。

追記

この次からの記事もそうですが

「初めてでも大丈夫」じゃなかったかも?

ちょいと自分の書いた記事を見直してみたところ、途中の過程が抜けているように思いました。そーすると「初めてでは危うい」と思いましたので
次回からは、オラクルのチュートリアルを進める方向で行ってみようと思います。

 

でわでわ。。。

>>> 次へ

関連ページ

※ラジオボタンでページのリンクが表示されます。

Java String 文字列検索〜ワンポイントレッスン〜

文字列検索

Stringクラスを使用して文字列の検索をします。

public stati void main(String[] args) {
   "abcdefg".indexOf("z"); // 見つからない場合は「-1」
   "abcdefg".indexOf("a"); // 見つかった場合はその位置「0」
   "abcdefg".indexOf("b"); // 見つかった場合はその位置「1」
   "abcdefg".indexOf("c"); // 見つかった場合はその位置「2」
   "abcdefg".indexOf("d"); // 見つかった場合はその位置「3」
   "abcdefg".indexOf("e"); // 見つかった場合はその位置「4」
   "abcdefg".indexOf("f"); // 見つかった場合はその位置「5」
}

こんな感じです。取得する位置(int)は「0」から始まる数値が返されます。

Stringクラスのメソッドを実行した動画リストです。

StringBuilderも使うと便利です。

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

Java String 正規表現〜ワンポイントレッスン〜

Stringクラスを使用しての正規表現

正規表現は、文字列のパターンを表現したものです。
例えば、「3桁の数字」を表す正規表現であれば「[0-9]{3}?」と書きます。

桁数などの指定

X => [0-9]などの文字クラスやパターン。

「[0-9]?」であれば、数字が1回、または0回を意味する。

最長一致数量子
X?  X、1または0回
X*  X、0回以上
X+  X、1回以上
X{n}    X、n回
X{n,}   X、n回以上
X{n,m}  X、n回以上、m回以下

最短一致数量子
X?? X、1または0回
X*? X、0回以上
X+? X、1回以上
X{n}?   X、n回
X{n,}?  X、n回以上
X{n,m}? X、n回以上、m回以下

強欲な数量子
X?+ X、1または0回
X*+ X、0回以上
X++ X、1回以上
X{n}+   X、n回
X{n,}+  X、n回以上
X{n,m}+ X、n回以上、m回以下

論理演算子
XY  Xの直後にY
X|Y XまたはY
(X) X、前方参照を行う正規表現グループ

文字クラス

詳細はJavaDocにあります。

文字クラス
[abc]   a、b、またはc (単純クラス)
[^abc]  a、b、c以外の文字(否定)
[a-zA-Z]    a - zまたはA - Z (範囲)
[a-d[m-p]]  a - dまたはm - p: [a-dm-p] (結合)
[a-z&&[def]]    d、e、またはf (交差)
[a-z&&[^bc]]    a - z (bとcを除く): [ad-z] (減算)
[a-z&&[^m-p]]   a - z (m - pを除く): [a-lq-z] (減算)

全てではありませんが、よく使うものをあげます。

<文字列を削除>

replaceAll(正規表現, 変更文字);

public static void main(String[] args) {
   "a1a2a3B4B5B".replaceAll("[1-5]",""}; // aaaBBB
   "a1a2a3B4B5B".replaceAll("a[1-5]",""}; // B4B5B
   "a1a2a3B4B5B".replaceAll("[a-zA-Z]",""}; // 12345
}

matches(正規表現)は上と同じような処理をするのですがTrue or Falseを返却します。

public static void main(String[] args) {
   "a1a2a3B4B5B".matches("[1-5]"}; // True
   "a1a2a3B4B5B".matches("a[1-5]"}; //True
   "a1a2a3B4B5B".matches("[a-zA-Z]"}; //True
   "a1a2a3B4B5B".matches("[6-9]"}; //False
}

 

文字列の判定

文字列が「数字」 + 「四則計算の記号」 + 「数字」の形担っているか判定する

String inStr = "1 + 1";
if (inStr.matches("[0-9].*[0-9]")) {
   System.out.println("計算部分の文字列");
} else {
   System.out.println("計算式ではない");
}

実際に動かしてみたとき

String#matches()を実行してみる

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

Java JSON 〜楽天の商品リストを表示する〜

イントロダクション

前回は楽天APIをJavaから起動しました。URLパラメータを渡してJSONで取得するというシンプルなものでした。せっかくなのでJSONの扱い方をやってみます。

JavaでJSONを使う

扱い方は以下の3パターン

  1. JavaScriptを起動してJSONの中身を取得する(ScrptEngineManager参照)
  2. org.jsonのパッケージを使用する(デフォルトインストール※たぶん。。。)
  3. json-pathを使用などのライブラリを使用する
  4. JSONを人力でパース(使いやすいように変換)する

今回は3番を選択しました。

ソースを見た方が早いので。。。

// URLを指定
URL url = new URL(RAKUTEN_API.toString());
// URLコネクション取得
connection = url.openConnection();
// JSONTokenerを取得
JSONTokener tokener  = new JSONTokener(connection.getInputStream());
// JSONオブジェクトに変換
JSONObject json = new JSONObject(tokener);
// JSONオブジェクトを出力
System.out.println(json.toString());

前回はここまでやりました。


※ちょっとやり方が違います。。。それはJSONObjectを使用するパッケージが違っても同じ名前で使用しているのでややこしいことになり、結局は「org.json」パッケージのものを使用することにしました。

JSONデータを取得

結論から言って、以下のようになります。

// 一番上の階層からItemsを取得する(2階層目)
JSONArray items = json.getJSONArray("Items");
System.out.println("*** 商品 ***");
for(int i = 0; i < 1; i++) {
         // 2階層目の中身を取得する
	 JSONObject shohinRoot = items.getJSONObject(i);
	 JSONObject shohin = shohinRoot.getJSONObject("Item");
	 // ジャンルID
	 String jenerId = shohin.getString("genreId");
	 ・
	 ・
	 ・

JSONでデータを扱う時に注意したいのは階層化している時に中身のデータフォーマットをちゃんと指定しないとClassCastExceptionになってしまうのでちょっとめんどくさいです。何か簡単なインターフェースでも欲しい穂ところですね(笑)

ここからさらに階層を下がっていくときはJSONArrayなのかJSONObjectなのかキチッと確かめて、取得する値も文字なのか数値なのか確かめないとエラーになります。

Javaが新しくなって「var」が使用できるようになったのもわかるような気がします。。。。

でわ今日もお茶ですかね?

[rakuten ids="fukucha:10000442"]
 

Java Eclipse ワンポイントレッスン的な。。。〜Maveでのライブラリ追加〜

json-pathの追加方法

ここのURLからpom.xmlファイルをコピー or ダウンロードします。

Mevenプロジェクトにあるpom.xmlを書き換えるか、ダウンロードしたPOMに記載されている内容を追記する。



Mavenインストールする

お疲れ様でした。

サンプル動画です。これはJava版OpenGLを依存関係に追加したときの動画です。

こちらは、LWJGLを追加した時

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜