279
Programming (SE7) 環環環環環 環環環 [email protected] u.tw

Programming (SE7)

  • Upload
    beate

  • View
    84

  • Download
    0

Embed Size (px)

DESCRIPTION

Programming (SE7). 環境工程系 丁文輝 [email protected]. 環境工程系電腦課程 ( 規画案 ). 計算機概論 (BCC) 計算機程式 (Programming) 計算機圖學 (CG) 資料庫管理系統 (DBMS) 數値分析 (NA) 地理資訊系統 (GIS) 環工電腦應用. 逢甲大學水利工程學系工學士 中央大學 ( 教育部委訓 ) 大專資訊師資班 成功大學環境工程學系工學碩士 成功大學環境工程學系博士候選人. 自己紹介 - 澄原日先 ( すみはら ひさき ). 台中市坤財營造廠工地主任 - PowerPoint PPT Presentation

Citation preview

Page 1: Programming  (SE7)

Programming (SE7)

環境工程系 丁文輝[email protected]

Page 2: Programming  (SE7)

Java programming 2

環境工程系電腦課程 ( 規画案 )

計算機概論 (BCC) 計算機程式 (Programming) 計算機圖學 (CG) 資料庫管理系統 (DBMS) 數値分析 (NA) 地理資訊系統 (GIS) 環工電腦應用

Page 3: Programming  (SE7)

Java programming 3

逢甲大學水利工程學系工學士 中央大學 ( 教育部委訓 ) 大專資訊師資班 成功大學環境工程學系工學碩士 成功大學環境工程學系博士候選人

自己紹介 - 澄原日先 ( すみはら ひさき )

台中市坤財營造廠工地主任 台中市政府清潔管理所垃圾處理場場長 崑山工商專校環境工程科講師兼科主任 崑山科技大學環境工程學系助理教授

Page 4: Programming  (SE7)

Java programming 4

電腦相關課程研習 ( すみはら )

計算機概論 計算機程式

FORTRAN, BASIC, PASCAL, JAVA

組合語言 8086/8088, 80286

資料結構 系統分析 計算機圖學

資料庫管理系統 專業應用軟體

PEⅡ, dBASEⅢ+, Lotus 123, Office, ACAD, SAS/SPSS, Sigma Plot, GIS

數値分析 電腦應用

高等結構 , 海洋放流

Page 5: Programming  (SE7)

Java programming 5

教科書‧参考書 JAVA2 程式設計從零開始 ( 適用 JDK7)

何嘉益 ( 等 ) ,上奇 (2012) Java 初學指引 – 使用 SE7

陳錦輝,博碩 (2011) 挑戰 Java 程式語言 蔡文輝 ( 等 ), 全華 (2006) JAVA SE6 程式設計基礎與實習手冊 李廷圭,松崗 (2009)

Page 6: Programming  (SE7)

Java テキスト

東海大学 ( 日本 ), 坂田圭司 http://kgclass.jp/text/java

勤益科大 (JAVA Note), 朱孝國 http://irw.ncut.edu.tw/peterju/java.html

崑山科大 ( 網路大學 ), 丁文輝 http://elearning.ksu.edu.tw

Java programming 6

Page 7: Programming  (SE7)

Java programming 7

注意事項 コンピュータ室は飲食禁止。 紙節約のため、デジタルファイルを請求

して下さい。 パワーポイントを利用しない授業の方が

多かったので、教科書で、よく復習して下さい。

再試験は行いません。 4 年生は特に心して望むように!

Page 8: Programming  (SE7)

Java programming 8

成績評価 欠席が3分の1を超えた場合、単位の取得

は難しい。 評価はおおよそ出席( 40%) 、宿題

( 20%) 、最終試験( 40%) などを通じて総合的に判定する。

ちなみに先学期 (101_2) 「 java プログラミング」において、受講者 100 人中、不可は 26 人,約 26 %。

( 四環一 A 20%, 四環一 B 31%)

Page 9: Programming  (SE7)

Java programming 9

オフィスアワー 月曜日( 10:00-11:30 ) 火曜日( 10:00-11:30 ) 金曜日( 10:00-11:30 ) (特に授業に関する)質問,相談に

こたえます 設計 3 棟 4F(D3402) メールはいつでもかまいません

ting @ mail.ksu.edu.tw

Page 10: Programming  (SE7)

Java programming 10

計算機程式 (Java SE7, 2013 春 )

Introduction Data type Input/Output Assignment Selection

Iteration Array Method

Page 11: Programming  (SE7)

Java programming 11

プログラミング基礎演習

Console Assignment Expression Divisor If / If-else Switch-case

For loop While loop Random Bubble sort Method Recursive

Page 12: Programming  (SE7)

Java programming 12

プログラミング言語の構成

文字

手続きと関数

モジュール

プログラム

英数字、特殊記号等。

名前、データ、演算子、予約語( for, ifなど)。

演算子と非演算子からなる。 a*b 、 a>b など。

処理の最小単位。「 a=b+c; 」など。

Page 13: Programming  (SE7)

Java programming 13

プログラミング言語発展の歴史

機械語アセンブリ言語

FORTRANCOBOL

ALGOL

PL/1

ALGOL68

PASCALC 言語

Ada

C++

Object PASCAL

Delphi

Java

C++Builder

BASIC

言語以前

Lisp Prolo

g Smalltalk

時間

参考: 河村一樹、斐品正照

低水準言語

高水準言語

超高水準言語

オブジェクト指向言語

ビジュアル開発環境

Page 14: Programming  (SE7)

Java programming 14

FORTRAN

BASIC

Pascal

Java (2011)

Page 15: Programming  (SE7)

Java programming 15

Page 16: Programming  (SE7)

Java programming 16

Page 17: Programming  (SE7)

Java programming 17

プログラミング言語

Page 18: Programming  (SE7)

Java programming 18

Page 19: Programming  (SE7)

Java programming 19

代表的なオブジェクト指向言語(1)

SmallTalk 最初のオブジェクト指向言語

C++ C 言語の拡張言語 多重継承

Page 20: Programming  (SE7)

Java programming 20

代表的なオブジェクト指向言語(2)

Java C 言語をベースにインターネットに適

した言語として開発 Unix, Windows など様々なプラット

フォーム上でプログラムが動作 (Write Once, Run Anywhere)

単一継承

Page 21: Programming  (SE7)

Java programming 21

代表的なオブジェクト指向言語(3)

Ruby オブジェクト指向スクリプト言語

Visual Basic, Visual C++ Microsoft のアプリケーション開発言語

C# Microsoft の Java like なアプリケーショ

ン開発言語

Page 22: Programming  (SE7)

Java programming 22

物件導向程式設計 物件 (object)

屬性 (property) 方法 (method)

類別 (class) 物件變數 (variable) 物件實體 (instance)

Page 23: Programming  (SE7)

Java programming 23

物件導向程式設計的特點 (1)

