Archive for the ‘Java’ Category

無限大

金曜日, 8 月 21st, 2009

Java でも無限大を定義することができます。

ちょっとそれを試してみました。

なぜかって?

今まで無限大を使ったことがないからです。(^^;

 

package infinity2;

public class Main {

    private static final double i = Double.POSITIVE_INFINITY;
    private static final double j = Double.NEGATIVE_INFINITY;
    private static final double k = 1.0e40;

    public static void main(String[] args) {
        if (i == i + 1) {
            System.out.println(“無限大 ” + i);
        }
        if (j == j – 1) {
            System.out.println(“無限小 ” + j);
        }
        if (k == k + 1) {
            System.out.println(“1.0e40 に1を足しても ” + k);
        }
        System.out.println(“ulp = ” + Math.ulp(k));
        System.out.println(“最も近い浮動小数点数 ” + Math.nextUp(k));
    }
}

 

このプログラムの実行結果は下記のとおりです。

無限大 Infinity
無限小 -Infinity
1.0e40 に1を足しても 1.0E40
ulp = 1.2089258196146292E24
最も近い浮動小数点数 1.0000000000000002E40

 

無限大や無限小って英語で Infinity , -Infinity って表示されるんですね。

初めて知りました。

おまけがついてますけど浮動小数点数演算って癖があるので微妙・・・(^^;;;

Hatena タグ:

素敵な無限ループ

木曜日, 8 月 20th, 2009

無限ループ文の作り方にはいろいろなものがありますが最近知った素敵な無限ループ文を個人的に覚え書きしておきます。

package infinity;

public class Main {

    public static void main(String[] args) {
        int count = 0;
        // 素敵な無限ループ
        for(int i = 0; i <= Integer.MAX_VALUE; i++)
            if (i == Integer.MAX_VALUE)
                // 無限ループになるトリックの答え
                System.out.println(“Integer.MAX_VALUE + 1 = ” + (i + 1));
            count++;
        System.out.println(count);
    }
}

無限ループがあるので標準出力に変数 count の値は表示されません。

無限ループの中で int の最大値の時に 1 を足した時の値を表示させてます。

Integer.MAX_VALUE + 1 = -2147483648

これで解るように int の最小値になってます。

普通このような無限ループを使う人はいないと思うので素敵ですね!

Hatena タグ:

JDK 6 Update 15 がリリースされてます

木曜日, 8 月 6th, 2009

JDK 6 Update 15 がリリースされてます。

Windows 7 、Internet Explorer 8、Windows Vista SP2 などのサポートをしているようです。

G1 ガベージコレクタも含まれているようです。

この G1 ガベージコレクタ と言うものはいったい何なのでしょう?

調べてみたところ Garbage-Firstガーベージコレクタ 略のようです。

名前からして早そうですね。

今までのガベージコレクタは 世代別GC と呼ばれるものでヒープ領域を物理的に二つのYoung領域とOld領域(Tenured領域)に分けて管理しています。

それに対してG1 ガベージコレクタ はヒープ領域は一つです!

その一つだけ用意された領域の中でいくつかをYoung領域とし、残りをOld領域として利用してます。

詳しくは Java SE 6 Update 14のEarly Access公開、G1ガーベージコレクタが利用可能に をご覧ください。

これによって、全ヒープ領域に対して常にフルGCを実施するのではなくGCの効果が高い領域を優先的に開放するので、アプリケーションの停止時間を大幅に減少できる。

パフォーマンスアップが期待されますね。

とりあえず今からダウンロードしてインストールすることにします。

Hatena タグ:

Java One 2009 Return of the Puzzlers 間違った(><)

木曜日, 6 月 25th, 2009

こちらのサイトに Java One 2009 Puzzlers が紹介されていたので考えてみました。

問題はこちら

1

解答はなかったので念の為に(どっからくるんだその自信)プログラムを実行して確認してみました。

おお!なんと間違ってました。orz

やはり、私は未熟者です!

Hatena タグ:

JDK 7 ならこう?

金曜日, 6 月 19th, 2009

ちょっと勉強になるブログを発見した。

http://d.hatena.ne.jp/bleis-tift/20090616/1245134308

http://d.hatena.ne.jp/shin/20090618/p2

ついでに以前試した JDK 7 の walkFileTree を使ったチュートリアルをもとにゴニョゴニョしてみた。

特定ディレクトリ以下の列挙 ということなので見栄えは良くないが JDK 7 ならこんなのもありかな?

import java.io.IOException;
import java.nio.file.FileRef;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;

public class Find {

    public static class Finder implements FileVisitor {

        private final PathMatcher matcher;

        Finder(String pattern) {
            matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
        }

        void find(Path file) {
            if (matcher.matches(file.getName())) {
                System.out.format("%s%n", file);
            }
        }

        @Override
        public FileVisitResult preVisitDirectory(FileRef dir) {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult preVisitDirectoryFailed(FileRef dir, IOException exc) {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFile(FileRef file, BasicFileAttributes attrs) {
            find((Path) file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(FileRef file, IOException exc) {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(FileRef dir, IOException exc) {
            return FileVisitResult.CONTINUE;
        }
    }

    public static void main(String[] args) {
        Path searchDir = Paths.get("C:\\ターゲットディレクトリ");
        String pattern = "*";
        EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
        Finder finder = new Finder(pattern);
        Files.walkFileTree(searchDir, opts, Integer.MAX_VALUE, finder);

    }
}

基本的に間違っていたらごめんさない。

素人のやることだから笑ってゆるしてね(^^;

追記 List<String> result に格納するのがポイントだったのかな?

Hatena タグ:

NB6.7 Dev で Java EE 6

月曜日, 6 月 1st, 2009

JavaOne で何かしらの新技術がお披露目されるだろうと期待している私ですが待ちきれずに NetBeans で Java EE 6 って動くのか調べてみました。

といってもネットでググって調べただけです。

結果は・・・ ありました!

下記サイトです。

http://ekschi.com/technology/2009/05/19/totd-81-getting-started-with-servlet-30-and-ejb-31-in-java-ee-6-using-netbeans-67/

英語が駄目なのでだいたいこんな感じじゃないかと真似てみました。

一部コードは簡略化してありますが問題ないはずだと思います。

NetBeans 6.7 開発版に GlassFish V3 Preview を追加して Java EE 6 を試してみます。

まず GlassFish V3 Preview の zip 版をダウンロードしてインストールします。

NetBeans のサーバーに GlassFish V3 Preview を追加できるように GlassFish v3 Enabler というプラグインをインストールします。

1

インストールが完了したら [ サービス ] ウィンドウでサーバーを追加します。

2

GlassFish v3 が追加可能になってますので画面の指示にしたがって追加します。

3

4

5

GlassFish v3 が追加され利用可能となりました。

6

Java EE 6 の機能の一部ですが早速試してみます。

新規プロジェクトを作成します。

[ Java Web ] カテゴリを選択し、プロジェクトに [ Web アプリケーション ] を選び [ 次へ> ] ボタンをクリックします。

11

プロジェクトの設定を行います。

とりあえずここはデフォルト設定としました。

12

サーバーには GlassFish v3 を設定します。

Java EE バージョンには本当は Java EE 6 を選びたいところですが無いので Java EE 5 をドロップダウンリストから選択します。

13

フレームワークは利用しないので [ 完了 ] ボタンを押して終了します。

14

プロジェクトに POJO ベースの EJB を追加します。

[ 新規 ] → [ Java クラス... ] を選択します。

15

名前と場所を設定します。

16

HelloEJB クラスが自動生成されます。

このクラスに @Stateless アノテーションをつけます。

エラー表示が出てヒントが出ますのでヒントの指示どおり javax.ejb.Stateless をインポートします。

17

sayHello メソッドを作ります。

これで EJB の作成は終わりです。

 

19

次に、この EJB を呼び出すサーブレットを作成します。

[ 新規 ] → [ Java クラス... ] を選択します。

名前と場所の設定を下図のようにします。

22

自動生成された HelloServlet クラスに @WebServlet をつけます。

URL パターンも忘れずにつけます。

23

javax.servlet.annotation.WebServlet をインポートします。

24

HttpServlet を継承します。

26

EJB をインジェクトします。

ヒントのとおりインポートを修正してエラーを修正します。

29

doGet メソッドをオーバーライドします。

32

33

34

下記コードのように doGet メソッドを編集します。

35

これで単純にサーブレットから EJB を呼び出して http://localhost:8080/WebApplication1/hello のアドレスに ” こんにちわ(^^) ゆっち ” と表示されればOKです。

おっと、Java EE 6 では sun-web.xml ファイルと web.xml が不要となるんでしたね。

削除してしまいましょう。

41

なんか寂しい気がするけど気にしない。

42

それではプロジェクトを実行し、http://localhost:8080/WebApplication1/hello にアクセスしてみましょう。

動きましたね(^^)

52

Java EE 6 ってシンプルでいいですね。

アノテーションでなんでもありのようになったような気がしないでもないが大歓迎です(^^)

Hatena タグ: ,

やっぱ、楽だね(^^)

火曜日, 5 月 12th, 2009

NetBeans を使って JDK 7 build 58 を試してみました。

試すといっても私は素人ですし、英語もだめなのでこちらのサイトで紹介されているものをまんま試してみました。

その一部始終はこちらです。

NetBeans に JDK を一度登録したらプロジェクトのプロパティでいつでも選択できるようになります。

1

JavaDoc も登録して使用できます。

便利です!

2

プログラム実行時のコマンドライン引数も設定できますのでいちいち長いコマンド入力をしなくてすみます。

3

気軽に試せます。

また、エラーやヒントも対応してくれます。(たぶん・・・)

新しい物好きな人で楽なのがいい人向けの隠れた使い方でしょうか(^^;

Hatena タグ: ,,

Maven って C:\Program Files に入れちゃ駄目?

月曜日, 5 月 4th, 2009

Maven を初めて使ってみた でプログラムの実行でトラブったけど Maven を置くところを C ドライブ直下にしたら問題なかった。

トラブル発生する C:\Program Files に置いた場合

1

C ドライブ直下に置いた場合

2

コンパイルオプションで「保存時に実行」カテゴリで「アプリケーションとテスト両方の実行」、「アプリケーションの実行のみ」を選択した場合はちゃんと実行されるようです。

なんでだろう?

そう言えばディレクトリ名にスペースがあると不具合がでることが何かであったような気がする。

これかな?

Hatena タグ: ,

Maven の読み方 & ヘルプの検索ハイライト表示が・・・

日曜日, 4 月 26th, 2009

NetBeans 6.7 では Maven が標準装備仕様となります。

Maven について少しずつ覚えていこうと思っているのですが重要な問題が発覚しました。

Maven の読み方です。

マーベン ?

メイベン ?

?????

何て読むのだろう?

そこで Kevin-san に活躍してもらうことにしました。

Java Web Start で Maven と喋ってくれるシンプルなプログラムを作ってみました。

Launch say_Maven

Java 6 がインストールされていれば聞けると思います。(たぶん・・・)

私の耳では メイバン もしくは メイヴァン としか聞こえませんでした(^^;

とりあえず マーベン ではないようですね。

 

何気にアプレットでも久しぶりに作ってみようかと思い NetBeans のヘルプに「アプレット」と入力して検索したらこうなりました。(^^;

ハイライト表示がずれてるじゃん・・・

まぁ、いいか。 読めないことはないから。

1

でも、ちょっと驚きました。

Hatena タグ: ,,

Maven って便利かも?

木曜日, 4 月 16th, 2009

昨日の Maven プロジェクトでもう少し遊んでみました。

pom.xml ファイルはこのようになってます。

ナビゲータの POM モデルで依存を確認すると junit 3.8.1 が test スコープで利用されているのが解ります。

pom.xml ファイルでも dependencies タグの子要素 dependency タグ内に記述されてます。

1

試しに Junit のバージョンを変更してみます。

プロジェクトツリーの[ テストライブラリ ]を右クリックでコンテキストメニューを表示

そして [ 依存リソースを追加... ] をクリックします。

2

依存リソースを追加ウィンドウが表示されます。

グループ ID を入力します。

途中まで入力すると補完機能が働きます。

3

アーティファクト ID とバージョンを入力し、スコープを設定します。

[ 了解 ] ボタンを押せばOK!

4

junit のバージョンが 4.5 に変更完了です(^^)

5

先ほどの依存リソースを追加ウィンドウで [ クエリー ] でも依存リソースを指定できるようです。

グループ ID やアーティファクトが不明な場合に有効かもしれませんね。

クエリーに junit と入力してみると(入力途中で検索リストが表示されます。)

6

検索結果から必要なものを選択し、[ 了解 ] ボタンをクリックすればOK!

7

以上、依存リソースを追加で遊んでみました。

あくまでも遊びということで操作方法が正しいか間違ってるかは解りません(^^;

ちなみに junit でテストを実行するとこのようになりました。

プログレスバーの長さが・・・・

前に使っていた NetBeans の開発バージョンでは確か表示欄いっぱいの長さだったのに。。。

8

Hatena タグ: ,,