Aritalab:Lecture/Programming/Java
From Metabolomics.JP
< Aritalab:Lecture | Programming(Difference between revisions)
(New page: ==Java プログラミング== ===コンパイルの仕方=== 作成するプログラムは全てクラスの集合体として表現されます。 ファイル名はそのファイル...) |
m |
||
Line 41: | Line 41: | ||
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> | ||
+ | |||
+ | |||
+ | ===クラス=== | ||
+ | オブジェクト単位でデータを管理するため、クラスを定義します。 | ||
+ | |||
+ | ;File List.java | ||
+ | <pre> | ||
+ | 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()); | ||
+ | } | ||
+ | } | ||
</pre> | </pre> |
Revision as of 14:00, 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というクラスが用意されています。 コンパイラは、自明な型変換なら自動で行ってくれます。
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()); } }