封裝 (encapsulation) 將資料 ( 屬性 ) 與操作此資料的函數 ( 方

法 ) 包在一起的特性 繼承 (inheritance)

承接所有父類別 (Parent Class) 所有屬性方法,並可以加以改造的特性

Page 24: Programming  (SE7)

Java programming 24

物件導向程式設計的特點 (2)

多型 (polymophism) 呼叫相同的函式,卻會出現不同的行為的

現象 過載 (Overloading): 將一個函數名稱,賦予

一種以上的函數實體,以便依據當時情況,擇一執行

覆寫 (Overriding): 將繼承下來的方法,以同名函數蓋掉的特色

Page 25: Programming  (SE7)

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)

Page 26: Programming  (SE7)

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)

Page 27: Programming  (SE7)

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).

Page 28: Programming  (SE7)

Java programming 28

Java Platform Edition

Page 29: Programming  (SE7)

Java programming 29

JAVA國際認證

Page 30: Programming  (SE7)

Java programming 30

Development Environments

Sun Java Development Kit (JDK) Sun NetBeans IBM Eclipse, GNU Eclipse Borland JBuilder MetroWerks CodeWarrior BlueJ jGRASP

Page 31: Programming  (SE7)

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)

Page 32: Programming  (SE7)

Java programming 32

JDK (Java Development Kit)

Page 33: Programming  (SE7)

Java programming 33

JDK (Java Development Kit)

Page 34: Programming  (SE7)

Java programming 34

JDK (Java Development Kit)

javac(.exe) Java 的編譯器 , 可將 .java 原始档編譯

為 .class 類別档。 java(.exe)

JVM 虚擬機器的執行档 , 可用來執行 Java Application 的 Bytecode(.class 類別档 ) 。

Page 35: Programming  (SE7)

Java programming 35

Java Virtual Machine

Javaソースコード

Javaバイトコード

Javaコンパイル( javac )

x86アーキテクチャ( JavaVM )

MIPSアーキテクチャ( JavaVM )

SPARCアーキテクチャ( JavaVM )

……

Page 36: Programming  (SE7)

Java programming 36

Java Virtual Machine

Page 37: Programming  (SE7)

Java programming 37

Java Virtual Machine

Page 38: Programming  (SE7)

Java programming 38

Garbage Collection (1)

Garbage Collection 機制可以自動偵測未被任何參考參照到的陣列或物件,「必要時」會將其所佔記憶體空間釋放。

[例 ]:

int[ ] a = new int[100];

int[ ] b = new int[200];

a = b;

Page 39: Programming  (SE7)

Java programming 39

Garbage Collection (2)

如欲釋放某物件或陣列,只需要停止參照,或指定為 null ,即可由 Garbage Collection 機制將其釋放。

[例 ]:

int[ ] c = new int[300];

……

c = null;

Page 40: Programming  (SE7)

Java programming 40

Garbage Collection (3)

由 Garbage Collection 機制管理記憶體可避免人為的錯誤 ; 但未被參照到的物件之空間並非馬上被釋放回收,且須時間運作,效率較差。

Page 41: Programming  (SE7)

Java programming 41

IDE (Integrated Development Environment)

NetBeans (Sun) JBuilder (Borland) Eclipse (IBM)

Page 42: Programming  (SE7)

Java programming 42

Java の実行環境

ソース

翻訳

機械語Windows

機械語Mac

機械語Linux

実行

<通常の言語>

実行 実行

ソース

翻訳

JVM Windows

JVM Mac

JVM Linux

実行

< Java 言語>

実行 実行

バイトコード

機械語はプラットフォーム毎に異なる。

Page 43: Programming  (SE7)

Java programming 43

Java 語言的特點 (1)

簡單 (Simple):指的是去除了 C/C++中較少使用或可能不安全的功能,例如指標,運算子重載,多重繼承等。

物件導向的 (Object-oriented):利用OOP 的三種基本特性: PIE( 多型,繼承,封裝 ) ,來設計出可重複使用的元件,使系統有彈性易於維護。

Page 44: Programming  (SE7)

Java programming 44

Java 語言的特點 (2)

網路的 (Network-Savvy):提供容易使用的 API 來撰寫網路程式

直譯式的 (Interpreted) : bytecode在 JVM 上執行時, JIT負責轉換為機器碼。

穩健的 (Robust):捨棄了對記憶體的指標運作。

Page 45: Programming  (SE7)

Java programming 45

Java 語言的特點 (3)

安全性 (Secure) : 資源回收處理 (Garbage Collection)由 JVM 自行作記憶體管理,例外處理 (Exception) 可預防突發錯誤的産生。

結構中立 (Architecture Neutral):程式執行在虚擬機器上。

Page 46: Programming  (SE7)

Java programming 46

Java 語言的特點 (4)

可攜的 (Portable): Write once, run any-where 指的是由 JVM 與不同的作業系統溝通。

高效率的 (High Performance):利用 HotSpot, JIT 技術改善效能。

多執行緒的 (Multithreaded) : Java程序可發出多隻並行的輕量化行程。

Page 47: Programming  (SE7)

Java programming 47

Java 語言的特點 (5)

動態的 (Dynamic) : Java 程式執行時動態的連結類別庫。

支援萬國碼 (Unicode):變數與類別名稱皆可使用中文

Page 48: Programming  (SE7)

資料型態 (Data type)

基本資料型態 (primitive data type)

結構化資料型態 (structured data

type)

抽象資料型態 (abstract data type)

Java programming 48

Page 49: Programming  (SE7)

Java programming 49

Java 的資料型態 (1)

Java 的資料型態大小不會像 C/C++ 一樣隨著平台不同而不同,它在所有平台上都是一樣的。

由於 Java在 char 的型態部分採用 Unicode, 換句話説 , 可以用中文取變數名稱。

Java 的變數可以指向二種資料型態: 1. 原生資料型態 2. 參考資料型態

Page 50: Programming  (SE7)

Java programming 50

Java 的資料型態 (2)

參考資料型態 (wrapper class)定義在 java.lang 的套件中。

原生資料型態中的整數資料型態 (byte, short, int, long) 可使用 10進位 , 8進位與16進位表示。

原生資料型態中的浮點數資料型態 (float, double) ,預設浮點數為 double 型態。

Page 51: Programming  (SE7)

Java programming 51

Java 的資料型態 (3)

原生資料型態除 boolean之外彼此間可轉型 ( 自動轉型或強制轉型 ) 。

原生資料型與參考資料型態之間必須利用物件的靜態方法來轉型。

在運算子 (operators) 為「+= , -=, *= , /=」時會發生不明確 (隱含 )轉型的情況,原來需強制轉型的資料會變成自動轉型。

Page 52: Programming  (SE7)

Java programming 52

データ型( data type) 基本的な型

整数、浮動小数点数、真理値、文字 参照型

クラス(など)を参照する型

Page 53: Programming  (SE7)

Java programming 53

資料型態 (Data type)

