ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2008年12月26日金曜日

Javaで配列の要素を数える(配列のカウント)

※かなり昔の記事なんですが、移転したので転載します。


Javaは動的配列を管理してくれるクラスが充実しているので、純粋な配列って余り使うことは(私は)ないんですが、使う必要が出てきて唖然としました。

「あれ?sizeofってどうやるんだろ?」

ちなみにC++/Cでは、配列の要素数を計算するのにこんな計算をします。


上のソースでは、配列の全体のデータ量を、T_DATAという箱のサイズで割っています。
こうすると、いくつ分の要素があるか分かるんです。

それが、JAVAだと、こういう感じでした。



うわみじかっ。


配列そのものに機能があるらしく、配列構造になっていると、そいつのlengthというパラメータに要素数が入っているようです。

Java使う人には当たり前すぎて取り上げるまでも無いんでしょうが、C++からきた人から見るとカルチャーショックです。笑

まあ、よくJavaを使うとプログラムを書く量が増える、とよく言われますが。
後発で開発された言語なので、色々機能はあるんですねー。for-eachとかね。

Javaでの文字列整形 (J2SE 1.4系)

私は元々C/C++開発者。

なので、「sprintf~」「printf~」構文は欠かせません。
printf、sprintf関数は、C/C++で文字列の整形を行うものです。

例えば、こんなことが出来ます。

(C++言語のソース)

(出力結果)
ただいまの値=0000200と、abcdefg

割と簡単に、色々整形しながら出力できます。しかも構文は一行。
sprintfを使えば、同じ形式で画面上ではなく、メモリ上の文字列データへ出力できますしね。

で、今の私は主にJava開発者です。
同じプログラムな訳で、当然値を整形して出力する事もあるわけですが。

実は、Java1.4にはこのsprintfに相当する機能が存在しないんですよ。
それも、同じことをするのに非常に面倒なコーディングが必要。

こんな感じ。

(JAVAのソース)

(出力結果)
ただいまの値=0000200と、abcdefg

…長い。
えらく面倒だってばさ。

たかだか2、3行と思うかもしれないけれど、実はそう簡単じゃないんですよ。
実は、加工する値と加工する形式が増えれば増えるほど、この2,3行の追加分が3倍、4倍、と膨れ上がっていくわけで。

C/C++では同じ1行で出来ることを、数百行のソースを書いてやっとできるんです。


はー。


ちなみに、最近リリースされた、J2SE5.0以降では、ほとんどC/C++のsprintf、printfと同じ機能、使い勝手の関数が実装されたらしいです。
他にもJ2SE5.0では、かなり色々とC/C++に似た便利な機能が移植されているそうですよ。


きっと相当要望があったんだろうなー。


ま、企業向け開発者の私がJ2SE5.0で開発できるようになる時代なんて、何年先になるのか分からないけれど。

…ああ、やだやだ。

2008年12月22日月曜日

JavaFX SDK 1.0正式版が来ました

とうとうSunも出しましたね!!やっと登場です。

Adobe AIRとかSilverlightとかと同じ路線。
ていうか元々Javaアプレットとかって、これ「そのもの」だよね。時代が早すぎて失敗してたのか。

私はたぶんAIR派になると思うけど(Adobe製品漬けなので)、データのコンバートできたりしたらいいな。
…て、Photoshopファイルとかワンクリックでコンバートできるのか。すごいな。

Javaはエンタープライズレベルでも安定してるし、まあ自分が使える言語ってのもあるけど。
先駆者(ていうか先駆者すぎて戦死してたけど)として、がんばって欲しいところ。

2008年10月18日土曜日

eclipseでJavaプログラムをダブルクリックで実行できるようにする(Jarファイル化)

eclipseで作ったソフトをjarファイルとして配布したい、と思った場合の手順。

