Aritalab:Lecture/Programming/Java

From Metabolomics.JP
< Aritalab:Lecture | Programming(Difference between revisions)
Jump to: navigation, search
m
Line 2: Line 2:
  
 
===コンパイルの仕方===
 
===コンパイルの仕方===
作成するプログラムは全てクラスの集合体として表現されます。
+
全てのプログラムはクラスの集合として表現されます。
ファイル名はそのファイル内に記述するクラス名とします。
+
ファイル名はそのファイル内に記述するクラス名にします。
ファイルの集合体の中で、どこかに一箇所、スタートする位置としてmain関数をおきます。
+
ファイル集合の中で、どこかに一箇所、スタートする位置としてmain関数をおきます。
 
;ファイル Test.java
 
;ファイル Test.java
 
<pre>
 
<pre>
Line 15: Line 15:
 
}
 
}
 
</pre>
 
</pre>
コンパイルして実行してみます。
+
コンパイルして実行してみましょう。
 
<pre>
 
<pre>
 
$ javac Test.java
 
$ javac Test.java
Line 29: Line 29:
 
===基本データ型===
 
===基本データ型===
 
変数は必ず型を持ち、異なる型の間では型変換を行う必要があります。
 
変数は必ず型を持ち、異なる型の間では型変換を行う必要があります。
また、各基本データ型<tt>int, float, double</tt>等はクラスと互換性が無いため、それぞれ<tt>Integer, Float, Double</tt>というクラスが用意されています。
+
また、各基本データ型<tt>int, float, double</tt>等はクラスと互換性が無いため、それぞれ<tt>Integer, Float, Double</tt>というクラスが用意されています。<br/>
 +
 
 +
Javaで小数とfloatを一緒に使うと、「精度が落ちている」とエラーになります。メモリ量は気にしないで常にdoubleを使いましょう。
 +
<pre>
 +
float  f = 3.1415;  // コンパイルエラー。精度が落ちている。3.1415f と書くとOK。
 +
double d = 3.1415;  // OK。
 +
</pre>
 +
 
 
コンパイラは、自明な型変換なら自動で行ってくれます。
 
コンパイラは、自明な型変換なら自動で行ってくれます。
 
<pre>
 
<pre>
Line 41: Line 48:
 
float pi = Float.valueOf(str); // piに3.1415という数値が入る。
 
float pi = Float.valueOf(str); // piに3.1415という数値が入る。
 
int pi = Integer.valueOf(str); // コンパイルエラー。3.1415は整数ではない。
 
int pi = Integer.valueOf(str); // コンパイルエラー。3.1415は整数ではない。
 +
</pre>
 +
数値を逆に文字列にするには+記号でOKです。
 +
<pre>
 +
String str = "Value of pi is " + 3.1415;
 
</pre>
 
</pre>
  
  
 
===クラス===
 
===クラス===
オブジェクト単位でデータを管理するため、クラスを定義します。
+
オブジェクト単位でデータを管理するのに、クラスを定義します。
  
 
;File List.java
 
;File List.java
 
<pre>
 
<pre>
class ListRep {
+
class ListRep { // publicなclassではない(List.java中に書ける。)
 
   Object obj;
 
   Object obj;
   ListRep(Object o) { obj = o; }
+
   ListRep(Object o) { obj = o; } // コンストラクタ
 
   ListRep prev;
 
   ListRep prev;
 
   ListRep next;
 
   ListRep next;
Line 79: Line 90:
 
         if (y != null) y.prev = null; else tail = null;
 
         if (y != null) y.prev = null; else tail = null;
 
         size--;
 
         size--;
 +
        return x.inf();
 +
      }
 +
    else
 +
      { System.err.println("Accessing empty list.");
 +
        System.exit(1);
 
       }
 
       }
    return x.inf();
 
 
   }
 
   }
  

Revision as of 15:28, 5 October 2010

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というクラスが用意されています。

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

 float  f = 3.1415;  // コンパイルエラー。精度が落ちている。3.1415f と書くとOK。
 double d = 3.1415;  // 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