原始資料型態 (primitive type) 整數 (byte, short, int, long) 浮點數 (float, double) 布林 (boolean) 字元 (char)

非原始資料型態 (non-primitive type)

Page 54: Programming  (SE7)

Java programming 54

基本型( primitive types)

Page 55: Programming  (SE7)

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

Page 56: Programming  (SE7)

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

Page 57: Programming  (SE7)

Java programming 57

Java 的内建資料型別 (1) boolean :布林値

僅有兩個常數, true和 false 。 byte :位元組型別値

長度一個位元組,取値範圍是 -128至 127 。 short:短整數

長度兩個位元組,取値範圍是 -32768至 32767 。

int:整數 長度 32位元(四個位元組),取値範圍是 -2147483648至 2147483647 。

Page 58: Programming  (SE7)

Java programming 58

Java 的内建資料型別 (2) long:長整數

長度八個位元組,取値範圍是 -9223372036854775808至

9223372036854775807 。 float:單精度 IEEE754浮點數

長度四個位元組。 double:倍精度 IEEE754浮點數

長度八個位元組。 char:字元型

長度 16位元,支援所有的 UCS-2和 ASCII 編碼。

Page 59: Programming  (SE7)

Java programming 59

Java 的内建資料型別 (3)

若整數資料未指定型別 ; 範圍在 32 bits (-231 ~ 231-1) 的會被視為 int 型別 , 超過此範圍者視為 long 型別。

所有的浮點數資料皆預設為 double 型別。

Page 60: Programming  (SE7)

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

Page 61: Programming  (SE7)

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

Page 62: Programming  (SE7)

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

Page 63: Programming  (SE7)

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

Page 64: Programming  (SE7)

Java programming 64

資料型態強制轉換 若要指定整數資料為 long 型別 , 在數値後面要加上「L」或「 l」。

若要指定浮點數資料為 float 型別 , 在數値後面要加上「F」或「 f 」。

若要將大範圍型別的數値資料轉換成範圍較小之數値資料 , 必須使用指定型別 : ( 指定型別 ) 資料或變數

Page 65: Programming  (SE7)

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)

Page 66: Programming  (SE7)

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)

Page 67: Programming  (SE7)

Java programming 67

String轉換成數字資料型態 Byte.parseByte(String s) Double.parseDouble(String s) Float.parseFloat(String s) Integer.parseInt(String s) Long.parseLong(String s)

Page 68: Programming  (SE7)

Java programming 68

コメント(注釈) // ここにコメントを記述します。 a = b + c; /* ここにもコメントを記述します。 */ /*

* 複数行にまたがるコメントも可能です。 */ /**

* この部分は javadoc コマンドで抜き出すことができます。

*/

Page 69: Programming  (SE7)

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. */

Page 70: Programming  (SE7)

Java programming 70

主要な Java パッケージ

パッケージ名 説 明java.applet アプレット作成java.awt GUIjava.io 入出力java.lang Java 言語の基本機能java.math 算術演算java.net ネットワーク処理java.util ユーティリティ機能

Page 71: Programming  (SE7)

Java programming 71

java.lang.Math 類別

Page 72: Programming  (SE7)

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)); }}

Page 73: Programming  (SE7)

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

Page 74: Programming  (SE7)

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

Page 75: Programming  (SE7)

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(); ............ }}

Page 76: Programming  (SE7)

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); }           }  

Page 77: Programming  (SE7)

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); }}

Page 78: Programming  (SE7)

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); ............ }}

Page 79: Programming  (SE7)

Java programming 79

java.util.Scanner 類別 Scanner

ファイルやキーボードからの入力が容易にできるクラスである。

利点 BufferedReader オブジェクトを作る必要がな

い。 文字、整数、実数を判断できるメソッドを持っ

ているので Integer.parselnt() などの型変換がいらない。

Page 80: Programming  (SE7)

Java programming 80

Scanner を用いた読み込み

import java.util.Scanner; キーボードからの読み込み

Scanner sc = new Scanner(System.in);

ファイルからの読み込み Scanner sc =

new Scanner(new FileStream("filename.txt"));

Page 81: Programming  (SE7)

Java programming 81

Scanner Methods

Page 82: Programming  (SE7)

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.

Page 83: Programming  (SE7)

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.

Page 84: Programming  (SE7)

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(); … } }

Page 85: Programming  (SE7)

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的字串内

容}

}

Page 86: Programming  (SE7)

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

Page 87: Programming  (SE7)

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( ) 」

Page 88: Programming  (SE7)

Java programming 88

format 方法 完整的使用格式:

%[argument_index$] [flags] [width] [.precision] conversion

Page 89: Programming  (SE7)

Java programming 89

Common Formatting Codes

Page 90: Programming  (SE7)

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 的結果

Page 91: Programming  (SE7)

Java programming 91

Conversion (2)字元 種類 作 用c 或是 C 字元 輸出 Unicode字元

d 整數 輸出十進位的資料o 整數 輸出八進位的資料

x 或是 X 整數 輸出十六進位的資料e 或是 E 浮點數 輸出科學記號表示方式的資料

f 浮點數 輸出十進位的資料g 或是 G 浮點數 依精準度 (precision) 的設定輸出十進位或是以

科學記號表示的資料a 或是 A 浮點數 輸出十進位或是以科學記號表示的資料t或是 T 日期時間 日期或是時間輸出格式的前導字元

% 百分比 輸出百分比格式的資料n 換行符號 輸出換行字元

Page 92: Programming  (SE7)

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

Page 93: Programming  (SE7)

Java programming 93

flag 參數Flag 作 用- 讓輸出靠左對齊# 適用另一種格式輸出+ 在數字左邊顯示正負符號空格 在整數或浮點數前顯示一個空格

0 靠右對齊,數字不足時,補上 0

, 一千分為表示( 負號以小括號表示

Page 94: Programming  (SE7)

Java programming 94

printf 使用範例 (1)

Example 1: 控制寬度和精度 System.out.printf(“%5.3f”, Math.PI) , 控制輸出寬度為 5 ,精度為 3 , 結果為“ 3.142”

(輸出的最前面有一个空格 )

Page 95: Programming  (SE7)

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”

Page 96: Programming  (SE7)

Java programming 96

プログラミング基礎演習

Console Assignment Expression Divisor If / If-else Switch-case

For loop While loop Random Bubble sort Method Recursive

Page 97: Programming  (SE7)

Java programming 97

Java Virtual Machine

Javaソースコード

Javaバイトコード

Javaコンパイル( javac )

x86アーキテクチャ( JavaVM )

MIPSアーキテクチャ( JavaVM )

SPARCアーキテクチャ( JavaVM )

……

Page 98: Programming  (SE7)

Java programming 98

プログラムの作成

Page 99: Programming  (SE7)

Java programming 99

java 程式的編輯器 整合式編輯器

Eclipse, JCreator LE 等 視覺化編輯器

Jbuilder, IntelliJ IDEA, Visual Cafe, Workshop, Forte for Java 等

純文字編輯器 免費軟體: Crimson, ConText, NotePad 等 共享軟體: UltraEdit, EditPlus 等

Page 100: Programming  (SE7)

Java programming 100

JDK (Java Development Kit)

javac(.exe) Java 的編譯器 , 可將 .java 原始档編譯

為 .class 類別档。 java(.exe)

JVM 虚擬機器的執行档 , 可用來執行 Java Application 的 Bytecode(.class 類別档 ) 。

Page 101: Programming  (SE7)

Java programming 101

Page 102: Programming  (SE7)

Java programming 102

Java 言語プログラム作成の流れ

1) プログラムソースファイルの作成 プログラムを書く ( クラスを書く ) ファイルの拡張子は .java (例えば Test.java)

