Aritalab:Lecture/Programming/Java

From Metabolomics.JP
Jump to: navigation, search

Contents

Java プログラミング

プログラムの書き方

Eclipseのような統合環境でプログラムを書く場合、自動的にインデントが入ります。インデントはプログラムを読みやすくする(特に{}の対応)ために入れるので、崩さないようにしましょう。Emacsの場合は、JDEなどを使ってください。

Eclipseの場合は、Menu→Source→Formatで崩れたインデントを修正できます。自分流にインデントしたい人はPreferences→Java→Code Styleで変更できます。

コンパイルの仕方

全てのプログラムはクラスの集合として表現されます。 ファイル名はそのファイル内に記述するクラス名にします。 ファイル集合の中で、どこかに一箇所、スタートする位置としてmain関数をおきます。

ファイル Test.java
public class Test {
  public static void main(String[] args)
    {
      for(int i=0; i < args.length; i++)
        System.out.println(args[i]);
    }
}

コンパイルして実行してみましょう。

$ javac Test.java
[1]+  Done

$ java Test This is a pen
This
is
a
pen

基本データ型

変数は必ず型を持ち、異なる型の間では型変換を行う必要があります。 また、各基本データ型int, float, double等はクラスと互換性が無いため、それぞれInteger, Float, Doubleというクラスが用意されています。

Javaで小数とfloatを一緒に使うと、「精度が落ちている」とエラーになります。メモリ量は気にしないで常にdoubleを使いましょう。

 float  f = 3.14;  // コンパイルエラー。精度が落ちている。3.14fはOK。
 double d = 3.14;  // OK。

コンパイラは、自明な型変換なら自動で行ってくれます。

Integer I = 1;    // 基本データ型をIntegerクラスに型変換
int i = I;        // クラスIの中身を基本データ型に型変換

Javaのクラス定義における よく遭遇するのは、文字列型から数値への変換です。

String str = "3.1415";
float pi = Float.valueOf(str); // piに3.1415という数値が入る。
int pi = Integer.valueOf(str); // コンパイルエラー。3.1415は整数ではない。

数値を逆に文字列にするには+記号でOKです。

String str = "Value of pi is " + 3.1415;

クラス

オブジェクト単位でデータを管理するのに、クラスを定義します。

File List.java
class ListRep { // publicなclassではない(List.java中に書ける。)
  Object obj;
  ListRep(Object o) { obj = o; } // コンストラクタ
  ListRep prev;
  ListRep next;
  public Object inf() { return obj; }
}

public class List {
  ListRep head =null;
  ListRep tail =null;
  int size =0;

  List() {}           //コンストラクタ

  void push(Object o)
  { ListRep r = new ListRep(o);
    if (size > 0) head.prev = r; else tail = r;
    r.next = head;
    head = r;
    size++;
  }

  Object pop()
  { ListRep x = head;
    if (x != null)
      { ListRep y = x.next;
        head = y;
        if (y != null) y.prev = null; else tail = null;
        size--;
        return x.inf();
      }
    else
      { System.err.println("Accessing empty list.");
        System.exit(1);
      }
  }

  void append(Object o)
  { ListRep r = new ListRep(o);
    if (size > 0) tail.next = r; else head = r;
    r.prev = tail;
    tail = r;
    size++;
  }

  int size() { return size; }
  boolean empty() { return (size==0); }

  //サンプルプログラム
  static public void main(String[] args)
  { List L = new List();
    for(int i=0; i < 10; i++)
      L.push(i);
    while (!L.empty())
      System.out.println(L.pop());
  }
}
Personal tools
Namespaces

Variants
Actions
Navigation
metabolites
Toolbox