MacOS Xでも、WindowsではJRE がインストールされた状態なら、jarファイルをダブルクリックするだけでそのまま実行できるので便利になります。
現状Javaプログラムを配布するには一番いい方法ですね。

今回Mac版eclipse使ってますが、Windows版でも方法は全く同じです。

レシピ。

まず、プロジェクトエクスプローラから、該当するプロジェクトを右クリックして「Export」(エクスポート)を選択します。


「Java」の「JAR file」を選択して「NEXT」を選択。


次に、出力したいプロジェクト(プログラム)を選択し、「Browse」をクリックします。


出力先のパス(どこの、どんな名前でもOK)を入力して「Save」を選択。
画面が元に戻ったら、出力先Jarファイル名が設定されていることを確認し、「Next」を選択します。


あまり気にせず「NEXT」を選択します。


ここがミソです。
「Select the class of the application entry point」の「Main class」で「Browse」を選択します。

これはアプリケーションのメインクラスを選択する項目です。
Javaでは各クラスそれぞれにMain関数を作れるので、どれがメインクラスか指定しないといけません。


クラスの一覧が出るので、最初に実行したいクラスとmain関数を選択して「OK」を選択します。
Main classに入力されたクラスを確認して「Finish」を選択します。


普通は数個の Warningがあるのでこんな完了メッセージが出ますが、私は放っておいてます。


指定したパスに、XXXX.jarファイルが出力されます。


こんな感じで。

JavascriptでIEを判定する方法

1行でIE(インターネットエクスプローラ)かどうか判定する方法を聞きつけたので。

ソース。
if(/*@cc_on!@*/false){
...IE用の処理
}

超簡単!

ただしMac用IEは判定できないそうで。

ま、今でもIE使っているMacユーザはかなり少ないと思うけど。

Javaでファイルのドラッグアンドドロップを受け付ける

備忘録。

Javaでファイルのドラッグアンドドロップを受け付けるプログラムです。

珍しくサンプルプログラムまで作りました。
eclipseで作ってましたが、下を適当な名前.javaとかにしてコンパイルすれば動くと思います。
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.io.File;

/**
* DandDクラス
* ドラッグアンドドロップテストプログラム
* @author Sakito Yumitsuka
*/
public class DandD extends Frame
{
TextField tf1 = new TextField("ここにドラッグアンドドロップ",30);

/**
* ドラッグアンドドロップウィンドウの設定
*/
public DandD()
{
// ウィンドウ上の設定
this.setTitle("Drag and drop");
this.setSize(350, 90);

// ウィンドウ終了時の動作を指定
this.addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent evt) {
System.exit(0);
}});

// 無名クラスでドロップ時の動作を指定
new DropTarget(tf1, new DropTargetAdapter(){
public void drop( DropTargetDropEvent e ) {
try {
Transferable transfer = e.getTransferable();
if ( transfer.isDataFlavorSupported( DataFlavor.javaFileListFlavor ) ) {
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
java.util.List fileList = (java.util.List)( transfer.getTransferData( DataFlavor.javaFileListFlavor ) );
tf1.setText( ( (File)fileList.get(0) ).getAbsolutePath() );
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});

setLayout( new FlowLayout() );
add(tf1);

setVisible( true );
}

/**
* @param args
*/
public static void main(String[] args)
{
new DandD();
}
}

こんな感じで。

2008年10月14日火曜日

JAVAでフォルダ内のファイル名を一覧取得

指定したフォルダ内のファイルとフォルダ名を一覧で取得する方法です。

「C:\hogehoge」フォルダ内の全ファイル、フォルダ名を取得してみます。
File dir = new File("C:\hogehoge");
String[] fileList = dir.list();

これでfileList[]にファイル名のリストが保存されます。

ちなみにこいつは取得時にファイル名で絞込みができます。
例として、下ではPDFファイルのみを抽出します。
File dir = new File("C:\hogehoge");
String[] fileList = dir.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".pdf");
}
});
案外単純。