2) プログラムのコンパイル javac ファイル名(例えば javac Test.java )

3) プログラムの実行 java クラス名(クラス名が Test なら java

Test )

Page 103: Programming  (SE7)

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

Page 104: Programming  (SE7)

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

Page 105: Programming  (SE7)

Java programming 105

プログラミング演習 請將程式碼及執行結果貼在 MS Word

上 (filename = ‶A4010N099_09″), 儲存在桌面備用。

同學若來不及於下課前完成作業繳交程序 , 另請在習作完成後 , 儘速mail給

任課教師 ([email protected]) 。

( 班別 , 學號 , _, 作業回數 )

Page 106: Programming  (SE7)

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.");

}

}

Page 107: Programming  (SE7)

Java programming 107

Java 程式 應用程式 (Application)

Java 應用程式是可以獨立執行的程式 小程式 (X-let)

瀏覽器端執行的小程式 (Applet) : Java applet是嵌在 HTML 中的程式

伺服器端執行的小程式 (Servlet)

Page 108: Programming  (SE7)

Java programming 108

Java Application 基本結構

Page 109: Programming  (SE7)

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; }

Page 110: Programming  (SE7)

Java programming 110

Java 語言的寫作風格 Class Name請首字大寫 Variable Name和Method Name請首字小

寫 如果名稱由數個英文字組成 ,第 2個英文字以後首字大寫

内縮4個空格 註解部分如要變成説明文件 ,請遵照 javadoc這個工具的寫作規則

Page 111: Programming  (SE7)

Java programming 111

Java 程式碼慣例 (1)

一行不超過 80 個字元 一行一個宣告 使用 if 時,永遠加上括號 在變數宣告的地方進行初始化 (除非它

的値需要經過某些運算 ) 。

Page 112: Programming  (SE7)

Java programming 112

Java 程式碼慣例 (2)

class 名稱應該是名詞 method 名稱應該是動詞 變數名稱應該是有意義的短單字 常數名稱應該是以底線 ("_") 分隔的全大

寫字

Page 113: Programming  (SE7)

Java programming 113

Java 程式碼慣例 (3)

更多詳盡的程式慣例,請參考官方文章  “ Code Conventions for the Java

Program-ming Language”

http://www.oracle.com/technetwork/java/

codeconvtoc-136057.html

Page 114: Programming  (SE7)

Java programming 114

System.out.println() /.print()

System.out.println(内容 ) 輸出”内容”加上”斷行 \r\n”至 Console

(螢幕 )

System.out.print(内容 ) 輸出”内容”至 Console(螢幕 )

如果要輸出的内容需要有字串、文字、日期等,可以利用字串的連接 (+) 來把字串串連起來進行輸出。

Page 115: Programming  (SE7)

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

Page 116: Programming  (SE7)

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 文件

Page 117: Programming  (SE7)

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 // 執行

Page 118: Programming  (SE7)

Java programming 118

Hello.java

public class Hello { public static void main(String

args[ ]) { System.out.println("Hello"); }}

Page 119: Programming  (SE7)

Java programming 119

Ex01: 我的第一個 java 程式/*習題 1: Hello, java!档名 : Ex01.java四環一 A, 4010N901, 李大仁*/package myjava.ex01;import java.lang.*;import java.io.Console;

Page 120: Programming  (SE7)

Java programming 120

public class Ex01

{

public static void main (String args[])

{

System.out.println(“Hello, java!”);

}

}

(續前頁 )

Page 121: Programming  (SE7)

Java programming 121

if (……) {

for (… ; … ; …) {

while (……) {

}

}

}

K&R (Kernighan & Ritchie)縮排

Page 122: Programming  (SE7)

Java programming 122

java 程式的編輯 (1)

註解可使用「 /*......*/」與「 //...............」,如要變成説明文件 , 請依循 javadoc 這個工具的規則「 /**........*/」

必須以 .java 作為副档名存档 類別名稱必須與主档名相同 毎個档案可以有許多的 class, 但只能有

一個是 public

Page 123: Programming  (SE7)

Java programming 123

java 程式的編輯 (2)

若程式中有多個 class, 則編譯時亦會産生多個 .class 档案

Java 會區分識別字的大小寫 必須以分號作為毎一行的結束

Page 124: Programming  (SE7)

Java programming 124

Java 程式中的各項命名 (1)

識別字可使用 Unicode ,因此可以使用中文,但須注意中間不可有空白,開頭不可有數字,不可為關鍵字(Keywords)

建議 Class Name首字大寫 , Variable Name 和 Method Name 請首字小寫

Page 125: Programming  (SE7)

Java programming 125

Java 程式中的各項命名 (2)

建議名稱若由數個英文字組成 ,第二個英文字以後首字大寫 (camelcase) ,而不要使用匈牙利命名法 (Hungarian Notation)

建議名稱必須有意義

Page 126: Programming  (SE7)

Java programming 126

Java Programming Language Keywords

Page 127: Programming  (SE7)

Java programming 127

class 類別宣告 class 的名稱與档案名稱必須相同 毎個档案可以有許多的 class 存在 , 但只能有一個是 public

Page 128: Programming  (SE7)

Java programming 128

package宣告區 (1)

package宣告本程式屬於何類套件 若未指定 package則預設為目前目録 Java 中同性質的 classes 可被組織為

packages ,它們對應於档案系統的目録結構,可觀看 JDK目録中的 src.zip (例 ) java.awt.Button.java 程式碼中的

package 設定為 package java.awt

Page 129: Programming  (SE7)

Java programming 129

package宣告區 (2)

package 名稱就像是姓氏,而 class 名稱就像是名字。 package 名稱有很多的,就好像是複姓。 不同的 package之中可以有相同的 class 名稱。 (例 ) java.io.InputStream則是複姓

java.io ,名字為 InputStream 的類別, classpath + 程式内的 package = 档

案完整路徑

Page 130: Programming  (SE7)

Java programming 130

import敘述區 (1)

Java 的 import 與 C 的 include 意義相仿而實質不大相同, java 的 import 只是告知 VM要到哪裡尋找套件,並不會佔用記憶體

