實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口) 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口) 公誠樓三樓 G315 電腦教室(資訊科學系) 可自行攜帶筆電 目標:協助習題、安裝java 環境、path設定 下次預定: 4/14(星期六)09:10~16:00
搶答I Scanner input = new Scanner(System. in ); System. out 搶答I Scanner input = new Scanner(System.in ); System.out.print("Please input"); String ss = input.next(); 這程式有何作用?
搶答I Scanner input = new Scanner(System. in ); System. out 搶答I Scanner input = new Scanner(System.in ); System.out.print("Please input n:"); int n = input.nextInt(); 這程式有何作用?
搶答I Scanner input = new Scanner(System. in ); System. out 搶答I Scanner input = new Scanner(System.in ); System.out.print("Please input n:"); int n = input.nextInt(); 這程式中那些是變數?
再談變數 (variable) 記憶體代言人 臺北市立大學 資訊科學系(含碩士班) 賴阿福
變數(Variable)? 為了提供還不錯的、有用的功能,程式必須能記得住事 情。 想想看,如果你不能記得任何事情你要如何過生活。 如果你要把兩個數字相加,你必須記得這兩個數字才能相加, 然後你必須記得結果才能在處理其他事情時使用它。 電腦用變數來記憶資料,他們之所以叫做變數是因為他 們的值是可變的。 你可以把變數想像成有不同名稱在上面的信箱:信箱裡面裝的 東西叫做變數的內容。 變數的名稱必須遵守一些規則。 首先他們的第一個字必須是英文字母A到Z,然後可以接著字母 或數字的任意組合。 可以結合大寫和小寫字母。 要小心的是電腦對待大小寫字母的看法比你更仔細,如java及 所有C-like語言把TIME、time、Time當作不同的變數。 變數的型態(data type) String, int, double… 為何需要不同型的態變數
為何變數要宣告型態的理由:不同型態的變數 人的腦袋非常靈活可變,可處理各種不同型式的 資料,看到「在9:00見面」、「32」或「2.5」就 知道該如何處理它。 電腦不像人那樣精明,它要正確地知道該處理什 麼型式的資料。這就是為何變數要宣告型態的理 由。
變數的宣告: 變數代表一塊記憶體 變數的型態(data type) :記憶體用來存放哪一類型資 料 如何取得記憶體? 宣告方法 例如 每一塊記憶體都有位址,但不可能記得起來,因此用英文 字來替代記憶體 變數用來存放程式執行過程不段變動數據或資料 變數的型態(data type) :記憶體用來存放哪一類型資 料 String, int, double… 如何取得記憶體? 宣告: 告訴系統我的程式需要一塊記憶體 宣告方法 變數的型態 變數名稱; 例如 int x; String st; String name = input.next(); Int age = input.nextInt();
變數 (variable) 如何將資料放入到記憶體? 如何從記憶體取出資料 輸入後放在主記憶體:放在指定變數 (程式設計 師不用管真正位址) 指定/派敘述(assignment statement) sum=100; sum=p+10; sum=sum+70; //取出sum,加70,再放入sum 如何從記憶體取出資料 printf(“%d”, sum); //取出sum System.out.println(sum);//取出sum 輸入後放在主記憶體:放在指定變數 (程式設計 師不用管真正位址) Scanner input = new Scanner(System.in);//產生Scanner 物件 System.out.print("Please input your name:"); String name = input.next(); System.out.print("Please input your age:"); int age = input.nextInt(); 如何為記憶體取名? 分大小寫 英文開頭 有意義名字 Sum 100 p RAM
變數的名稱不合法invalid?合法valid? Date DATE date TimeOfDay yr1991 AbCdEfGhiJ i2 Stats_1981 Total_Cost even_ 1981stats The%Given The+Given Total Cost * A+b-c 不合法 合法
不同變數的名稱: 下面是合法的: Date DATE date TimeOfDay yr1991 AbCdEfGhiJ i2 Stats_1981 Total_Cost even_
下面是不合法的: 1981stats (開始不可以是數字) The%Given (中間不可有%) The+Given (中間不可有+) Total Cost (中間不可有空隔) * (開始不可以是*符號) A+b-c (中間不可有+)
數值型態numeric data type 整數integer: 浮動點floating point : 小數點,採用IEEE 754格式 正負 Byte, short, int, long 浮動點floating point : 小數點,採用IEEE 754格式 不同型態可表示數值範圍不同,占用RAM空間不同 型態名稱都是keyword /reserved word 整數 型態名稱 值域(Range) 貯存空間 byte –27 to 27 (–128 to 127) 8-bit signed short –215 to 215 (–32768 to 32767) 16-bit signed int –231 to 231 (–2147483648 to 2147483647) 32-bit signed long –263 to 263 (–9223372036854775808 to 9223372036854775807) 64-bit signed 浮動點 float Negative range:–3.4028235E+38 to –1.4E – 45 Positive range: 1.4E – 45 to 3.4028235E + 38 32-bit IEEE 754 double Negative range:–1.7976931348623157E+308 to –4.9E–324 Positive range: 4.9E–324 to 1.7976931348623157E+308 64-bit IEEE 754
運算式 I Scanner input = new Scanner(System.in);//產生Scanner物件 System.out.print("請輸入字串a :"); String sta = input.next(); System.out.print("請輸入字串b :"); String stb = input.next(); System.out.print("請輸入整數a:"); int a = input.nextInt(); System.out.print("請輸入整數b:"); int b = input.nextInt(); int exp1, exp2;//宣告 exp1=(a+b)*(a-b)/2; System.out.println("exp1=(a+b)*(a-b)/2; exp1 become "+exp1); exp2=(a*b)%3; System.out.println("exp2=(a*b)%3; exp2 become "+exp2); String stc; stc=sta+stb; System.out.println("stc="+stc); a b RAM sta stb exp1 exp2 stc input
運算式 II sta="123"; stb="456"; stc=sta+stb; System.out.println("stc=sta+stb;stc become"+stc); a=12; b=45; exp1=a+b; System.out.println(" a=12;\n b=45;\n exp1=a+b;\n exp1 become "+exp1); b=b-5; System.out.println(" b=b-5;\n b become "+b); a b RAM sta stb exp1 exp2 stc input
計算BMI
BMI說明 身體質量指數 Body Mass Index,簡稱BMI 世界衛生組織建議以BMI來衡量肥胖程度 出處:衛生福利部國民健康署 健康九九網站 http://health99.hpa.gov.tw/OnlinkHealth/Onlink_BMI.aspx
BMI程式一: 只計算BMI 解析: 了解問題、規劃、程式設計 讀取浮動點資料(double) (1) 讓使用者輸入身高、體重;先取二者變數名稱 (2) 計算BMI(算術運算式):結果之變數名稱及型態、 指定敘述(assignment statement) (3) 輸出BMI 更熟悉java程式結構 讀取浮動點資料(double) double height = input.nextDouble();
BMI程式一流程圖 (flow chart) 程式開始 循序(sequence) 輸入身高 輸入體重 單位轉換(身高cm -> m) 計算BMI 輸出BMI 結束程式
只計算BMI import java.util.Scanner; public class BMI_1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print(“輸入身高(公尺):”);//提示訊息 double height = input.nextDouble();//讀取浮動點資料(double) System.out.print("輸入體重(公斤):"); double weight = input.nextDouble(); double bmi = Math.round((weight/ (height*height) )* 100) / 100.00; System.out.println("身高:"+height+"公尺, 體重:"+weight+"公斤"); System.out.println("BMI:"+bmi); }//end of main }//end of class
浮動點之小數位數 double bmi = weight/ (height*height); double bmi = Math.round((weight/ (height*height) )* 100) / 100.00;
輸入整數資料及整數變數 int nn = ipt.nextInt(); int n1=nn%10; int n2=nn/10; 輸入整數資料 運用nextInt方法讀取使用者所輸入整數資料,再放入 nn整數變數 int :是一種變數型態,用以存放整數資料(integer) int n1=nn%10; 求得除以10之餘數 int n2=nn/10; 求得除以10之商
未完成之程式 import java.util.*; public class input_int{ public static void main(String args[]){ System.out.print("Please input a 3-digit decimal :"); Scanner ipt = new Scanner(System.in);//產生Scanner物件 int nn = ipt.nextInt(); //讀取整數(integer)資料 int n1=nn%10; //求餘數 int n2=nn/10; //除法 System.out.print("You input nn="+nn+"; first digit="+n1+";"); System.out.println("higher digit="+n2); }//main() }//class
System.out.print("Please input a 3-digit decimal:"); Scanner ipt = new Scanner(System.in); int nn = ipt.nextInt(); int n1=nn%10; int n2=nn/10; System.out.print("You input nn="+nn+"; first digit="+n1+";"); System.out.println("higher digit="+n2);
為何需要類別/ 函式庫(Library)/package? 站在巨人肩膀 有些程式細節非常複雜如Input/Output、圖形之 細部工作,因此必須會提供系統函數,讓設計者 直接引用 import java.util.*; *代表萬用(全部)Wildcard import Scanner class就在java.util package import java.util.Scanner; Specific import c語言用include
從循序到分支 程式會轉彎
判斷體位是否標準? 健康體位 不標準體位 選擇/分支 (selection) BMI>=18.5 && BMI<24 選擇/分支 (selection) False if (BMI>=18.5 && BMI<24) System.out.print("健康體位 Normal\n\n"); else System.out.print("不標準體位\n\n"); //source file: BMI-2a True 健康體位 不標準體位
BMI診斷分成二層次 if (bmi>=18.5 && bmi < 24) status = "正常Normal"; else import java.util.Scanner; public class BMI_2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("輸入身高:"); double height = input.nextDouble(); System.out.print("輸入體重:"); double weight = input.nextDouble(); double bmi = Math.round((weight/ (height*height) )* 100) / 100.0; String status; if (bmi>=18.5 && bmi < 24) status = "正常Normal"; else status = "不標準體位"; System.out.println("BMI:"+bmi+",狀態: "+status); }//main }//class
將BMI診斷分成三層次(簡化)
習題 習題2: 習題1:輸入矩形長、寬(整數)資料,求 面積及邊長、判斷為正方形或長方形 正方形或長方形條件? 如何解決? 請規畫其過程 (解法) 習題2:
未輸入三位整數時:從循序到分支 (nn>=100 || nn<=999) 複合敘述compound statements import java.util.*; public class input_int_a{ public static void main(String args[]){ System.out.print("Please input 3-digit decimal:"); Scanner ipt = new Scanner(System.in);//產生Scanner物件 int nn = ipt.nextInt(); if (nn>=100 && nn<=999) { //compound statements int n1=nn%10; int n2=nn/10; System.out.print("You input nn="+nn+"; first digit="+n1+";"); System.out.println("higher digit="+n2); } else System.out.println(“你輸入資料不是三位數!!”); //單一敘述single statement }//main() }//class (nn>=100 || nn<=999) 複合敘述compound statements
條件:邏輯運算式 (立即搶答) if (nn>=100 && nn<=999) && : and (及) 數值範圍? If (nn>=100 || nn<=999) || : or (或) If (nn<100 || nn>999) If (nn<100 && nn>999) if !(nn>=100 && nn<=999) ! : not (反)
再談指定/派敘述 = (assignment statement) 何者正確? X+1=y-2; If (X+1=y-2) ….. If (X+1==y-2) ….. X=y; If (X=y) …. If (X==y) …