programming (se7)
DESCRIPTION
Programming (SE7). 環境工程系 丁文輝 [email protected]. 環境工程系電腦課程 ( 規画案 ). 計算機概論 (BCC) 計算機程式 (Programming) 計算機圖學 (CG) 資料庫管理系統 (DBMS) 數値分析 (NA) 地理資訊系統 (GIS) 環工電腦應用. 逢甲大學水利工程學系工學士 中央大學 ( 教育部委訓 ) 大專資訊師資班 成功大學環境工程學系工學碩士 成功大學環境工程學系博士候選人. 自己紹介 - 澄原日先 ( すみはら ひさき ). 台中市坤財營造廠工地主任 - PowerPoint PPT PresentationTRANSCRIPT
Programming (SE7)
環境工程系 丁文輝[email protected]
Java programming 2
環境工程系電腦課程 ( 規画案 )
計算機概論 (BCC) 計算機程式 (Programming) 計算機圖學 (CG) 資料庫管理系統 (DBMS) 數値分析 (NA) 地理資訊系統 (GIS) 環工電腦應用
Java programming 3
逢甲大學水利工程學系工學士 中央大學 ( 教育部委訓 ) 大專資訊師資班 成功大學環境工程學系工學碩士 成功大學環境工程學系博士候選人
自己紹介 - 澄原日先 ( すみはら ひさき )
台中市坤財營造廠工地主任 台中市政府清潔管理所垃圾處理場場長 崑山工商專校環境工程科講師兼科主任 崑山科技大學環境工程學系助理教授
Java programming 4
電腦相關課程研習 ( すみはら )
計算機概論 計算機程式
FORTRAN, BASIC, PASCAL, JAVA
組合語言 8086/8088, 80286
資料結構 系統分析 計算機圖學
資料庫管理系統 專業應用軟體
PEⅡ, dBASEⅢ+, Lotus 123, Office, ACAD, SAS/SPSS, Sigma Plot, GIS
數値分析 電腦應用
高等結構 , 海洋放流
Java programming 5
教科書‧参考書 JAVA2 程式設計從零開始 ( 適用 JDK7)
何嘉益 ( 等 ) ,上奇 (2012) Java 初學指引 – 使用 SE7
陳錦輝,博碩 (2011) 挑戰 Java 程式語言 蔡文輝 ( 等 ), 全華 (2006) JAVA SE6 程式設計基礎與實習手冊 李廷圭,松崗 (2009)
Java テキスト
東海大学 ( 日本 ), 坂田圭司 http://kgclass.jp/text/java
勤益科大 (JAVA Note), 朱孝國 http://irw.ncut.edu.tw/peterju/java.html
崑山科大 ( 網路大學 ), 丁文輝 http://elearning.ksu.edu.tw
Java programming 6
Java programming 7
注意事項 コンピュータ室は飲食禁止。 紙節約のため、デジタルファイルを請求
して下さい。 パワーポイントを利用しない授業の方が
多かったので、教科書で、よく復習して下さい。
再試験は行いません。 4 年生は特に心して望むように!
Java programming 8
成績評価 欠席が3分の1を超えた場合、単位の取得
は難しい。 評価はおおよそ出席( 40%) 、宿題
( 20%) 、最終試験( 40%) などを通じて総合的に判定する。
ちなみに先学期 (101_2) 「 java プログラミング」において、受講者 100 人中、不可は 26 人,約 26 %。
( 四環一 A 20%, 四環一 B 31%)
Java programming 9
オフィスアワー 月曜日( 10:00-11:30 ) 火曜日( 10:00-11:30 ) 金曜日( 10:00-11:30 ) (特に授業に関する)質問,相談に
こたえます 設計 3 棟 4F(D3402) メールはいつでもかまいません
ting @ mail.ksu.edu.tw
Java programming 10
計算機程式 (Java SE7, 2013 春 )
Introduction Data type Input/Output Assignment Selection
Iteration Array Method
Java programming 11
プログラミング基礎演習
Console Assignment Expression Divisor If / If-else Switch-case
For loop While loop Random Bubble sort Method Recursive
Java programming 12
プログラミング言語の構成
文字
語
式
文
手続きと関数
モジュール
プログラム
英数字、特殊記号等。
名前、データ、演算子、予約語( for, ifなど)。
演算子と非演算子からなる。 a*b 、 a>b など。
処理の最小単位。「 a=b+c; 」など。
Java programming 13
プログラミング言語発展の歴史
機械語アセンブリ言語
FORTRANCOBOL
ALGOL
PL/1
ALGOL68
PASCALC 言語
Ada
C++
Object PASCAL
Delphi
Java
C++Builder
BASIC
言語以前
Lisp Prolo
g Smalltalk
時間
参考: 河村一樹、斐品正照
低水準言語
高水準言語
超高水準言語
オブジェクト指向言語
ビジュアル開発環境
Java programming 14
FORTRAN
BASIC
Pascal
Java (2011)
Java programming 15
Java programming 16
Java programming 17
プログラミング言語
Java programming 18
Java programming 19
代表的なオブジェクト指向言語(1)
SmallTalk 最初のオブジェクト指向言語
C++ C 言語の拡張言語 多重継承
Java programming 20
代表的なオブジェクト指向言語(2)
Java C 言語をベースにインターネットに適
した言語として開発 Unix, Windows など様々なプラット
フォーム上でプログラムが動作 (Write Once, Run Anywhere)
単一継承
Java programming 21
代表的なオブジェクト指向言語(3)
Ruby オブジェクト指向スクリプト言語
Visual Basic, Visual C++ Microsoft のアプリケーション開発言語
C# Microsoft の Java like なアプリケーショ
ン開発言語
Java programming 22
物件導向程式設計 物件 (object)
屬性 (property) 方法 (method)
類別 (class) 物件變數 (variable) 物件實體 (instance)
Java programming 23
物件導向程式設計的特點 (1)
封裝 (encapsulation) 將資料 ( 屬性 ) 與操作此資料的函數 ( 方
法 ) 包在一起的特性 繼承 (inheritance)
承接所有父類別 (Parent Class) 所有屬性方法,並可以加以改造的特性
Java programming 24
物件導向程式設計的特點 (2)
多型 (polymophism) 呼叫相同的函式,卻會出現不同的行為的
現象 過載 (Overloading): 將一個函數名稱,賦予
一種以上的函數實體,以便依據當時情況,擇一執行
覆寫 (Overriding): 將繼承下來的方法,以同名函數蓋掉的特色
Java programming 25
Java version history JDK 1.0 (January 23, 1996) JDK 1.1 (February 19, 1997) J2SE 1.2 (December 8, 1998) J2SE 1.3 (May 8, 2000) J2SE 1.4 (February 6, 2002) J2SE 5.0 (September 30, 2004) Java SE 6 (December 11, 2006) Java SE 7 (July 28, 2011)
Java programming 26
Java 的版本 Java 自第二版 (1.2) 開始分為三個版本,
類別函式庫名稱也由 JDK(Java Deve-lopment Kit) 改成 Java 2 SDK(Software Development Kit) J2EE (Enterprise Edition) J2SE (Standard Edition) J2ME (Micro Edition)
Java programming 27
Java Platforms
Java Card for smartcards. Java Platform, Micro Edition (Java ME). Java Platform, Standard Edition (Java
SE). Java Platform, Enterprise Edition (Java
EE).
Java programming 28
Java Platform Edition
Java programming 29
JAVA國際認證
Java programming 30
Development Environments
Sun Java Development Kit (JDK) Sun NetBeans IBM Eclipse, GNU Eclipse Borland JBuilder MetroWerks CodeWarrior BlueJ jGRASP
Java programming 31
Interpretation vs. Compilation
C++ Compiler
Java Compiler
Java Virtual Machine
C++ Source (*.c)Java Source
(*.java)
Byte-code (*.class)
Client Platform (hardware/operat
ing system)
Client Platform (hardware/operat
ing system)
Java programming 32
JDK (Java Development Kit)
Java programming 33
JDK (Java Development Kit)
Java programming 34
JDK (Java Development Kit)
javac(.exe) Java 的編譯器 , 可將 .java 原始档編譯
為 .class 類別档。 java(.exe)
JVM 虚擬機器的執行档 , 可用來執行 Java Application 的 Bytecode(.class 類別档 ) 。
Java programming 35
Java Virtual Machine
Javaソースコード
Javaバイトコード
Javaコンパイル( javac )
x86アーキテクチャ( JavaVM )
MIPSアーキテクチャ( JavaVM )
SPARCアーキテクチャ( JavaVM )
……
Java programming 36
Java Virtual Machine
Java programming 37
Java Virtual Machine
Java programming 38
Garbage Collection (1)
Garbage Collection 機制可以自動偵測未被任何參考參照到的陣列或物件,「必要時」會將其所佔記憶體空間釋放。
[例 ]:
int[ ] a = new int[100];
int[ ] b = new int[200];
a = b;
Java programming 39
Garbage Collection (2)
如欲釋放某物件或陣列,只需要停止參照,或指定為 null ,即可由 Garbage Collection 機制將其釋放。
[例 ]:
int[ ] c = new int[300];
……
c = null;
Java programming 40
Garbage Collection (3)
由 Garbage Collection 機制管理記憶體可避免人為的錯誤 ; 但未被參照到的物件之空間並非馬上被釋放回收,且須時間運作,效率較差。
Java programming 41
IDE (Integrated Development Environment)
NetBeans (Sun) JBuilder (Borland) Eclipse (IBM)
Java programming 42
Java の実行環境
ソース
翻訳
機械語Windows
機械語Mac
機械語Linux
実行
<通常の言語>
実行 実行
ソース
翻訳
JVM Windows
JVM Mac
JVM Linux
実行
< Java 言語>
実行 実行
バイトコード
機械語はプラットフォーム毎に異なる。
Java programming 43
Java 語言的特點 (1)
簡單 (Simple):指的是去除了 C/C++中較少使用或可能不安全的功能,例如指標,運算子重載,多重繼承等。
物件導向的 (Object-oriented):利用OOP 的三種基本特性: PIE( 多型,繼承,封裝 ) ,來設計出可重複使用的元件,使系統有彈性易於維護。
Java programming 44
Java 語言的特點 (2)
網路的 (Network-Savvy):提供容易使用的 API 來撰寫網路程式
直譯式的 (Interpreted) : bytecode在 JVM 上執行時, JIT負責轉換為機器碼。
穩健的 (Robust):捨棄了對記憶體的指標運作。
Java programming 45
Java 語言的特點 (3)
安全性 (Secure) : 資源回收處理 (Garbage Collection)由 JVM 自行作記憶體管理,例外處理 (Exception) 可預防突發錯誤的産生。
結構中立 (Architecture Neutral):程式執行在虚擬機器上。
Java programming 46
Java 語言的特點 (4)
可攜的 (Portable): Write once, run any-where 指的是由 JVM 與不同的作業系統溝通。
高效率的 (High Performance):利用 HotSpot, JIT 技術改善效能。
多執行緒的 (Multithreaded) : Java程序可發出多隻並行的輕量化行程。
Java programming 47
Java 語言的特點 (5)
動態的 (Dynamic) : Java 程式執行時動態的連結類別庫。
支援萬國碼 (Unicode):變數與類別名稱皆可使用中文
資料型態 (Data type)
基本資料型態 (primitive data type)
結構化資料型態 (structured data
type)
抽象資料型態 (abstract data type)
Java programming 48
Java programming 49
Java 的資料型態 (1)
Java 的資料型態大小不會像 C/C++ 一樣隨著平台不同而不同,它在所有平台上都是一樣的。
由於 Java在 char 的型態部分採用 Unicode, 換句話説 , 可以用中文取變數名稱。
Java 的變數可以指向二種資料型態: 1. 原生資料型態 2. 參考資料型態
Java programming 50
Java 的資料型態 (2)
參考資料型態 (wrapper class)定義在 java.lang 的套件中。
原生資料型態中的整數資料型態 (byte, short, int, long) 可使用 10進位 , 8進位與16進位表示。
原生資料型態中的浮點數資料型態 (float, double) ,預設浮點數為 double 型態。
Java programming 51
Java 的資料型態 (3)
原生資料型態除 boolean之外彼此間可轉型 ( 自動轉型或強制轉型 ) 。
原生資料型與參考資料型態之間必須利用物件的靜態方法來轉型。
在運算子 (operators) 為「+= , -=, *= , /=」時會發生不明確 (隱含 )轉型的情況,原來需強制轉型的資料會變成自動轉型。
Java programming 52
データ型( data type) 基本的な型
整数、浮動小数点数、真理値、文字 参照型
クラス(など)を参照する型
Java programming 53
資料型態 (Data type)
原始資料型態 (primitive type) 整數 (byte, short, int, long) 浮點數 (float, double) 布林 (boolean) 字元 (char)
非原始資料型態 (non-primitive type)
Java programming 54
基本型( primitive types)
Java programming 55
原始資料型態 (primitive type)Primitive Types / simple type 範 圍
byte (1byte) -128 ~ 127short (2bytes) -32768 ~ 32767
int (4bytes) -2147483648 ~ 2147483647
long (8bytes) -9223372036854775808 ~ 9223372036854775807
float (4bytes) +-3.4028237*10+38 ~ +-1.30239846*10-45
double (8bytes) +-1.76769313486231570*10+308 ~ 4.94065645841246544*10-324
char (2bytes) Unicode characters
boolean (1bytes) true或 false
Java programming 56
Primitive Types / simple type
範 圍wrapper class /refrence type / composition type
byte (1byte) -128 ~ 127 Byte short (2bytes) -32768 ~ 32767 Short
int (4bytes) -2147483648 ~ 2147483647 Integer
long (8bytes) -9223372036854775808 ~ 9223372036854775807
Long
float (4bytes) +-3.4028237*10+38 ~ +-1.30239846*10-45
Float
double (8bytes)
+-1.76769313486231570*10+308 ~ 4.94065645841246544*10-
324
Double
char (2bytes) Unicode characters Character
boolean (1bytes) true或 false Boolean String
Java programming 57
Java 的内建資料型別 (1) boolean :布林値
僅有兩個常數, true和 false 。 byte :位元組型別値
長度一個位元組,取値範圍是 -128至 127 。 short:短整數
長度兩個位元組,取値範圍是 -32768至 32767 。
int:整數 長度 32位元(四個位元組),取値範圍是 -2147483648至 2147483647 。
Java programming 58
Java 的内建資料型別 (2) long:長整數
長度八個位元組,取値範圍是 -9223372036854775808至
9223372036854775807 。 float:單精度 IEEE754浮點數
長度四個位元組。 double:倍精度 IEEE754浮點數
長度八個位元組。 char:字元型
長度 16位元,支援所有的 UCS-2和 ASCII 編碼。
Java programming 59
Java 的内建資料型別 (3)
若整數資料未指定型別 ; 範圍在 32 bits (-231 ~ 231-1) 的會被視為 int 型別 , 超過此範圍者視為 long 型別。
所有的浮點數資料皆預設為 double 型別。
Java programming 60
Default ValuesData Type Default Value (for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object) null
boolean false
Java programming 61
Java 的常數: final 修飾子常 數
數値 整數: final int a = 10
浮點數: final double d1 = 1.23 (預設 )
final float d2 = 1.23f
字元: final char var = 'A'
final char var = '\u0041'
字串: final String var = "hello"
布林: final boolean flag = true
Primitive Data Types 的轉型
自動轉型 強制轉型
double d; d=123;
d為 double 型態 ; 123 為 int 型態 小轉大,系統自動轉型
int a; a= (int) 123.123;
a為 int 型態 ; 123.123 為double 型態
大轉小,需強制轉型 ,否則會編譯錯誤
Java programming 62
Primitive Data Type 與 Wrapper class 型態的轉換
基本資料型態轉包裝類別 包裝類別轉基本資料型態
Integer i = new Integer(10);Float f = new Float(10.1);
利用java.lang 的wrapper class ,傳入primitive type ,傳回對應wrapper class 的實例
Integer.valueOf(i);Double.valueOf(f);
利用java.lang 的wrapper class ,傳入wrapper class 的實例,傳回對應的 primitive type
Java programming 63
Java programming 64
資料型態強制轉換 若要指定整數資料為 long 型別 , 在數値後面要加上「L」或「 l」。
若要指定浮點數資料為 float 型別 , 在數値後面要加上「F」或「 f 」。
若要將大範圍型別的數値資料轉換成範圍較小之數値資料 , 必須使用指定型別 : ( 指定型別 ) 資料或變數
Java programming 65
基本資料型態轉換成 String (1)
String.valueOf(boolean b) String.valueOf(char c) String.valueOf(char[ ] data) String.valueOf(char[ ] data, int
offset, int count)
Java programming 66
基本資料型態轉換成 String (2)
String.valueOf(double d) String.valueOf(float f) String.valueOf(int i) String.valueOf(long l) String.valueOf(Object obj)
Java programming 67
String轉換成數字資料型態 Byte.parseByte(String s) Double.parseDouble(String s) Float.parseFloat(String s) Integer.parseInt(String s) Long.parseLong(String s)
Java programming 68
コメント(注釈) // ここにコメントを記述します。 a = b + c; /* ここにもコメントを記述します。 */ /*
* 複数行にまたがるコメントも可能です。 */ /**
* この部分は javadoc コマンドで抜き出すことができます。
*/
Java programming 69
commenting // This is an example of a single line comment
using two slashes /* This is an example of a multiple line comment
using the slash and asterisk. This type of comment can be used to hold a lot of information or deactivate code but it is very important to remember to close the comment. */
/** * This is an example of a Javadoc comment; * Javadoc can compile documentation from this
text. */
Java programming 70
主要な Java パッケージ
パッケージ名 説 明java.applet アプレット作成java.awt GUIjava.io 入出力java.lang Java 言語の基本機能java.math 算術演算java.net ネットワーク処理java.util ユーティリティ機能
Java programming 71
java.lang.Math 類別
Java programming 72
Math. メソッド名 ( 引数 );
class MathExample { public static void main(String[] args) { System.out.println("-5 の絶対値は " + Math.abs(-5)); System.out.println("3.0 の平方根は " + Math.sqrt(3.0)); System.out.println ("半径2の円の面積は " + 2*2*Math.PI); System.out.println ("sin60° は " + Math.sin(60.0*Math.PI / 180.0)); }}
Java programming 73
I/O架構圖 ( 以 byte 為單位 )
FileInputStream
FileOutputStream
ByteArrayInputStream
ByteArrayOutputStream
PipedInputStream
PipedOutputStream
StringBufferInputStream
System.in
System.out
System.err
Low LevelMedia Hight Level
FilterInputStream
FilterOutputStream
DataInputStream
DataOutputStream
BufferedInputStream
BufferedOutputStream
PushbackInputStream
LineNumberInputStream
PrintStream
file
memory
network
console
Java programming 74
I/O架構圖 ( 以 char 為單位 )
FileReader
FileWriter
CharArrayReader
CharArrayWriter
PipedReader
PipedWriter
StringReader
StringWriter
InputStreamReader
OutputStreamWriter
FilterReader
FilterWriter
BufferedReader
BufferedWriter
PushBackReader
LineNumberReader
PrintWriter
Low LevelMedia Hight Level
file
memory
InputStreamOutputStream
Java programming 75
使用 BufferedReader 類別讀取鍵盤輸入的資料
import java.io.*;
public class 主類別名稱 { public static void main(String args[]) throws IOException { BufferedReader buf; String str1; buf = new BufferedReader(new InputStreamReader(System.in)); str1 = buf.readLine(); ............ }}
Java programming 76
キーボードからの入力 (1)import java.io.*; class Sample1 { public static void main (String args[ ]) throws IOException { System.out.println(“請輸入提示字串…” ); BufferedReader br = new BufferedReader(new InputStreamReader(System. in)); String str = br.readLine(); System.out.println(“您輸入的字串是…” + str); } }
Java programming 77
キーボードからの入力 (2)import java.io.*;
class Sample2 { public static void main(String args[ ]) throws IOException { System.out.println(“請輸入一整数…” ); BufferedReader br = new BuffereReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); System.out.println(“您輸入的整数値 = ” + num); }}
Java programming 78
使用 Console 物件讀取鍵盤輸入的資料import java.io.Console;
public class 主類別名稱 { public static void main(String args[]) { Console console = System.console(); String str1; str1 = console.readLine() int i = Interger.parseInt(str1); ............ }}
Java programming 79
java.util.Scanner 類別 Scanner
ファイルやキーボードからの入力が容易にできるクラスである。
利点 BufferedReader オブジェクトを作る必要がな
い。 文字、整数、実数を判断できるメソッドを持っ
ているので Integer.parselnt() などの型変換がいらない。
Java programming 80
Scanner を用いた読み込み
import java.util.Scanner; キーボードからの読み込み
Scanner sc = new Scanner(System.in);
ファイルからの読み込み Scanner sc =
new Scanner(new FileStream("filename.txt"));
Java programming 81
Scanner Methods
Java programming 82
Numeric and String Methods
Method Returnsint nextInt() Returns the next token as an int. If the next token is
not an integer, InputMismatchException is thrown.long nextLong() Returns the next token as a long. If the next token is
not an integer, InputMismatchException is thrown.float nextFloat() Returns the next token as a float. If the next token is
not a float or is out of range, InputMismatchException is thrown.
double nextDouble()
Returns the next token as a long. If the next token is not a float or is out of range, InputMismatchException is thrown.
String next()
Finds and returns the next complete token from this scanner and returns it as a string; a token is usually ended by whitespace such as a blank or line break. If not token exists, NoSuchElementException is thrown.
String nextLine()
Returns the rest of the current line, excluding any line separator at the end.
void close() Closes the scanner.
Java programming 83
Boolean Methods
Method Returnsboolean hasNextLine()
Returns true if the scanner has another line in its input; false otherwise.
boolean hasNextInt()
Returns true if the next token in the scanner can be interpreted as an int value.
boolean hasNextFloat()
Returns true if the next toke in the scanner can be interpreted as a float value.
Java programming 84
Scanner 使用範例 (1)
import java.util.Scanner; public class 主類別名稱 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(“請輸入一個整數…” ); int i = sc.nextInt(); … } }
Java programming 85
Scanner 使用範例 (2)import java.util.Scanner;
public class Input { public static void main(String[] args) {
Scanner cin = new Scanner(System.in); //建立輸入處理物件
float a = cin.nextFloat(), b = cin.nextFloat(); //讀取兩個浮點數
System.out.println(a + b); //輸出 a+b 的運算値
String c = cin.next(); //讀取一個字串System.out.println(c); //輸出 c的字串内
容}
}
Java programming 86
跳脱字元(Escape sequence character)
跳脱字元 效果\' 單引號『 '』
\" 雙引號『 "』
\\ 反斜線符號『 \』
\0 空白字元( Space)\n 換行 (New line)
\b 退格一格( Backspace)\t 水平跳格,與 tab鍵作用相同 (Tab)
\f 通知印表機,資料由下一頁開始列印( Format)\r 回到該行第一格 (Carriage Return)
\ddd 8進制數字指定 Unicode
\uxxxx 16進制數字指定 Unicode
Java programming 87
java.util.Formatter 類別方 法 作 用
void close() 關閉 Fomatter 物件並釋放資源void flush() 將緩衝區中的資料寫回 Fomatter 物件
中Fomatter format(Locale, String format, Object…args)
將需要格式化的 args 資料以地區別及Format 中定義的格式輸出
Fomatter format(String fomat, Object…args)
將需要格式化的 args 資料以 format 中定義的格式輸出
lOException ioException() 取得 Appendable 物件丟出的例外Locale locale() 傳回 Fomatter 物件的地區別Appendable out() 傳回 Fomatter 物件的輸出目的地String toString() 傳回格式化的結果,但最好是改用
「 out( ).tostring( ) 」
Java programming 88
format 方法 完整的使用格式:
%[argument_index$] [flags] [width] [.precision] conversion
Java programming 89
Common Formatting Codes
Java programming 90
Conversion (1)
字元 種類 作 用
b 或是 B
一般如果資料為 null ,則輸出 false如果資料為 boolean 型態,則輸出 stringValue() 的執行結果除了上述的形況外,輸出的結果皆為 true
h 或是
H一般
如果資料為 null ,則輸出 null除了上述的形況外,輸出的結果為十六進位的方式,如同執行「 lnteger.tpHexString(arg.hash Code( ))」的結果
s 或是 S
一般
如果資料為 null ,則輸出 null如果資料實作了 Formattable介面,則輸出「 formatTo」的執行結果除了上述的形況外,輸出的結果執行 toString 的結果
Java programming 91
Conversion (2)字元 種類 作 用c 或是 C 字元 輸出 Unicode字元
d 整數 輸出十進位的資料o 整數 輸出八進位的資料
x 或是 X 整數 輸出十六進位的資料e 或是 E 浮點數 輸出科學記號表示方式的資料
f 浮點數 輸出十進位的資料g 或是 G 浮點數 依精準度 (precision) 的設定輸出十進位或是以
科學記號表示的資料a 或是 A 浮點數 輸出十進位或是以科學記號表示的資料t或是 T 日期時間 日期或是時間輸出格式的前導字元
% 百分比 輸出百分比格式的資料n 換行符號 輸出換行字元
Java programming 92
時 間 日 期字元 作 用 字
元作 用
H 顯示時, 24小時格式,從 00~23,以 1 個字元表示
B 依地區的設定輸出月份的全名。例如「一月」、「 January 」
l 顯示時, 12小時格式,從 01~12,以 2 個字元表示
b 依地區的設定輸出月份的縮寫。例如「一月」、「 Jan」
k 顯示時, 24小時格式,從 0~23,以 1 個或 2 個字元表示
A 依地區的設定輸出星期的全名。例如「星期日」、「 Sunday」
l 顯示時, 12小時格式,從 1~12,以 1 個或 2 個字元表示
a 依地區的設定輸出星期的縮寫。例如「星期日」、「 Sun」
M 顯示分,從 00~59 ,以 2 個字元表示
Y 輸出4個數字的西元年,例如:2005
S 顯示秒,從 00~60 ,以 2 個字元表示。 60代表閏秒
y 輸出西元年的後兩個數字,例如:05
p 依地區的設定輸出「上午」或是「下午」。也可能是「 am」、「 pm」
m 輸出兩個數字的月份,例如:01、02、12
z 以數字的方式輸出地區別。例如:台灣為 0800
d 輸出兩個數字的日期,例如:01、02、30、31
Z 以文字的方式輸出地區別。例如:台灣為「 CST」
e 輸出一個或是兩個數字的日期,例如:1、2、30、31
Java programming 93
flag 參數Flag 作 用- 讓輸出靠左對齊# 適用另一種格式輸出+ 在數字左邊顯示正負符號空格 在整數或浮點數前顯示一個空格
0 靠右對齊,數字不足時,補上 0
, 一千分為表示( 負號以小括號表示
Java programming 94
printf 使用範例 (1)
Example 1: 控制寬度和精度 System.out.printf(“%5.3f”, Math.PI) , 控制輸出寬度為 5 ,精度為 3 , 結果為“ 3.142”
(輸出的最前面有一个空格 )
Java programming 95
printf 使用範例 (2)
Example 2: 使用 argument_index System.out.printf(“%s and %s”,
“You”, “Me”)
輸出” You and Me” System.out.printf(“%2$s and %2$s”,
“You”, “Me”)
輸出”Me and Me”
Java programming 96
プログラミング基礎演習
Console Assignment Expression Divisor If / If-else Switch-case
For loop While loop Random Bubble sort Method Recursive
Java programming 97
Java Virtual Machine
Javaソースコード
Javaバイトコード
Javaコンパイル( javac )
x86アーキテクチャ( JavaVM )
MIPSアーキテクチャ( JavaVM )
SPARCアーキテクチャ( JavaVM )
……
Java programming 98
プログラムの作成
Java programming 99
java 程式的編輯器 整合式編輯器
Eclipse, JCreator LE 等 視覺化編輯器
Jbuilder, IntelliJ IDEA, Visual Cafe, Workshop, Forte for Java 等
純文字編輯器 免費軟體: Crimson, ConText, NotePad 等 共享軟體: UltraEdit, EditPlus 等
Java programming 100
JDK (Java Development Kit)
javac(.exe) Java 的編譯器 , 可將 .java 原始档編譯
為 .class 類別档。 java(.exe)
JVM 虚擬機器的執行档 , 可用來執行 Java Application 的 Bytecode(.class 類別档 ) 。
Java programming 101
Java programming 102
Java 言語プログラム作成の流れ
1) プログラムソースファイルの作成 プログラムを書く ( クラスを書く ) ファイルの拡張子は .java (例えば Test.java)
2) プログラムのコンパイル javac ファイル名(例えば javac Test.java )
3) プログラムの実行 java クラス名(クラス名が Test なら java
Test )
Java 程式寫作上的10 大錯誤排行榜 (1) By David Reilly
10 : Accessing non-static member variables from static methods (such as main)
9 : Mistyping the name of a method when overriding
8 : Comparison assignment ( = rather than == )
7 : Comparing two objects ( == instead of .equals)
Java programming 103
Java 程式寫作上的10 大錯誤排行榜 (2) By David Reilly
6 : Confusion over passing by value, and passing by reference
5 : Writing blank exception handlers 4 : Forgetting that Java is zero-
indexed 3 : Preventing concurrent access to
shared variables by threads 2 : Capitalization errors 1 : Null pointers
Java programming 104
Java programming 105
プログラミング演習 請將程式碼及執行結果貼在 MS Word
上 (filename = ‶A4010N099_09″), 儲存在桌面備用。
同學若來不及於下課前完成作業繳交程序 , 另請在習作完成後 , 儘速mail給
任課教師 ([email protected]) 。
( 班別 , 學號 , _, 作業回數 )
Java programming 106
/*
習題 1. Hello, java SE7 !
filename: Hello.java
4000N000, 澄原日先 (101.02.20.)
*/
public class Hello {
public static void main (String args[]) {
System.out.println("Hello, java SE7 !");
System.out.println("4000N000, 澄原日先, 101.02.20.");
}
}
Java programming 107
Java 程式 應用程式 (Application)
Java 應用程式是可以獨立執行的程式 小程式 (X-let)
瀏覽器端執行的小程式 (Applet) : Java applet是嵌在 HTML 中的程式
伺服器端執行的小程式 (Servlet)
Java programming 108
Java Application 基本結構
Java programming 109
Application 的結構 (例 )/* 只有註解可以放在 package 區之前*/package exam.test;import java.awt.Button; import java.util.*;
public class HelloWorld { public static void main( String[] args ) { System.out.println( “Hello World ” ); tmp obj = new tmp(); obj.i = 6; System.out.println( obj.i ); }}
class tmp{ int i = 5; }
Java programming 110
Java 語言的寫作風格 Class Name請首字大寫 Variable Name和Method Name請首字小
寫 如果名稱由數個英文字組成 ,第 2個英文字以後首字大寫
内縮4個空格 註解部分如要變成説明文件 ,請遵照 javadoc這個工具的寫作規則
Java programming 111
Java 程式碼慣例 (1)
一行不超過 80 個字元 一行一個宣告 使用 if 時,永遠加上括號 在變數宣告的地方進行初始化 (除非它
的値需要經過某些運算 ) 。
Java programming 112
Java 程式碼慣例 (2)
class 名稱應該是名詞 method 名稱應該是動詞 變數名稱應該是有意義的短單字 常數名稱應該是以底線 ("_") 分隔的全大
寫字
Java programming 113
Java 程式碼慣例 (3)
更多詳盡的程式慣例,請參考官方文章 “ Code Conventions for the Java
Program-ming Language”
http://www.oracle.com/technetwork/java/
codeconvtoc-136057.html
Java programming 114
System.out.println() /.print()
System.out.println(内容 ) 輸出”内容”加上”斷行 \r\n”至 Console
(螢幕 )
System.out.print(内容 ) 輸出”内容”至 Console(螢幕 )
如果要輸出的内容需要有字串、文字、日期等,可以利用字串的連接 (+) 來把字串串連起來進行輸出。
Java programming 115
System.out.printf()%% 在字串中顯示%
%d 以 10 進位整數方式輸出,提供的數必須是 Byte、 Short、 Integer 、 Long、或 BigInteger
%f 將浮點數以 10進位方式輸出,提供的數必須是 Float、 Double、或 BigDecimal
%e, %E 將浮點數以 10進位方式輸出,並使用科學記號,提供的數必須是 Float、 Double、或 BigDecimal
%a, %A 使用科學記號輸出浮點數,以 16進位輸出整數部份,以10進位輸出指數部份,提供的數必須是Float 、 Double、或 BigDecimal
%o 以 8 進位整數方式輸出,提供的數必須是 Byte 、 Short、 Integer 、 Long、或 BigInteger
Java programming 116
System.out.printf() -(續 )
%x, %X 將整數以 16進位方式輸出,提供的數必須是 Byte、 Short、 Integer 、 Long、或 BigInteger
%s, %S 將字串格式化輸出 %c, %C 以字元方式輸出,提供的數必須是 Byte 、 Short、
Character 、或 Integer
%b, %B 將“ true” 或“ false”輸出(或“ TRUE”、 “ FALSE” ,使用 %B) 。另外,非 null 値輸出是“ true” , null 値輸出是 "false"
%t, %T 輸出日期 /時間的前置,詳請看線上 API 文件
Java programming 117
java 程式的編寫與執行 D:\>md myjava
D:\>cd myjava
D:\myjava>
開啓記事本 ,鍵入程式碼並以 filename:
Ex01.java存到 D:\myjava
D:\myjava>javac Ex01.java // 編譯 D:\myjava>java Ex01 // 執行
Java programming 118
Hello.java
public class Hello { public static void main(String
args[ ]) { System.out.println("Hello"); }}
Java programming 119
Ex01: 我的第一個 java 程式/*習題 1: Hello, java!档名 : Ex01.java四環一 A, 4010N901, 李大仁*/package myjava.ex01;import java.lang.*;import java.io.Console;
Java programming 120
public class Ex01
{
public static void main (String args[])
{
System.out.println(“Hello, java!”);
}
}
(續前頁 )
Java programming 121
if (……) {
for (… ; … ; …) {
while (……) {
}
}
}
K&R (Kernighan & Ritchie)縮排
Java programming 122
java 程式的編輯 (1)
註解可使用「 /*......*/」與「 //...............」,如要變成説明文件 , 請依循 javadoc 這個工具的規則「 /**........*/」
必須以 .java 作為副档名存档 類別名稱必須與主档名相同 毎個档案可以有許多的 class, 但只能有
一個是 public
Java programming 123
java 程式的編輯 (2)
若程式中有多個 class, 則編譯時亦會産生多個 .class 档案
Java 會區分識別字的大小寫 必須以分號作為毎一行的結束
Java programming 124
Java 程式中的各項命名 (1)
識別字可使用 Unicode ,因此可以使用中文,但須注意中間不可有空白,開頭不可有數字,不可為關鍵字(Keywords)
建議 Class Name首字大寫 , Variable Name 和 Method Name 請首字小寫
Java programming 125
Java 程式中的各項命名 (2)
建議名稱若由數個英文字組成 ,第二個英文字以後首字大寫 (camelcase) ,而不要使用匈牙利命名法 (Hungarian Notation)
建議名稱必須有意義
Java programming 126
Java Programming Language Keywords
Java programming 127
class 類別宣告 class 的名稱與档案名稱必須相同 毎個档案可以有許多的 class 存在 , 但只能有一個是 public
Java programming 128
package宣告區 (1)
package宣告本程式屬於何類套件 若未指定 package則預設為目前目録 Java 中同性質的 classes 可被組織為
packages ,它們對應於档案系統的目録結構,可觀看 JDK目録中的 src.zip (例 ) java.awt.Button.java 程式碼中的
package 設定為 package java.awt
Java programming 129
package宣告區 (2)
package 名稱就像是姓氏,而 class 名稱就像是名字。 package 名稱有很多的,就好像是複姓。 不同的 package之中可以有相同的 class 名稱。 (例 ) java.io.InputStream則是複姓
java.io ,名字為 InputStream 的類別, classpath + 程式内的 package = 档
案完整路徑
Java programming 130
import敘述區 (1)
Java 的 import 與 C 的 include 意義相仿而實質不大相同, java 的 import 只是告知 VM要到哪裡尋找套件,並不會佔用記憶體
若我們想使用 java.io 這個套件中的FileReader ,需在程式中指定為 import java.io.FileReader
Java programming 131
import敘述區 (2)
若想在程式中引入 java.io 整個套件 , 可在程式中指定 import java.io.*
import 僅能引用該層 ,下一層必須另行 import; 例如 import java.io.File 只能使用 File, 不能使用位於上層的FileReader
Java programming 132
import敘述區 (3)
因為 java.lang 這個套件實在是太常用到了,幾乎沒有程式不用它的, 所以不管你有沒有寫 import java.lang; ,編譯器都會自動幫你補上
Java programming 133
import敘述區 (4)
java 的 API 中會有相同名稱的 class存在不同 package 的情形,例如 java.util 與 java.sql 都有 Date 這個 class, 這時引入時若都採取 import整個 package 的方式,則編譯會出錯,建議放棄其中之一的 import 敘述,在程式碼中直接使用完整路徑取用 class即可。
Java programming 134
java常用的套件 (1)
java.lang 預設引用的套件,包括了基本語言特性與
處理陣列與字串的函式 java.io java.util javax.swing
Java programming 135
java常用的套件 (2)
java.awt JDK1.1提出的 GUI
java.awt.event GUI 的事件驅動器
java.awt.image GUI 的 Image
Java programming 136
class, interface, enum 區 類別宣告 class 的名稱與档案名稱必須相同 毎個档案可已有許多的 class 存在 , 但只能有一個是 public
Java programming 137
キーボードからの入力 (1)
imoport java.io.console; Console 変数 = System.console(); String str = 変数 .readLine(); [注 ]: 読み込んだデータは String型 ( 文字列 )
Java programming 138
キーボードからの入力 (2)
imoport java.util.Scanner; Scanner 変数 = new Scanner
(System.in); String str = 変数 .next(); [注 ]: 読み込むデータの型に合わせたメソッドを使って読み込み。
Java programming 139
Scannerクラスを使ってデータを読み込むときのメソッド
メソッド データの型
意味
next() String 次のトークンを読み込む
nextLine()
String 次の行を読み込む
nextByte()
byte 次の byte 値を読み込む
nextShort()
short 次の short 値を読み込む。
nextInt()
int 次の int 値を読み込む
nextLong()
long 次の long 値を読み込む
nextFloat()
float 次の float 値を読み込む
nextDouble()
double
次の double 値を読み込む
Java programming 140
キーボードからの入力 (3)
import java.io.* main(String args[]) throws
IOException BufferedReader 変数 = new
BufferedReader (new InputStreamReader (System.in));
String str = 変数 .readLine(); [注 ]: 読み込んだデータは String型 ( 文字列 )
Java programming 141
文字列から数値への変換読み込むデータの型
使用メソッド
byte Byte.parseByte(変換文字列 )
shot Short.parseShort(変換文字列 )
int Integer.parseInt(変換文字列 )
long Long.parseLong(変換文字列 )
float Float.parseFloat(変換文字列 )
double Double.parseDouble(変換文字列 )
Java programming 142
演習 1: 文字列 寫一程式,可以在螢幕上顯示「 Hello,
java SE7 !」;在程式中須加入單行及多行註解,在註解中要有自己的班級、學號、姓名及程式完成日期等資訊。
Java programming 143
演習 1: 文字列 文字の表示
Java programming 144
指定敘述 (assignment)
變數 = 資料、變數或運算式 ;
Java programming 145
變數的宣告 使用變數前,必須先宣告此變數的資料
型態 變數的宣告不必在程式最前面,可以在需要時再宣告
資料型別 變數名稱 1[= 初値 1], 變數名稱 2[= 初値 2];
Java programming 146
算術 (Arithmetic)運算符號運算符號 功能敘述+ 加* 乘- 減/ 除% 餘數++ 加一-- 減一
Java programming 147
除法 (/) 型別的問題 當分子與分母皆為 double 時,除法運
算的結果為 double 。 當分子與分母其一為 double而另一為
int 時,除法運算的結果仍為 double 。 當分子與分母皆為 int 時,除法運算的
結果為 int 。若結果具有小數,則截斷小數部分,僅保留整數部分。
Java programming 148
邏輯 (Logic)運算符號運算符號 功能敘述> 大於< 小於>= 大於等於<= 小於等於== 等於!= 不等於&& logic AND
|| logic OR
! logic NOT
instanceofreference instanceof ClassName判斷 reference 所指到的物件其型態是否和 ClassName相容
Java programming 149
位元 (Bit)運算符號運算符號 功能敘述& bit AND
<< left bit shift
| bit OR
>>right bit shift with sign
^ bit XOR
~ 1 補數
>>>同>>但左邊一律補零
Java programming 150
其他運算符號運算元 功能敘述= 將右邊的値複製到左邊的變數
(type) 將右邊的數値或 reference轉換成 type 型別
+= 將右邊的數値加上左邊的數値然後指定給左邊的變數
?: 若 ? 左邊成立則做 : 左邊否則做 : 右邊, 合併兩個運算視為一個敘述(運算式 ) 表示 ( )内優先運算
.Reference.ObjectMember或ClassName.ClassName存取物件或類別成員
new 産生物件
Java programming 151
Operator Precedence (1/2)
Operators Precedencepostfix expr++ expr--
unary++expr --expr +expr -expr ~ !
multiplicative * / %additive + -shift << >> >>>relational < > <= >= instanceofequality == !=bitwise AND &
Java programming 152
Operator Precedence (2/2)
Operators Precedencebitwise exclusive OR
^
bitwise inclusive OR
|
logical AND &&logical OR ||ternary ? :
assignment= += -= *= /= %= &= ^= |= <<= >>= >>>=
Java programming 153
運算符號 (Operator) 的優先權
種類 運算符號 結合順序
bitwise and & left to right
bitwise exclusive or
^ left to right
bitwise inclusive or
| left to right
logical and && left to right
logical or || left to right
conditional ? : right to left
assignment
= += -= *= /= %= &= ^= |= <<= >>= >>>=
right to left
seperator , left to right
種類 運算符號 結合順序group (op) left to right
postfix [ ] . (params) op++ op--
right to left
prefix ++op --op +op -op ~ !
right to left
creation or casting
new (type)op
right to left
multiplicative
* / % left to right
additive + - left to right
shift << >> >>>
left to right
relational < > <= >= instanceof ==
left to right
equality == != left to right
Java programming 154
Java printf( ) method
System.out.printf(“format-string” [, arg1, arg2, … ]);
Java programming 155
Format String
% [flags] [width] [.precision] conversion-character
Java programming 156
Flags - : left-justify ( default is to right-justify ) + : output a plus ( + ) or minus ( - ) sign
for a numerical value 0 : forces numerical values to be zero-
padded ( default is blank padding ) , : comma grouping separator (for
numbers > 1000) : space will display a minus sign if the
number is negative or a space if it is positive
Java programming 157
Conversion-Characters d : decimal integer [byte, short, int, long] f : floating-point number [float, double] c : character. Capital C will uppercase the
letter s : String. Capital S will uppercase all the
letters in the string h : hashcode. A hashcode is like an address.
This is useful for printing a reference n : newline. Platform specific newline
character- use %n instead of \n for greater compatibility
Java programming 158
printf format specifiers %c character
%d decimal (integer) number (base 10)
%e exponential floating-point number
%f floating-point number%i integer (base 10)%o octal number (base 8)%s a string of characters
%u unsigned decimal (integer) number
%x number in hexadecimal (base 16)
%% print a percent sign\% print a percent sign
Java programming 159
special printf characters\a audible alert
\b backspace
\f form feed
\n newline, or linefeed
\r carriage return
\t tab
\v vertical tab
\\ backslash
Java programming 160
演習 2: データの型と変数 (1)
簡単な計算 Celsius temperature (攝氏温度 )
Fahrenheit temperature ( 華氏温度 )
℉ = ℃ + 32
5
9
Java programming 161
演習 2: データの型と変数 (1)
Java programming 162
肥満症の定義 ( 日本肥満学会 )
肥満症とは肥満に起因ないし関連する健康障害を合併するか、その合併が予測される場合で、医学的に減量を必要とする病態をいい、疾患単位として取り扱う。
http://www2.health.ne.jp/theme/index.html
Java programming 163
肥満症診断基準 ( 日本肥満学会 )
BMI≧25 かつ、健康障害があるまたは内臓脂肪が蓄積している。
BMI≧25
肥満 非肥満
肥満症
あり なし
A:肥満による健康障害
またはB:内臓脂肪蓄積
(*詳細は右図を参照)
スクリーニング検査ウエスト周囲径計測男性: 85cm ≦女性: 90cm ≦(上半身肥満)
腹部 CT検査内臓脂肪面積 100 cm2 ≦
(内臓脂肪型肥満)
内臓脂肪蓄積
* B:内臓脂肪蓄積の判定基準
肥満症
●Ⅱ型糖尿病・耐糖能異常
●脂質代謝異常
●高血圧
●高尿酸血症・痛風
●冠動脈疾患:心筋梗塞・狭心症
●脳梗塞:脳血栓症・一過性虚血発作
●睡眠時無呼吸症候群: Pickwick症候群
●脂肪肝
●整形外科的疾患:変形性関節症・腰椎症
●月経異常
A:肥満による健康障害
http://www2.health.ne.jp/theme/index.html
Java programming 164
肥満症は内臓脂肪蓄積が問題http://www2.health.ne.jp/theme/index.html
Java programming 165
成年人之血壓分期 (18才以上之成人 )
血壓分類收縮壓
(Systolic Pressure, mmHg)
舒張壓(Diastolic Pressure, mmHg)
理想血壓 < 120 and < 80
正常血壓 < 130 and < 85
正常但偏高 130-139 or 85-89
高血壓
第一期 140-159 or 90-99
第二期 160-179 or 100-109
第三期 >=180 or >=110
1999 年 2 月世界衞生組織公佈 "高血壓定義與分類 "
Java programming 166
予防と治療(食事療法)
摂取エネルギーの設定 栄養素の配分 食習慣の改善から成る
(出典:肥満・肥満症の指導マニュアル 日本肥満学会編集委員会)
http://www2.health.ne.jp/theme/index.html
Java programming 167
予防と治療(運動療法) どんな運動がいい?
歩行、ジョギング、ラジオ体操、水泳などの全身を使う有酸素運動。また、 1日 1 万歩以上の歩行も!
どのくらいの運動がいいの? トレーニングは週に 3回以上行う必要がある。軽いも
のなら毎日から 1日おきとし、また休日などを利用して十分な時間をとるのがよいとされている。
運動の強度については、いきなり強い運動をしないこと。軽い運動から始めて徐々にならしていこう。
(出典:肥満・肥満症の指導マニュアル 日本肥満学会編集委員会)
http://www2.health.ne.jp/theme/index.html
(jogging)
(training)
Java programming 16898.5.14. 中國時報 A8 版
Java programming 16998.5.14. 中國時報 A8 版
Java programming 170
高血壓患者應注意事項: 充分的睡眠與休息,避免過度勞累與精神緊張。 適度輕鬆的運動,維持理想的體重。 保持大便通暢,預防便秘。 避免用太冷太熱的水洗澡或浸浴。 選擇新鮮的食物,避免醃製及加工食品,如鹹菜、蔭瓜、醬瓜罐頭等。
忌食含鈉量極高的食品及蔬菜,如麵線、蜜餞、餅干、芹菜、胡蘿蔔、海帶、紫菜、發芽蠶豆等不要大量食用。
避免抽菸、喝酒;節制茶葉、咖啡、可樂等含咖啡因的飲料。
遠離高血壓 健康生活六守則 減鹽 減重
維持 BMI 18.5-24 的健康體位,男生腰圍不超過 90公分,女生腰圍不超過 80公分
戒菸 運動
國民健康局 Java programming 171
遠離高血壓 健康生活六守則 節制飲酒
每天男性不宜超過 2 個酒精當量( drinks/day,每個酒精當量為 15公克,約相當於啤酒 360毫升,葡萄酒 120~150毫升,白蘭地等烈酒 30~40毫升),女性不宜超過 1 個酒精當量
量血壓 血壓超過 140/ 90 mmHg就應該諮詢醫
師國民健康局 Java programming 172
Java programming 173
BMI=体重 kg/(身長m) 2 ; 標準体重 kg =22×(身長m) 2 http://www.uemura-clinic.com/dmlecture/bmi.htm
Java programming 174
BMI 肥満度の判定
18.5 未満 やせ
18.5 以上~ 25 未満 適正
25 以上~ 30 未満 肥満( 1 度)
30 以上~ 35 未満 肥満( 2 度)
35 以上~ 40 未満 肥満( 3 度)
40 以上 肥満( 4 度)日本肥満学会 (2000)
Java programming 175
演習 3: データの型と変数 (2)
変数の使い方 BMI = [体重 (kg )] ÷ [身長 (m)]2
標準体重 (kg ) = 22×(身長m) 2
参考) BMI ( Body Mass Index :体格指数)
Java programming 176
演習 3: データの型と変数 (2)
Java programming 177
演習 4: 算術演算子 整數除法 1 呎 = 12吋 1 吋 = 2.54公分
Java programming 178
Math クラス基本的な算術メソッド
戻り型 メソッド 説明static int static long static float static double
abs(int) abs(long) abs(float) abs(double)
引数に指定された値のフォーマット処理を行います。
static double
ceil(double)引数に与えられた値以上で、もっとも小さな整数値を double型で返します。
static double
floor(double)
引数に与えられた値以下で、もっとも大きな整数値を double型で返します。
static double
rint(double)引数に与えられた値で、その値にもっとも近い整数値を double型で返します。
static int static long
round(float) round(double)
引数に与えられた値で、その値にもっとも近い int型、もしくは long型を返します。
Java programming 179
Math クラス指数関数メソッド
戻り型 メソッド 説明
static double
exp(double)自然対数の底 e を引数の値で累乗した値を返します。
static double
log(double)引数で指定された値の自然対数値を返します。
static double
pow(double, double)
第 1 引数を第 2 引数で累乗した値を返します。
static double
sqrt(double)引数で指定された値の平方根を返します。
Java programming 180
java.lang.Math – round(x)
戻り型 メソッド 説 明
static long
round(double a)
Returns the closest long to the argument.
static intround(float a)
Returns the closest int to the argument.
Java programming 181
演習 4: 算術演算子
Java programming 182
分支選擇敘述句 (1)
單向 if (expression) statement;
雙向 if (expression) statement_true; else statement_false;
Java programming 183
分支選擇敘述句 (2)
多向 switch (expression)
{ case value_1: [statement_1;] [break;]
case value_2: [statement_2;] [break;]
...
default: statement;
[break;]
}
Java programming 184
單向條件敘述 if (條件式 ) 敘述 ; if (條件式 )
敘述 ; if (條件式 ) {
敘述區段 ;
}
Java programming 185
雙向條件敘述 if (條件式 )
敘述 A;
else
敘述 B;
if (條件式 ) {
敘述區段 A;
}
else {
敘述區段 B;
}
Java programming 186
條件運算子 變數 = (條件式 ) ? Y 結果 : N 結果 ; [例 ]
int n1 = -20, n2 = 5;
String compare;
compare = (n1 >= n2) ? “ 大於等於” : “小於” ;
Java programming 187
巣状條件敘述 if ( 主條件 ) {
if (次條件 1) {
敘述區段 A;
}
else {
敘述區段 B;
}
}
else {
if (次條件 2) {
敘述區段 C;
}
else {
敘述區段 D;
}
}
Java programming 188
演習 5: if else 文 If ステートメント
If ... If ... Else ...
台湾自來水公司水費採累進計価方式: 應繳水費=基本月費 (34.0元 )
+ [毎度單價×實用水量 -累進差額 ]
總水費之計收至元為止 (角以下四捨五入 )
Java programming 189
水費速算表
段 別 第一段 第二段 第三段 第四段
毎度單價 7.35 9.45 11.55 12.075
毎月抄表
實用度數(立方公尺 )
1~10度
11~30度
31~50度 51度以上
累進差額(元 )
0 21 84 110.25
(1). 用水費= (毎度單價 × 實用水量 - 累進差額 )(2). 總水費之計收至元為止,角以下四捨五入。
台湾自來水公司
Java programming 190
表燈電價表分 類 夏月 非夏月
非營業用
110度以下部分 2.100 2.100111~ 330度部分
2.730 2.415
331~ 500度部分
3.3602.730
501度以上部分 3.465營業用 3.465 2.730
單位:元/度
[註 ]: 6 月 1 日~ 9 月 30 日依夏月計價
Java programming 191
演習 5: if else 文
Java programming 192
演習 6: switch 文 Select Case ステートメント、例外処理 (VB6 例 ) Case is <= 5 Case 6, 7, 8 Case 9 To 14 Case is >= 15 Case Else
Java programming 193
多重選擇 switch ( 變數或運算
式 ) { case 結果 1: 敘述區段 1; break; case 結果 2: 敘述區段 2; break; :
case 結果 n: 敘述區段 n; break; default: 敘述區段
default; [break;]}
只能是 : char, byte, short, int 或 enum列舉型別
只能是 : 常數或是由常數所構成的運算式
Java programming 194
演習 6: switch 文 試設計一程式,可以輸入一學生某科之考試
成績 (整數資料型別 ) ,並依下示加分處理原則將加分後之新成績 (注意:取整數,且滿分仍以 100 分為限 )顯示在螢幕上。
加分處理原則: 0 - 49 分,加 15% 50 - 79 分,加 10% 80 - 100 分,加 5%
Java programming 195
演習 6: switch 文
Java programming 196
迴圈敘述句 (1)
計次 : for for( init_Statement ; condition ;
incre_statement ) statement
Java programming 197
迴圈敘述句 (2)
前測 : while while( expression ) statement
Java programming 198
迴圈敘述句 (3)
後測 : do while do statement while( expression ) ;
Java programming 199
跳耀敘述句 (1)
label 多與 break或 continue 合用 ,可跳出多層迴圈 (multi-level loop)
break 針對 for, while, do while, switch迴圈作跳離
Java programming 200
跳耀敘述句 (2)
continue 針對 for, while, do while 本次迴圈略過其後的敘述句 , 然後回到重複執行的條件處判斷是否繼續進入迴圈
return 中斷目前程序的執行 , 跳回上一層的呼叫
點 , 但不可中斷有回傳型態的函數
Java programming 201
迴圈敘述 (for loop)
for ( 初値 ; 條件式 ; 增値運算式 ) 敘述 ;
for ( 初値 ; 條件式 ; 增値運算式 ) {
敘述區段 ;
}
Java programming 202
迴圈敘述 (while loop)
< 前測試迴圈> while (條件式 ) {
敘述區段 ;
}
< 後測試迴圈> do {
敘述區段 ;
} while (條件式 );
Java programming 203
迴圈敘述 sum = 1 + 2 + 3 + … + 100 sum = 2 + 4 + 6 + … + 100 sum = 1 + 1/2 + 1/3 + … + 1/20 sum = 1 - 1/2 + 1/3 ± … ±1/20
Java programming 204
円周率を求めるプログラム 円周率とは
円周率とは πで表わされる数学定義のひとつで、 正円の直径に対する円周の比のことである。
1400年頃,インドのマーダヴァが無限級数を得る。
Java programming 205
円周率を求めるプログラム 三角関数のテーラー展開による導出
直角二等辺三角形における tanθの値は 1 である。 θは π/4 なので、 tan-1(1) を計算することで π/4 を算出することができる。
ここで、 tan-1(1) をテーラー展開すると以下のようになる。 tan-1(1) = 1 – 1/3 + 1/5 - 1/7 + 1/9 +/- … この式で求めた値を 4 倍することで円周率を求めることができる。
Java programming 206
演習 7: for 文
Java programming 207
演習 8: while 文 假設有一條繩子長 1,000公尺,毎天剪去一半的長度,請設計一程式,可以計算出需花費幾天的時間,繩子的長度將不足 3 公尺?
Java programming 208
演習 8: while 文
演習 8-1: while 文
Java programming 209
Java programming 210
Randomize Statement and
the Rnd Function
The Randomize statement initializes Visual Basic’s random-number generator.
The Rnd function generates random decimal numbers within the 0 to 1 range, including 0 but not including 1.
Java programming 211
Rnd Function
To generate random decimal numbers in a range other than 0 to 1:
(upperbound - lowerbound + 1) * Rnd + lowerbound
To generate random integers:Int((upperbound - lowerbound + 1) * Rnd +
lowerbound)
Java programming 212
乱数 (VB6)
– Rnd 0以上1未満の単精度浮動小数点型の数値を返すという命令
Int(( 最大値 - 最小値 + 1) * Rnd + 最小値 )
– Randomize Timer VBの乱数ジェネレータを初期化 乱数の出現パターンを変える
Java programming 213
乱数函式 - Math.random()
import java.lang.Math; Math.random()
回傳一個 0.0 - 1.0( 不含 ) 的倍精度(double)浮点数
選取一段範圍之整數 : (int) (Math.random() * ( 最大値 - 最小値 + 1) + 最小値 )
Java programming 214
public class Example {
public static void main(String[] args) {
int randomNumber = (int) (Math.random() * 10 + 1);
System.out.println(randomNumber);
}
}
Math クラスランダムメソッド
戻り型 メソッド 説明
static double random( )0.0 以上 1.0未満の値の中からランダムな値を算出します。
【例 】 random メソッドを使用し、 1から 10 までの間でランダムな数値を算出します。
Java programming 215
乱数 ( 物件 ) の生成 Random クラスを用いると、乱数を
生成することができる。 import java.util.Random;
Random r = new Random();
r.nextInt(n) //取得 0 - (n-1) 的整數
r.nextDouble()
//取得 0.0 – 1.0( 未滿 ) 的倍精度浮點數
Java programming 216
指定亂數範圍 private int randomInRange(int min, int
max) { return min + random.nextInt(max –
min + 1); }
int lotto; lotto = randomInRange(1, 49);
Java programming 217
モンテカルロ法による π 計算
π = 4 × 円内部の点の数 ÷ 全ての点の数
点の数が多いほど、精確な値になる。
Java programming 218
モンテカルロ法による円周率の計算 モンテカルロ法とは確率には直接関係ない問題を確率も用いて解くという方法です。
円内にあった点の数÷打った全数
= (( L /2 ) 2×π) / L 2
= π/4
Java programming 219
0 1
1
x
y四分の一円内にあった点の数÷正方形内打った全数 = (1×1×π/4) / (1×1) = π/4
if (x*x + y*y <= 1) hit = hit + 1;
モンテカルロ法による円周率の計算
*(x,y)
Java programming 220
Monte Carlo method
Monte Carlo method applied to approximating the value of π.
After placing 30000 random points, the estimate for π is within 0.07% of the actual value.
Java programming 221
演習 9: モンテカルロ法
Java programming 222
陣列 (Array)
Java programming 223
陣列 (Array)
陣列是一種特殊的類別 (class)必須使用 new才能建立實體
宣告方式可以有 2 種 型態 [ ] 變數 ;
例如 : int[ ] arr1, int[ ][ ][ ] arr3;
型態 變數 [ ]; 例如 : int arr1[ ];
Java programming 224
Declaring a Reference to Refer to an Array
宣告陣列主要分成兩部分:宣告陣列的 type 以及陣列參考 (reference) 的name 。其格式如下:
type[ ] name; [例 ]:
int[ ] intArray; float[ ] floatArray;
Java programming 225
Creating an Array
Java 陣列是使用 new 指令所産生,其格式如下:
new elementType[arrayLength]; [例 ]:
int[ ] intArr; intArr = new int[100]; double[ ] doubleArr = new double[200];
Java programming 226
Array Initializers
産生一陣列並設定其陣列元素的初値。 所産生陣列的長度,等於 { } 間初値的
數目。 int[ ] anArray = {0,10,20,30,40}; //Create and initialize an array called
anArray //The length of anArray is “5”
Java programming 227
Accessing an Array Element
陣列參考可以 [ ] 算符配合索引値(index) 來存取個別陣列元素。
[例 ]: intArray[3] = 10; float val = floatArray[3];
陣列之長度,可由 arrayReference.length 方法求得。
Java programming 228
Sorting/Searching an Array
bubble sort binary search on a sorted array
Java programming 229
Multiple-Subscripted Arrays
Java 可使用以下方式産生多維陣列,其中 x 、 y 均可為變數,或整數。 int[ ][ ] a; a = new int[x][y];
亦可使用 Array Initializers ,其中毎一列之構成元素長度可以不同。 int[ ][ ] b = { { 1, 2}, { 3, 4, 5}};
Java programming 230
公益彩券 2002 年 1 月起 , 北銀發行公益彩券
(小樂透 ), 由 1 至 42 的號碼中 , 任選6 碼 ; 選號不得重複。
2004 年 1 月起 , 北銀開始發行大樂透 , 由 1 至 49 的號碼中 , 任選 6 碼(6/49樂合彩 ); 選號不得重複。
Java programming 231
中獎機率 小樂透可能出現的號碼組合共有:
大樂透可能出現的號碼組合共有:
7 8 6,2 4 5,5!6
3 7*3 8*3 9*4 0*4 1*4 2
0 6
4 2
8 1 6,9 8 3,1 3!6
4 4*4 5*4 6*4 7*4 8*4 9
0 6
4 9
Java programming 232
大樂透 (6/49樂合彩 )
大樂透是使用電腦連線接受投注的樂透型機率遊戲
投注購券者須從 01 - 49 的號碼中任意選出 6 個不重覆號碼以作為投注號碼
於公益彩券開獎時,開獎執行單位便會由開獎機中之號碼範圍内隨機開出六個號碼及一個特別號。
Java programming 233
獎項 中獎方式 簽中機率 頭獎 與當期六個中獎號碼完全相同者
〈順序不限〉1/1398381
6.0
貳獎 對中當期中獎號碼之其中任五碼+特別號
1/2330636.0
参獎 對中當期中獎號碼之其中任五碼 1/55491.3
肆獎 對中當期中獎號碼之其中任四碼+特別號
1/22196.5
伍獎 對中當期中獎號碼之其中任四碼 1/1082.8
陸獎 對中當期中獎號碼之其中任三碼+特別號
1/812.1
普獎 對中當期中獎號碼之其中任三碼 1/60.9
Java programming 234④ ‧ ‧ ‧ 以此類推 ‧ ‧ ‧
出處:上奇 , EB631, p.6-36
Java programming 235
不重複的随機乱数 (Java2)
class BBKMath { void GenRnd( int[] x, int min, int max, int rnd_no) { int tot_no, rem_no, t_no; int i, j; tot_no = max - min + 1; int[] t = new int[tot_no]; for(i = 0; i < tot_no; i++) { t[i] = min + i; } rem_no = tot_no; for( i = 0; i < rnd_no; i++) { t_no = (int)Math.floor(Math.random() * rem_no); x[i] = t[t_no]; for(j = t_no; j < (rem_no - 1); j++) { t[j] = t[j+1]; } rem_no--; } }} 出處:上奇 , EB631, p.6-37
Java programming 236
不重複的随機乱数 (Java2)
出處:旗標 , FS720, p.17-32~33
for(int j=1;j<=i;j++) { //産生指定組數號碼的迴圈 int[] lotto= new int[49]; // 建立樂透號碼陣列 for (int k=0;k<49;k++) // 將陣列元素値設為 1 ~ 49 lotto[k]=k+1; int count=0; // 用來記綠已産生幾個號碼 do { int guess = (int)(Math.random()*49); if(lotto[guess]==0) // 若號碼所指的元素値為 0, 表示此數字已 continue; // 出現過 , 就重新執行迴圈 , 産生另一亂數 else { System.out.print(lotto[guess]+“\t"); lotto[guess]=0; // 將號碼所指的元素値設為 0, 以免重複用到 count++; } } while (count<6); // 産生 6 個號碼才停止}
Java programming 237
不重複的随機乱数 (Java2)
出處:旗標 , FS720, p.17-60~61
import java.util.*;public class ListLotto { public static void main(String args[]) { System.out.println("樂透電腦選號── Java/ArrayList 版 "); ArrayList num = new ArrayList(); for (int i=1;i<50;i++) num.add(new Integer(i)); // 初始化集合元素値 Collections.shuffle(num); // 將集合『洗牌 』 System.out.println(num.subList(1,7)); } // 取集合中前 6 個元素的子集合}
Java programming 238
不重複的随機乱数 (VB2008)Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button1.Click Dim guess, A(5) As Integer Randomize() For index As Integer = 0 To 5 While A(index) = 0 guess = CInt(Int(Rnd() * 59) + 1) If Array.IndexOf(A, guess) = -1 Then A(index) = guess End If End While Next TextBox1.Text = A(0) TextBox2.Text = A(1) TextBox3.Text = A(2) TextBox4.Text = A(3) TextBox5.Text = A(4) TextBox6.Text = A(5) End SubEnd Class
出處:上奇 , HB0902, p.11-28
Java programming 239
不重複的随機乱数 (VB6.0)
Dim A(6) as IntegerDim i, j, k, y as IntegerDim temp, check as Integer
Randomize Timeri = 0While i <= 6 check = 0 A(i) = Int(49*Rnd() + 1) For y = 0 to i – 1 If A(i) = A(y) Then check = -1 End if Next y If check = 0 Then i = i + 1 End ifWend
Java programming 240
重複なしの乱数配列生成 with VB.NET
Function GenerateArray(ByVal size As Integer) _ As Integer()
' 乱数生成 Dim arr(size - 1) As Integer Dim i As Integer For i = 0 To size - 1 arr(i) = i Next i
blog.craft-works.jp/uru/id/vb1
Java programming 241
'ランダムに並び替え Dim r As Random = New Random() Dim tmp As Integer For i = 0 To size - 1 Dim src As Integer = r.Next(i, size) tmp = arr(src) arr(src) = arr(i) arr(i) = tmp Next i Return arr
End Function
Java programming 242
乱数の作成 (1)
Math クラスの random() メソッド 0~9の乱数を作成する例です。
クラス Mathメソッド random()戻り値 0~1未満の値
public class Ran{ public static void main(String[] args){ int ran = (int)(Math.random()*10); System.out.println(ran); } }
Java programming 243
乱数の作成 (2)
Random クラスの nextInt ()メソッド
0~9の乱数を作成する例です。
クラス Randomメソッド nextInt()
引数 乱数の限界値
戻り値 0~引数 -1 の値
import java.util.Random; public class Ran{ public static void main(String[] args){ Random rnd = new Random(); int ran = rnd.nextInt(10); System.out.println(ran); } }
Java programming 244
import java.util.Random;public class Test{ public static void main(String args[]) { Random random = new Random(); int number = 0;; int array[] = new int[6]; boolean b; for(int i=0; i<6; i++) { b = true; while(b) { b = false; number = random.nextInt(49)+1; for(int j=0; j<array.length; j++) { if(array[j] == number) { b = true; } } } array[i] = number; System.out.printf("array[%d]=%d\n", i, number); } }}
Java programming 245
データの並び替え (例 ) int[ ] data = {10, 4, 55, 20, 15, 12}; for (int i = 0; i < data.length - 1; i++) { for (int j = i + 1; j < data.length; j++) { if (data[i] > data[j]) { int tmp = data[i]; data[i] = data[j]; data[j] = tmp; } } }
排序 (sorting) – 基本排序法
氣泡排序法 (bubble sort)
選擇排序法 (selection sort)
插入排序法 (insertion sort)
謝耳排序法 (Shell sort)
Java programming 246
排序 (sorting) – 高等排序法
快速排序法 (quick sort)
合併排序法 (merge sort)
堆積排序法 (heap sort)
基數排序法 (radix sort)
Java programming 247
Java programming 248
Bubble sort method public class BubbleSort {
public static void main(String args[]) {
short source[] = {
540, 94, 458, 47, 64};
short exchange = 0;
for (short pass = 1;
pass < source.length; pass++) {
for (short i = 0; i < source.length - 1;
i++) {
if (source[i] > source[i + 1]) {
exchange = source[i];
source[i] = source[i + 1];
source[i + 1] = exchange;
} // if end
} //for end
} //for end
for (short i = 0;
i < source.length; i++) {
System.out.print(source[i] + " ");
}
} //main method end
} //class end
Java programming 249
Sorting Array in Javaimport java.util.Arrays; public class HowToSortAnArray { public static void main(String[ ] args) { //Array of Integers int[ ] myIntArray = new int[ ]{20,100,69,4}; //SORTS ARRAY FROM SMALLEST TO LARGEST INT Arrays.sort(myIntArray); //for loop to print Array values to console for (int a = 0; a < myIntArray.length; a++) { System.out.println(myIntArray[a]); } } }
Java programming 250
演習 10: 配列‧乱数の利用
Java programming 251
演習 11: 二重ループ (1)
***************
*********
***********
Java programming 252
演習 11: 二重ループ (2)
****
************
*********
****
*********
*********
********
Java programming 253
演習 11: 二重ループ (3)
112123123412345
12312112123
112123121
Java programming 254
演習 11: 二重ループ (4)
1121
123211234321
123454321
1121
12321121
1
32123212
1212
32123
Java programming 255
演習 11: 二重ループ ( 出力_1)
Java programming 256
演習 11: 二重ループ ( 出力_2)
Java programming 257
方法 (method)
[public | private | protected] static [ 傳回値資料型別 | void] 方法名稱 ([ 引数串列 ]) [throws 例外名稱 ]
{
敘述區段 ;
[return 運算式 ;]
}
Java programming 258
呼叫 java 方法 函式無回傳値 :
[物件名稱 ]. 方法名稱 ([ 引数串列 ]);
函式有回傳値 :
變數 = [ 物件名稱 ]. 方法名稱 ([ 引数串列 ]);
Java programming 259
メソッド定義
[ 修飾子 ] [戻り値型 ] メソッド名 (<引数リスト >)
{
ステートメント
}
Java programming 260
メソッド 戻り値型 メソッド名 ( メソッド引数リ
スト ) { 処理 return 戻り値 ; }
Java programming 261
java 方法的引數傳遞 傳値呼叫 (call by value) 參考呼叫 (call by reference)
[註 ]: All parameters to methods in Java
are
pass-by-value.
Java programming 262
Defining methods (例 )
public double calculateAnswer(double
wingSpan, int numberOfEngines,
double length, double grossTons)
{
//do the calculation here
}
Java programming 263
method declaration
All parameters to methods in Java are pass-by-value.
Modifiers—such as public, private, and others you will learn about later.
The return type—the data type of the value returned by the method, or void if the method does not return a value.
Java programming 264
method definition (1) class MyClass { ... public ReturnType methodName(Type1 param1, Type2 param2 ) throws ExceptionName { ReturnType retType; ... return retType; } ... }
Java programming 265
method definition (2)
private void methodName( String param1, String param2 ) { ... return; }
Java programming 266
Create a simple Java method public class Hi { public static void main(String[] args) { sayHi(); System.out.println(“The second Hi!!”); } public static void sayHi() { System.out.println(“The first Hi!”); }}
Java programming 267
演習1 2: メソッド Functionプロシージャ BMI = bmi(height, weight)
BMI = [体重 (kg )] ÷ [身長 (m)]2
標準体重 = std_weight(height) 標準体重 = 22×(身長m) 2
Java programming 268
演習1 2: メソッド
Java programming 269
method
modifier returnValueType methodName(list of
parameters) { // Method body; }
Java programming 270
Recursive method
Method that invokes itself. The arguments passed to the
recursion take us closer to the solution with each call.
Java programming 271
recursive algorithms
if (the stopping case is reached){ solve it}else{ reduce the problem using recursion}
Java programming 272
Recursive method (例 )public class RecursiveFactorial{ public static void main( String [] args ) { // compute factorial of 7 and output it System.out.println( “Factorial ( 7 ) is “ + factorial( 7 ) ); } public static int factorial( int n ) { if ( n <= 0 ) // base case return 1; else // general case return ( n * factorial ( n - 1 ) ); }}
Java programming 273
寫一函數 , 輸入參數 (int n)傳回 1+2+3+ ... +n 的總合 public class Example {
public static void main(String[] argv) {
System.out.println(sum(100));
}
public static int sum(int n) {
int total = 0;
for (int i = 1; i <= n; i++)
total += i;
return total;
}
}
Java programming 274
遞迴 (recursion)範例求 1+2+3+...+n public class Example {
public static void main(String[] argv) {
System.out.println(sum(100));
}
public static int sum(int n) {
if (n <= 1)
return 1;
else
return (n + sum(n - 1));
}
}
搜尋 (searching)
循序搜尋法 (sequential search)
二元搜尋法 (binary search)
内插搜尋法 (interpolation search)
費氏搜尋法 (Fibonacci search)
Java programming 275
Java programming 276
Recursive Binary Searchpublic static int search (int[] a, int first, int size, int target) { int middle; if (size <= 0) return -1; else { middle = first + size/2; if (target == a[middle]) return middle; else if (target < a[middle]) // the target is less than a[middle], so search before the middle return search(a, first, size/2, target); else // the target must be greater than a[middle], so search after the middle
return search(a, middle+1, (size-1)/2, target); } }
Java programming 277
演習1 3: 再帰呼び出し
Java programming 278
ご清聴ありがとう御座居ました。
今後とも、よろしくお願いいたします。
メールはいつでもかまいません。
崑山科技大学 環境工学科
助教授 澄原日先 [email protected]