若我們想使用 java.io 這個套件中的FileReader ,需在程式中指定為 import java.io.FileReader

Page 131: Programming  (SE7)

Java programming 131

import敘述區 (2)

若想在程式中引入 java.io 整個套件 , 可在程式中指定 import java.io.*

import 僅能引用該層 ,下一層必須另行 import; 例如 import java.io.File 只能使用 File, 不能使用位於上層的FileReader

Page 132: Programming  (SE7)

Java programming 132

import敘述區 (3)

因為 java.lang 這個套件實在是太常用到了,幾乎沒有程式不用它的, 所以不管你有沒有寫 import java.lang; ,編譯器都會自動幫你補上

Page 133: Programming  (SE7)

Java programming 133

import敘述區 (4)

java 的 API 中會有相同名稱的 class存在不同 package 的情形,例如 java.util 與 java.sql 都有 Date 這個 class, 這時引入時若都採取 import整個 package 的方式,則編譯會出錯,建議放棄其中之一的 import 敘述,在程式碼中直接使用完整路徑取用 class即可。

Page 134: Programming  (SE7)

Java programming 134

java常用的套件 (1)

java.lang 預設引用的套件,包括了基本語言特性與

處理陣列與字串的函式 java.io java.util javax.swing

Page 135: Programming  (SE7)

Java programming 135

java常用的套件 (2)

java.awt JDK1.1提出的 GUI

java.awt.event GUI 的事件驅動器

java.awt.image GUI 的 Image

Page 136: Programming  (SE7)

Java programming 136

class, interface, enum 區 類別宣告 class 的名稱與档案名稱必須相同 毎個档案可已有許多的 class 存在 , 但只能有一個是 public

Page 137: Programming  (SE7)

Java programming 137

キーボードからの入力 (1)

imoport java.io.console; Console 変数 = System.console(); String str = 変数 .readLine(); [注 ]: 読み込んだデータは String型 ( 文字列 )

Page 138: Programming  (SE7)

Java programming 138

キーボードからの入力 (2)

imoport java.util.Scanner; Scanner 変数 = new Scanner

(System.in); String str = 変数 .next(); [注 ]: 読み込むデータの型に合わせたメソッドを使って読み込み。

Page 139: Programming  (SE7)

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 値を読み込む

Page 140: Programming  (SE7)

Java programming 140

キーボードからの入力 (3)

import java.io.* main(String args[]) throws

IOException BufferedReader 変数 = new

BufferedReader (new InputStreamReader (System.in));

String str = 変数 .readLine(); [注 ]: 読み込んだデータは String型 ( 文字列 )

Page 141: Programming  (SE7)

Java programming 141

文字列から数値への変換読み込むデータの型

  使用メソッド 

byte  Byte.parseByte(変換文字列 ) 

shot  Short.parseShort(変換文字列 ) 

int  Integer.parseInt(変換文字列 ) 

long  Long.parseLong(変換文字列 ) 

float  Float.parseFloat(変換文字列 ) 

double  Double.parseDouble(変換文字列 )

Page 142: Programming  (SE7)

Java programming 142

演習 1: 文字列 寫一程式,可以在螢幕上顯示「 Hello,

java SE7 !」;在程式中須加入單行及多行註解,在註解中要有自己的班級、學號、姓名及程式完成日期等資訊。

Page 143: Programming  (SE7)

Java programming 143

演習 1: 文字列 文字の表示

Page 144: Programming  (SE7)

Java programming 144

指定敘述 (assignment)

變數 = 資料、變數或運算式 ;

Page 145: Programming  (SE7)

Java programming 145

變數的宣告 使用變數前,必須先宣告此變數的資料

型態 變數的宣告不必在程式最前面,可以在需要時再宣告

資料型別 變數名稱 1[= 初値 1], 變數名稱 2[= 初値 2];

Page 146: Programming  (SE7)

Java programming 146

算術 (Arithmetic)運算符號運算符號 功能敘述+ 加* 乘- 減/ 除% 餘數++ 加一-- 減一

Page 147: Programming  (SE7)

Java programming 147

除法 (/) 型別的問題 當分子與分母皆為 double 時,除法運

算的結果為 double 。 當分子與分母其一為 double而另一為

int 時,除法運算的結果仍為 double 。 當分子與分母皆為 int 時,除法運算的

結果為 int 。若結果具有小數,則截斷小數部分,僅保留整數部分。

Page 148: Programming  (SE7)

Java programming 148

邏輯 (Logic)運算符號運算符號 功能敘述> 大於< 小於>= 大於等於<= 小於等於== 等於!= 不等於&& logic AND

|| logic OR

! logic NOT

instanceofreference instanceof ClassName判斷 reference 所指到的物件其型態是否和 ClassName相容

Page 149: Programming  (SE7)

Java programming 149

位元 (Bit)運算符號運算符號 功能敘述& bit AND

<< left bit shift

| bit OR

>>right bit shift with sign

^ bit XOR

~ 1 補數

>>>同>>但左邊一律補零

Page 150: Programming  (SE7)

Java programming 150

其他運算符號運算元 功能敘述= 將右邊的値複製到左邊的變數

(type) 將右邊的數値或 reference轉換成 type 型別

+= 將右邊的數値加上左邊的數値然後指定給左邊的變數

?: 若 ? 左邊成立則做 : 左邊否則做 : 右邊, 合併兩個運算視為一個敘述(運算式 ) 表示 ( )内優先運算

.Reference.ObjectMember或ClassName.ClassName存取物件或類別成員

new 産生物件

Page 151: Programming  (SE7)

Java programming 151

Operator Precedence (1/2)

Operators Precedencepostfix expr++ expr--

unary++expr --expr +expr -expr ~ !

multiplicative * / %additive + -shift << >> >>>relational < > <= >= instanceofequality == !=bitwise AND &

Page 152: Programming  (SE7)

Java programming 152

Operator Precedence (2/2)

Operators Precedencebitwise exclusive OR

^

bitwise inclusive OR

|

logical AND &&logical OR ||ternary ? :

assignment= += -= *= /= %= &= ^= |= <<= >>= >>>=

Page 153: Programming  (SE7)

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

Page 154: Programming  (SE7)

Java programming 154

Java printf( ) method

System.out.printf(“format-string” [, arg1, arg2, … ]);

Page 155: Programming  (SE7)

Java programming 155

Format String

% [flags] [width] [.precision] conversion-character

Page 156: Programming  (SE7)

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

Page 157: Programming  (SE7)

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

Page 158: Programming  (SE7)

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

Page 159: Programming  (SE7)

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

Page 160: Programming  (SE7)

Java programming 160

演習 2: データの型と変数 (1)

簡単な計算 Celsius temperature (攝氏温度 )

Fahrenheit temperature ( 華氏温度 )

℉ = ℃ + 32

5

9

Page 161: Programming  (SE7)

Java programming 161

演習 2: データの型と変数 (1)

Page 162: Programming  (SE7)

Java programming 162

