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

2012/01/22

javaのprintf関数

前の記事で処理時間の計測(java)をして,フォーマットの方が勉強になったのですが,
NumberFormatを使っていて思ったよりも処理が多いと思って,javaでcのprintfのようなものはないのかと調べてみたところ思いっきり
System.out.printf("値は%d", 10);

あった.ずっとSystem.out.println()をつかってきたので,こっちも使ってみよう.
書式もほとんど同じだし.(cの改行の\nが%nになっているっぽいけど)

ここにかなり詳しく書いてある.


2012/01/21

処理時間の計測(java)

javaの時間の測定はSystem.currentTimeMillis()とSystem.nanoTime()の2種類がある.

currentTimeMillis()

  • ms単位で処理時間が分かるが,CPU,OSなどの環境で10ms~15msの誤差あり.


nanoTime()
  • ns単位で処理時間が分かるが,1μs単位以下は誤差やこの処理そのものの時間も大きく関わってしまうので安全のために10μs以上では正確だろう
この両方についてcurrentTimeMillis()はms単位,nanoTime()はms単位で小数点3桁(μs)まで表示するプログラムを作成.



 1. currentTimeMillis()
 
import java.text.*;

long currentstart = System.currentTimeMillis();

//計測したい処理

long currentstop = System.currentTimeMillis();
NumberFormat currentformat = NumberFormat.getNumberInstance();
System.out.println("処理時間は" + currentformat.format((currentstop-currentstart)) + "ms <- currentTimeMillis()");

 2. nanoTime()
 
import java.text.*;

long nanostart = System.nanoTime();

  //計測したい処理

long nanostop = System.nanoTime();
NumberFormat nanoformat = NumberFormat.getNumberInstance();
nanoformat.setMaximumFractionDigits(3);// 小数点以下の桁を3桁に設定
nanoformat.setMinimumFractionDigits(3);
System.out.println("処理時間は" + nanoformat.format((double)(nanostop-nanostart)/1000/1000) + "ms <- nanoTime()");

今回は時間を計測するのがメインだったが,それよりも有効桁などを調節するフォーマットの方が勉強になったかも.
別記事でフォーマットも書こうかな
cだとprintfで色々できるが,javaはformatをつくってそれを自分の好きなように調節して引数に数字を入れるということか,


ここを参考に




    2012/01/02

    待ち時間を作るsleep関数(windows,linux)

    プログラミングでよく「待ち」を簡単に導入したい時が良くある。
    windowsとlinuxではほんのちょっとだけ違う。

    ●linux
      sleep(t[s]);
    ●windows
    #include<windows.h>
      Sleep(t[ms]);
    windowsがSleepで大文字から始まるのが忘れてしまいそうだ。

    2011/12/25

    classファイルの内容を見る


    classファイルの中身を見るには
     $ javap -c (classファイル)
    ここを参考に
    http://www.atmarkit.co.jp/fjava/javatips/065java004.html

    列挙型 enum


    列挙型について各言語の違い

    ●c++
    enumあり.列挙型のイメージのとおり使えると思う.構造体みたいな感じ.
    http://ja.wikipedia.org/wiki/%E5%88%97%E6%8C%99%E5%9E%8B


    ●java
    enumあり.使い方は全くc++と同じかな
    上のURLにjavaのもかいてある


    ●python
    なんか他のと同じような型が組み込みであると思ったけど調べてみるとない...
    タプル型と混同していたのかな.

    でもenumというのはあったが,AppleEvent オブジェクトがpython3.xから無くなってしまうらしいので使わないほうがいいし,覚えないほうがいいかも.
    http://www.python.jp/doc/release/library/aetypes.html#aetypes.Enum

    またemurateというものもあったが,ちょっと他のとはイメージが違う.ネットではfor文で回すのが多かった.
    http://www.python.jp/doc/release/library/fm.html#fm.enumerate


    今回ちょっと調べてみて1番よかったことはwikiで"列挙型"などの言葉を検索すると各言語の違いなども出てくるということだ.
    暇なときにでも思いついたヤツを見てみるといいかも(pythonがないのは悲しいがしょうがない)

    c++とjavaの違いはいろいろなサイトでも扱っているので情報が多いね
    http://ja.wikipedia.org/wiki/Java%E3%81%A8C%2B%2B%E3%81%AE%E6%AF%94%E8%BC%83

    http://www.nurs.or.jp/~sug/soft/java/java15.htm

    デフォルト引数とオーバーロード


    ふと,デフォルト引数をつかってオーバーロードを使ったらかなりめんどくさくなんないか?と思った.

    ではここで各言語のデフォルト引数とオーバーロードについてのまとめ

    ●c++
    デフォルト引数,オーバーロード両方あり

    よって,このような問題が起こる(関数のデフォルト引数とあいまいさの問題のところ)
    http://www.geocities.jp/pcinfo_hp/Cplus2.html

    デフォルト引数は使わずオーバーロードを使って行ったほうがいい


    ●java
    デフォルト引数なし.オーバーロードはあり.

    これは問題が起こらないがデフォルト引数がないということを覚えておかなくては

    さすがめんどくさいが誤解をうまないjava


    ●python
    デフォルト引数はあるが,オーバーロードはなし.

    しかし,デフォルト引数でオーバーロードのようなことができる.
    http://works.surgo.jp/translation/pyguide.html

    まあオーバーロードはないのできちんと見ればわかるかな


    ってことで三者三様.やはり,c++が1ばんやっかいだね


    じゃあちょっと使っているjythonはどうなっているのだろうか?
    たぶん構成はjavaっぽいのでjavaのようになるのだろう