Aritalab:Lecture/Programming/Java
From Metabolomics.JP
< Aritalab:Lecture | Programming(Difference between revisions)
m |
|||
| Line 2: | Line 2: | ||
===コンパイルの仕方=== | ===コンパイルの仕方=== | ||
| − | + | 全てのプログラムはクラスの集合として表現されます。 | |
| − | + | ファイル名はそのファイル内に記述するクラス名にします。 | |
| − | + | ファイル集合の中で、どこかに一箇所、スタートする位置として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); | ||
} | } | ||
| − | |||
} | } | ||
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());
}
}