肥満症の定義 ( 日本肥満学会 )

肥満症とは肥満に起因ないし関連する健康障害を合併するか、その合併が予測される場合で、医学的に減量を必要とする病態をいい、疾患単位として取り扱う。

http://www2.health.ne.jp/theme/index.html

Page 163: Programming  (SE7)

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

Page 164: Programming  (SE7)

Java programming 164

肥満症は内臓脂肪蓄積が問題http://www2.health.ne.jp/theme/index.html

Page 165: Programming  (SE7)

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 月世界衞生組織公佈 "高血壓定義與分類 "

Page 166: Programming  (SE7)

Java programming 166

予防と治療(食事療法)

摂取エネルギーの設定 栄養素の配分 食習慣の改善から成る

(出典:肥満・肥満症の指導マニュアル 日本肥満学会編集委員会)

http://www2.health.ne.jp/theme/index.html

Page 167: Programming  (SE7)

Java programming 167

予防と治療(運動療法) どんな運動がいい?

歩行、ジョギング、ラジオ体操、水泳などの全身を使う有酸素運動。また、 1日 1 万歩以上の歩行も!

どのくらいの運動がいいの? トレーニングは週に 3回以上行う必要がある。軽いも

のなら毎日から 1日おきとし、また休日などを利用して十分な時間をとるのがよいとされている。

運動の強度については、いきなり強い運動をしないこと。軽い運動から始めて徐々にならしていこう。

(出典:肥満・肥満症の指導マニュアル 日本肥満学会編集委員会)

http://www2.health.ne.jp/theme/index.html

(jogging)

(training)

Page 168: Programming  (SE7)

Java programming 16898.5.14. 中國時報 A8 版

Page 169: Programming  (SE7)

Java programming 16998.5.14. 中國時報 A8 版

Page 170: Programming  (SE7)

Java programming 170

高血壓患者應注意事項: 充分的睡眠與休息,避免過度勞累與精神緊張。 適度輕鬆的運動,維持理想的體重。 保持大便通暢,預防便秘。 避免用太冷太熱的水洗澡或浸浴。 選擇新鮮的食物,避免醃製及加工食品,如鹹菜、蔭瓜、醬瓜罐頭等。

忌食含鈉量極高的食品及蔬菜,如麵線、蜜餞、餅干、芹菜、胡蘿蔔、海帶、紫菜、發芽蠶豆等不要大量食用。

避免抽菸、喝酒;節制茶葉、咖啡、可樂等含咖啡因的飲料。

Page 171: Programming  (SE7)

遠離高血壓 健康生活六守則 減鹽 減重

維持 BMI 18.5-24 的健康體位,男生腰圍不超過 90公分,女生腰圍不超過 80公分

戒菸 運動

國民健康局 Java programming 171

Page 172: Programming  (SE7)

遠離高血壓 健康生活六守則 節制飲酒

每天男性不宜超過 2 個酒精當量( drinks/day,每個酒精當量為 15公克,約相當於啤酒 360毫升,葡萄酒 120~150毫升,白蘭地等烈酒 30~40毫升),女性不宜超過 1 個酒精當量

量血壓 血壓超過 140/ 90 mmHg就應該諮詢醫

師國民健康局 Java programming 172

Page 173: Programming  (SE7)

Java programming 173

BMI=体重 kg/(身長m) 2 ; 標準体重 kg =22×(身長m) 2 http://www.uemura-clinic.com/dmlecture/bmi.htm

Page 174: Programming  (SE7)

Java programming 174

BMI 肥満度の判定

18.5 未満 やせ

18.5 以上~ 25 未満 適正

25 以上~ 30 未満 肥満( 1 度)

30 以上~ 35 未満 肥満( 2 度)

35 以上~ 40 未満 肥満( 3 度)

40 以上 肥満( 4 度)日本肥満学会 (2000)

Page 175: Programming  (SE7)

Java programming 175

演習 3: データの型と変数 (2)

変数の使い方 BMI = [体重 (kg )] ÷ [身長 (m)]2

標準体重 (kg ) = 22×(身長m) 2

参考) BMI ( Body Mass Index :体格指数)

Page 176: Programming  (SE7)

Java programming 176

演習 3: データの型と変数 (2)

Page 177: Programming  (SE7)

Java programming 177

演習 4: 算術演算子 整數除法 1 呎 = 12吋 1 吋 = 2.54公分

Page 178: Programming  (SE7)

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型を返します。

Page 179: Programming  (SE7)

Java programming 179

Math クラス指数関数メソッド

戻り型 メソッド 説明

static double

exp(double)自然対数の底 e を引数の値で累乗した値を返します。

static double

log(double)引数で指定された値の自然対数値を返します。

static double

pow(double, double)

第 1 引数を第 2 引数で累乗した値を返します。

static double

sqrt(double)引数で指定された値の平方根を返します。

Page 180: Programming  (SE7)

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.

Page 181: Programming  (SE7)

Java programming 181

演習 4: 算術演算子

Page 182: Programming  (SE7)

Java programming 182

分支選擇敘述句 (1)

單向 if (expression)    statement;

雙向 if (expression)    statement_true; else    statement_false;

Page 183: Programming  (SE7)

Java programming 183

分支選擇敘述句 (2)

多向 switch (expression)

{    case value_1:     [statement_1;]      [break;]

   

   case value_2:      [statement_2;]       [break;]

...

   default:       statement;

[break;]

}

Page 184: Programming  (SE7)

Java programming 184

單向條件敘述 if (條件式 ) 敘述 ; if (條件式 )

敘述 ; if (條件式 ) {

敘述區段 ;

}

Page 185: Programming  (SE7)

Java programming 185

雙向條件敘述 if (條件式 )

敘述 A;

else

敘述 B;

if (條件式 ) {

敘述區段 A;

}

else {

敘述區段 B;

}

Page 186: Programming  (SE7)

Java programming 186

條件運算子 變數 = (條件式 ) ? Y 結果 : N 結果 ; [例 ]

int n1 = -20, n2 = 5;

String compare;

compare = (n1 >= n2) ? “ 大於等於” : “小於” ;

Page 187: Programming  (SE7)

Java programming 187

巣状條件敘述 if ( 主條件 ) {

if (次條件 1) {

敘述區段 A;

}

else {

敘述區段 B;

}

}

else {

if (次條件 2) {

敘述區段 C;

}

else {

敘述區段 D;

}

}

Page 188: Programming  (SE7)

Java programming 188

演習 5: if else 文 If ステートメント

If ... If ... Else ...

台湾自來水公司水費採累進計価方式: 應繳水費=基本月費 (34.0元 )

+ [毎度單價×實用水量 -累進差額 ]

總水費之計收至元為止 (角以下四捨五入 )

Page 189: Programming  (SE7)

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). 總水費之計收至元為止,角以下四捨五入。

台湾自來水公司

Page 190: Programming  (SE7)

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 日依夏月計價

