Aritalab:Lecture/Programming/Java

From Metabolomics.JP
Jump to: navigation, search

Contents

Java プログラミング

コンパイルの仕方

作成するプログラムは全てクラスの集合体として表現されます。 ファイル名はそのファイル内に記述するクラス名とします。 ファイルの集合体の中で、どこかに一箇所、スタートする位置として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 foo This is a pen
This
is
a
pen

基本データ型

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

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は整数ではない。


クラス

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

File List.java
class ListRep {
  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();
  }

  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