Page 191: Programming  (SE7)

Java programming 191

演習 5: if else 文

Page 192: Programming  (SE7)

Java programming 192

演習 6: switch 文 Select Case ステートメント、例外処理 (VB6 例 ) Case is <= 5 Case 6, 7, 8 Case 9 To 14 Case is >= 15 Case Else

Page 193: Programming  (SE7)

Java programming 193

多重選擇 switch ( 變數或運算

式 ) { case 結果 1: 敘述區段 1; break; case 結果 2: 敘述區段 2; break; :

case 結果 n: 敘述區段 n; break; default: 敘述區段

default; [break;]}

只能是 : char, byte, short, int 或 enum列舉型別

只能是 : 常數或是由常數所構成的運算式

Page 194: Programming  (SE7)

Java programming 194

演習 6: switch 文 試設計一程式,可以輸入一學生某科之考試

成績 (整數資料型別 ) ,並依下示加分處理原則將加分後之新成績 (注意:取整數,且滿分仍以 100 分為限 )顯示在螢幕上。

加分處理原則: 0 - 49 分,加 15% 50 - 79 分,加 10% 80 - 100 分,加 5%

Page 195: Programming  (SE7)

Java programming 195

演習 6: switch 文

Page 196: Programming  (SE7)

Java programming 196

迴圈敘述句 (1)

計次 : for for( init_Statement ; condition ;

incre_statement )    statement

Page 197: Programming  (SE7)

Java programming 197

迴圈敘述句 (2)

前測 : while while( expression )    statement

Page 198: Programming  (SE7)

Java programming 198

迴圈敘述句 (3)

後測 : do while do    statement while( expression ) ;

Page 199: Programming  (SE7)

Java programming 199

跳耀敘述句 (1)

label 多與 break或 continue 合用 ,可跳出多層迴圈 (multi-level loop)

break 針對 for, while, do while, switch迴圈作跳離

Page 200: Programming  (SE7)

Java programming 200

跳耀敘述句 (2)

continue 針對 for, while, do while 本次迴圈略過其後的敘述句 , 然後回到重複執行的條件處判斷是否繼續進入迴圈

return 中斷目前程序的執行 , 跳回上一層的呼叫

點 , 但不可中斷有回傳型態的函數

Page 201: Programming  (SE7)

Java programming 201

迴圈敘述 (for loop)

for ( 初値 ; 條件式 ; 增値運算式 ) 敘述 ;

for ( 初値 ; 條件式 ; 增値運算式 ) {

敘述區段 ;

}

Page 202: Programming  (SE7)

Java programming 202

迴圈敘述 (while loop)

< 前測試迴圈> while (條件式 ) {

敘述區段 ;

}

< 後測試迴圈> do {

敘述區段 ;

} while (條件式 );

Page 203: Programming  (SE7)

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

Page 204: Programming  (SE7)

Java programming 204

円周率を求めるプログラム 円周率とは

円周率とは πで表わされる数学定義のひとつで、 正円の直径に対する円周の比のことである。

1400年頃,インドのマーダヴァが無限級数を得る。

Page 205: Programming  (SE7)

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 倍することで円周率を求めることができる。

Page 206: Programming  (SE7)

Java programming 206

演習 7: for 文

Page 207: Programming  (SE7)

Java programming 207

演習 8: while 文 假設有一條繩子長 1,000公尺,毎天剪去一半的長度,請設計一程式,可以計算出需花費幾天的時間,繩子的長度將不足 3 公尺?

Page 208: Programming  (SE7)

Java programming 208

演習 8: while 文

Page 209: Programming  (SE7)

演習 8-1: while 文

Java programming 209

Page 210: Programming  (SE7)

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.

Page 211: Programming  (SE7)

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)

Page 212: Programming  (SE7)

Java programming 212

乱数 (VB6)

– Rnd 0以上1未満の単精度浮動小数点型の数値を返すという命令

Int(( 最大値 - 最小値 + 1) * Rnd + 最小値 )

– Randomize Timer VBの乱数ジェネレータを初期化 乱数の出現パターンを変える

Page 213: Programming  (SE7)

Java programming 213

乱数函式 - Math.random()

import java.lang.Math; Math.random()

回傳一個 0.0 - 1.0( 不含 ) 的倍精度(double)浮点数

選取一段範圍之整數 : (int) (Math.random() * ( 最大値 - 最小値 + 1) + 最小値 )

Page 214: Programming  (SE7)

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 までの間でランダムな数値を算出します。

Page 215: Programming  (SE7)

Java programming 215

乱数 ( 物件 ) の生成 Random クラスを用いると、乱数を

生成することができる。 import java.util.Random;

Random r = new Random();

r.nextInt(n) //取得 0 - (n-1) 的整數

r.nextDouble()

//取得 0.0 – 1.0( 未滿 ) 的倍精度浮點數

Page 216: Programming  (SE7)

Java programming 216

指定亂數範圍 private int randomInRange(int min, int

max) { return min + random.nextInt(max –

min + 1); }

int lotto; lotto = randomInRange(1, 49);

Page 217: Programming  (SE7)

Java programming 217

モンテカルロ法による π 計算

π = 4 × 円内部の点の数 ÷ 全ての点の数

点の数が多いほど、精確な値になる。

Page 218: Programming  (SE7)

Java programming 218

モンテカルロ法による円周率の計算 モンテカルロ法とは確率には直接関係ない問題を確率も用いて解くという方法です。

円内にあった点の数÷打った全数

= (( L /2 ) 2×π) / L 2

= π/4

Page 219: Programming  (SE7)

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)

Page 220: Programming  (SE7)

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.

Page 221: Programming  (SE7)

Java programming 221

演習 9: モンテカルロ法

Page 222: Programming  (SE7)

Java programming 222

陣列 (Array)

Page 223: Programming  (SE7)

Java programming 223

陣列 (Array)

陣列是一種特殊的類別 (class)必須使用 new才能建立實體

宣告方式可以有 2 種 型態 [ ] 變數 ;

例如 : int[ ] arr1, int[ ][ ][ ] arr3;

型態 變數 [ ]; 例如 : int arr1[ ];

Page 224: Programming  (SE7)

Java programming 224

Declaring a Reference to Refer to an Array

宣告陣列主要分成兩部分:宣告陣列的 type 以及陣列參考 (reference) 的name 。其格式如下:

type[ ] name; [例 ]:

int[ ] intArray; float[ ] floatArray;

Page 225: Programming  (SE7)

Java programming 225

Creating an Array

Java 陣列是使用 new 指令所産生,其格式如下:

new elementType[arrayLength]; [例 ]:

int[ ] intArr; intArr = new int[100]; double[ ] doubleArr = new double[200];

Page 226: Programming  (SE7)

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”

Page 227: Programming  (SE7)

Java programming 227

Accessing an Array Element

陣列參考可以 [ ] 算符配合索引値(index) 來存取個別陣列元素。

[例 ]: intArray[3] = 10; float val = floatArray[3];

陣列之長度,可由 arrayReference.length 方法求得。

Page 228: Programming  (SE7)

Java programming 228

Sorting/Searching an Array

bubble sort binary search on a sorted array

Page 229: Programming  (SE7)

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}};

Page 230: Programming  (SE7)

Java programming 230

公益彩券 2002 年 1 月起 , 北銀發行公益彩券

(小樂透 ), 由 1 至 42 的號碼中 , 任選6 碼 ; 選號不得重複。

2004 年 1 月起 , 北銀開始發行大樂透 , 由 1 至 49 的號碼中 , 任選 6 碼(6/49樂合彩 ); 選號不得重複。

Page 231: Programming  (SE7)

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

Page 232: Programming  (SE7)

Java programming 232

大樂透 (6/49樂合彩 )

大樂透是使用電腦連線接受投注的樂透型機率遊戲

投注購券者須從 01 - 49 的號碼中任意選出 6 個不重覆號碼以作為投注號碼

於公益彩券開獎時,開獎執行單位便會由開獎機中之號碼範圍内隨機開出六個號碼及一個特別號。

Page 233: Programming  (SE7)

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

Page 234: Programming  (SE7)

Java programming 234④ ‧ ‧ ‧ 以此類推 ‧ ‧ ‧

出處:上奇 , EB631, p.6-36

Page 235: Programming  (SE7)

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

Page 236: Programming  (SE7)

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 個號碼才停止}

Page 237: Programming  (SE7)

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 個元素的子集合}

Page 238: Programming  (SE7)

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

Page 239: Programming  (SE7)

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

Page 240: Programming  (SE7)

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

Page 241: Programming  (SE7)

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

Page 242: Programming  (SE7)

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); } }

Page 243: Programming  (SE7)

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); } }

Page 244: Programming  (SE7)

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); } }}

Page 245: Programming  (SE7)

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;    }    }   }

Page 246: Programming  (SE7)

排序 (sorting) – 基本排序法

氣泡排序法 (bubble sort)

選擇排序法 (selection sort)

插入排序法 (insertion sort)

謝耳排序法 (Shell sort)

Java programming 246

Page 247: Programming  (SE7)

排序 (sorting) – 高等排序法

快速排序法 (quick sort)

合併排序法 (merge sort)

堆積排序法 (heap sort)

基數排序法 (radix sort)

Java programming 247

Page 248: Programming  (SE7)

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

Page 249: Programming  (SE7)

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]); } } }

Page 250: Programming  (SE7)

Java programming 250

演習 10: 配列‧乱数の利用

Page 251: Programming  (SE7)

Java programming 251

演習 11: 二重ループ (1)

***************

*********

***********

Page 252: Programming  (SE7)

Java programming 252

演習 11: 二重ループ (2)

****

************

*********

****

*********

*********

********

Page 253: Programming  (SE7)

Java programming 253

演習 11: 二重ループ (3)

112123123412345

12312112123

112123121

Page 254: Programming  (SE7)

Java programming 254

演習 11: 二重ループ (4)

1121

123211234321

123454321

1121

12321121

1

32123212

1212

32123

Page 255: Programming  (SE7)

Java programming 255

演習 11: 二重ループ ( 出力_1)

Page 256: Programming  (SE7)

Java programming 256

演習 11: 二重ループ ( 出力_2)

Page 257: Programming  (SE7)

Java programming 257

方法 (method)

[public | private | protected] static [ 傳回値資料型別 | void] 方法名稱 ([ 引数串列 ]) [throws 例外名稱 ]

{

敘述區段 ;

[return 運算式 ;]

}

Page 258: Programming  (SE7)

Java programming 258

呼叫 java 方法 函式無回傳値 :

[物件名稱 ]. 方法名稱 ([ 引数串列 ]);

函式有回傳値 :

變數 = [ 物件名稱 ]. 方法名稱 ([ 引数串列 ]);

Page 259: Programming  (SE7)

Java programming 259

メソッド定義

[ 修飾子 ] [戻り値型 ] メソッド名 (<引数リスト >)

{

ステートメント

}

Page 260: Programming  (SE7)

Java programming 260

メソッド 戻り値型 メソッド名 ( メソッド引数リ

スト ) { 処理 return 戻り値 ; }

Page 261: Programming  (SE7)

Java programming 261

java 方法的引數傳遞 傳値呼叫 (call by value) 參考呼叫 (call by reference)

[註 ]: All parameters to methods in Java

are

   pass-by-value.

Page 262: Programming  (SE7)

Java programming 262

Defining methods (例 )

public double calculateAnswer(double

wingSpan, int numberOfEngines,

double length, double grossTons)

{

//do the calculation here

}

Page 263: Programming  (SE7)

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.

Page 264: Programming  (SE7)

Java programming 264

method definition (1) class MyClass { ... public ReturnType methodName(Type1 param1, Type2 param2 ) throws ExceptionName { ReturnType retType; ... return retType; } ... }

Page 265: Programming  (SE7)

Java programming 265

method definition (2)

private void methodName( String param1, String param2 ) { ... return; }

Page 266: Programming  (SE7)

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!”); }}

Page 267: Programming  (SE7)

Java programming 267

演習1 2: メソッド Functionプロシージャ BMI = bmi(height, weight)

BMI = [体重 (kg )] ÷ [身長 (m)]2

標準体重 = std_weight(height) 標準体重 = 22×(身長m) 2

Page 268: Programming  (SE7)

Java programming 268

演習1 2: メソッド

Page 269: Programming  (SE7)

Java programming 269

method

modifier returnValueType methodName(list of

parameters) { // Method body; }

Page 270: Programming  (SE7)

Java programming 270

Recursive method

Method that invokes itself. The arguments passed to the

recursion take us closer to the solution with each call.

Page 271: Programming  (SE7)

Java programming 271

recursive algorithms

if (the stopping case is reached){ solve it}else{ reduce the problem using recursion}

Page 272: Programming  (SE7)

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 ) );  }}

Page 273: Programming  (SE7)

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;

}

}

Page 274: Programming  (SE7)

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));

}

}

Page 275: Programming  (SE7)

搜尋 (searching)

循序搜尋法 (sequential search)

二元搜尋法 (binary search)

内插搜尋法 (interpolation search)

費氏搜尋法 (Fibonacci search)

Java programming 275

Page 276: Programming  (SE7)

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); } }

Page 277: Programming  (SE7)

Java programming 277

演習1 3: 再帰呼び出し

Page 278: Programming  (SE7)

Java programming 278

ご清聴ありがとう御座居ました。

今後とも、よろしくお願いいたします。

メールはいつでもかまいません。

崑山科技大学 環境工学科  

助教授 澄原日先 [email protected]

Page 279: Programming  (SE7)

Java programming 279

Java プログラミングの終わりで

す。

ご苦労様でした。

崑山科技大学 環境工学科    助教授 澄原日先 [email protected]