I've been wanting to take my mom on a vacation since my dad passed away.

Last night I found the Eastern Hotels & Resorts is offering a discount now.

Therefore, I'd like to make a reservation at that hotel on the first day of the spring break this year.

 

文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

● (一)判斷java程式無法執行原因
(1)JRE=> 如果換了電腦以後,原本可執行的*.class卻不能執行了,
要檢查該電腦是否有安裝JRE(JDK是編譯用) 
 
(2)動態class(main)/靜態class
=>如下例,如果有main方法,是可以執行的,但如果沒有main方法,
只有class ex1{}就無法執行,但兩個做法都可以編譯
class ex1{   public static void main(String args[]){ } }
 
(二)Object物件(一筆資料)=>一個物件(可以記錄下來)就想成是一筆資料
(1)資料庫紀錄的資料
 =>資料表(table):資料庫用資料表的方式來儲存資料
 =>每一筆資料的欄位(欄位就是field)標題(attribute屬性):
共同規則 、定義、一次重複使用 建立資料表時,
要先定義每個欄位的名稱(標題又稱細目),因為要儲存的是data,就牽涉
datatype也要先定義好(ex:姓名/電話/地=>String),
上述只要定義一次就可以針對每一筆資料重複使用這些定義和規則
 
String name1="a1";
String add1="b1";
String tel1="c1";
 
String name2="a2";
String add2="b2";
String tel2="c2";
 
String name3="a3";
String add3="b3";
String tel3="c3";
 
System.out.println("名:"+name1+"\t地址:"+add1+"\t電話:"+tel1+"\n");
System.out.println("名:"+name2+"\t地址:"+add2+"\t電話:"+tel2+"\n");
System.out.println("名:"+name3+"\t地址:"+add3+"\t電話:"+tel3+"\n");
 
*如果不用物件導向的方式直接寫程式,三筆資料就要九個變數,
如果需要改變規則像是改變資料類型,就需要一筆一筆去改變
 
(2)新增資料時
1.定義要在哪一張"資料表"(reference)=>定義資料的共同規則要在靜態的class
 2.新增這筆資料=>在動態class做
ex:
class ex2{
String name;
String add;
String tel;
}
*另外開一個靜態class ex2,先定義都會用到的3個欄位標題(屬性):name,add,tel
 
(3)新增物件(資料的方式)=>或稱"實體化;初始化"物件
*java中不能只定義變數或物件,一定要"初始化"ex:給初始值
語法:
類別    物件名 = new  類別();  
類別=>使用的class=>reference(要用哪一個class的規則來新增資料) 
=>等號左右兩邊的類別(class)要相同  
*如果要查程式碼的某個字是變數或是物件,可以直接用println(要查詢的內容),當輸出的是一個值,那就是變數,輸出的內容為aaa@xxxx
 則該查詢內容為物件,且其reference為@前的aaa
ex:
ex2 n1;
System.out.println(n1);
*ex2=>規則(類別),n1是第一筆資料 =>沒初始化之前,n1就像是表格的第一行但還沒產生實際的格子,初始化後才會產生格子
 
ex:
ex2 n1=new ex2();
ex2 n2=new ex2();
System.out.println(n1);
System.out.println(n2);
*因為class有很多筆資料,所以不能直接給值,要用new新增一張表的資料給n1
*如果把上述程式編譯後執行,會出現如下列內容,ex2=>代表n1和n2屬於哪個reference,@......,後面是一個16進位的序號代表n1和n2的記憶體位置
 
(三)new執行的步驟
**ex2=>代表n1和n2屬於哪個reference(要去執行哪個class,以後要查reference可以用這個辦法)
(1)配發記憶體=>實體化(stack)
=>new的背後就是一張記憶體表,如下圖,每一個class會有一個不同的記憶體
=>以上述例子來說,要查n1就是查ex2@(在ex2中)的xxxxxxx(n1的位置),後面的欄位代表n1的name, n1的add, n1的tel
(這邊的name、add、tel是沒有配記憶體的)
=>以ex2的例子來說,new就是給n1和n2一個記憶體位置
=>以java.util.Scanner sc = new java.util.Scanner(System.in);來說,new就是給sc一個記憶體位置
 
(2)產生初始值=>heap
=>heap是class中的每一個值所放的位置
=>heap這個動作是由new ex2()中的ex2來做
=>會把n1,n2的 name,add,tel給好初始值
=>不同資料類型的初始值不同,String的初始值為null,int的初始值為0, double的初始值為0.0,布林的初始值為false
=>如果程式要呼叫n1的name欄位,就要用n1.name
ex2:
String name;
int add;
double tel;
 
ex1:
ex2 n1=new ex2();
ex2 n2=new ex2();
System.out.println(n1);
System.out.println(n1.name); //null
System.out.println(n1.add);  //0
System.out.println(n1.tel);  //0.0
System.out.println(n2);
 
(3)如果有設計建構式(constructors),會執行建構式的動作=> new ex2() 的()部分  
 
例子:有一個輸入成績單的程式,要傳到資料庫
先分析欄位標題(即每筆資料的屬性)=>去分析除了使用者輸入的資料還需要保留多少資料(ex:這邊多了總分和平均)
1.先訂定管理的class(訂好所有人的共同規則or屬性)
class student{
String name;
int chi;
int eng;
int sum;
double ave;
void show(){
System.out.println(
"名:"+name+
"\t國文 :"+chi+
"\t英文:"+eng+
"\t總分:"+sum+
"\t平均:"+ave);
}
}
*定義5個屬性/欄位名稱和要重複使用的println功能=>當new的時候會一起使用
*java可以用enter換行程式碼,且不影響執行
**在設定管理的class時(在student.class),可以預設初始值,且初始值可以計算
**但在add.java新增資料時,機器不知道sum會隨著chi和eng的變動而變動
**當new的時候,他的步驟是
   1.student@xxxx配給s1記憶體位置
   2.查從String name;......到show()的資料(但show()這個method要呼叫才會執行),
   並且查是否有和此class相同名稱的contractor,有就會去執行
class student{
     String name;
int chi=60;
int eng=70;
int sum=chi+eng;
double ave;
}
 
add.java
s1.chi=90;
s1.eng=70;
s1.sum=s1.chi+s1.eng;
s1.show();//這邊outputs chi和eng分別為90和70,但sum會是130而非160
 
原因如下:
當在add.java指定s1.chi=65時,已經到堆疊第二層了,可是當執行s1.show()的時候,
機器只知道chi要抓第二層資料,但並不知道應該在sum上面再堆疊一層新的加總值
(因為機器不知道sum會隨著chi和eng的變動而變動)
所以某個變數有變動或是要做計算會影響到其他變數時,
要在new之後重新計算/run一次,變成s1.chi+s1.eng=s1.sum
所以用contructor(在new的時候產生)或method(事後修改用method)來設計就不需要再重新run一次了
 
 
*封裝的權限(被使用/呼叫的權限)=>public、protect、default、private
  當加了private以後,就無法直接引用
  ex:在student.class中,如果設定private int chi;到add.java用si.chi=65;,
  再去compiler,會出現無法存取的錯誤訊息
2.新增資料如果不使用建構式,可以在add.java直接給值,但這樣有很多問題,
像是想加規則條件都不能做 ex:要設定不接受負號"-"(負數),若沒有用private,
設定s1.chi=-65是可以過的
所以不建議這麼做,用建構式給定規則會比較好
ex:
sutdent s1=new student();
s1.show();//outputs皆為初始值
s1.name="aaa"; 
s1.chi=60;
*這邊指的是s1的name要為aaa,s1的chi要為60
(四)Contructours(相當於資料庫的驗證規則)
(1)"new"新增物件時最後執行的步驟
(2)名字必須與"class"名稱一樣
(3)語法:建構式名(引數){ 執行的步驟 }
=>建構式名與class名相同
eX:
class student{
String name;
private int chi;
private int eng;
private int sum;
private double ave;
student(){
     System.out.println("請輸入一位學生");  
}  //建構式
}
**新增資料時,所有要設定的規則都可以在建構式做
(包含:設定初始值、計算式、判斷式...)
class student{
...
student(){
chi=60;
eng=60;
sum=chi+eng;
ave=sum/2;
}
...
}
 
(4)Local(區域)/global(全域)變數的生命週期
=>this:當無法判斷是全域還是區域變數時(如ex3),
要指回物件本身的屬性(就是指我們在new一個物件時,一開始就定義的屬性)就要在前面加this
 
ex1:
class student{
String name;
private int chi;
private int eng;
private int sum;
private double ave;
 
student(){
int chi=60; //區域變數,只要在{}重設int就會產生一個新的變數
int eng=60; //區域變數
//這邊相加的時候,會先找在同一個 {}內的chi和eng,所以總分會是120
sum=chi+eng;
ave=sum/2;
}
 
void show(){
System.out.println(
"名:"+name+
//在找chi和eng時,會找同一層{}內的chi和eng,
//如果找不到就會往外找,找到最上面一開始定義student的chi和eng屬性,
//初始值都為0
"\t國文 :"+chi+
"\t英文:"+eng+
//因為sum在student()建構式中沒有另外定義,所以還是抓一開始定義的sum
"\t總分:"+sum+
"\t平均:"+ave);
}
}//輸出會得到國文:0 英文: 0 總分:120
**但是區域變數並不會這樣使用,而是用在引數(參數)處
**引數:用來引用外部資料(把外部key的資料帶入),如果沒有引數,就無法接收外部資料
ex2:
1.先將student建構式改成如下
student(int chi,int eng){  }
2.去compiler add.class會出現錯誤訊息
add.java內容如下:
student s1=new student ();
s1.show();
 
*錯誤訊息:因為contructor要求兩個int引數,可是add中沒有
 
3.帶入引數的方法為,在add.java中改為
student s1=new student (90,89);
s1.show();
**這邊的90,89的資料類型必須和student建構式中的引數int chi及int eng的資料類型相同
 
ex3:
student(int x, int y){
chi=x;
eng=y;
}
去run add.class,會有output 國文:90 英文:89
 
但java為了之後寫文件需要,會把引數的名字和欄位定義為一樣的單字
這時將x,y改為chi和eng,output會變成 國文:0 英文:0
student( int chi , int eng ){
chi=chi;
eng=eng;
}
這是因為chieng(紅色的)又被限定在這個{}內,所以又會去找同層的chi和eng,
就會找到 chieng,被指回int chi和int eng
但是在執行show()的時候,找的是一開始定義的屬性private int chi; 
private int eng;,沒有被上述建構式指到,所以還是0
**所以這邊要能跑出資料,要指回物件(student class)本身的屬性,
  要在chi和eng前面加上this,this指的就是student物件本身
  (this=>attribute of the object)
 
 
student.class
class student{
String name;
private int chi;
private int eng;
private int sum;
private double ave;
 
student(int chi,int eng){
if(chi>=0 && chi <=100 && eng>=0 && eng<=100){
this.chi=chi;
this.eng=eng;
sum=chi+eng;
ave=sum/2;
}else{
     System.out.println("0~100");
}
}
 
void show(){
System.out.println(
"名:"+name+
"\t國文 :"+chi+
"\t英文:"+eng+
"\t總分:"+sum+
"\t平均:"+ave);
}
}
 
add.class
class add{
public static void main(String args[]){
student s1=new student (-5,89);
s1.show();
     }
}
*在編譯add時,如果有查到裡面有其他的class,會連同這些class一起編譯
 
(5)Overloading(多載化;多種狀況)=>7/31
=>名稱一樣
=>引數不一樣
 
(五)UML(Unified Modeling Language)=>類別圖,是一種模組化的概念
1.類別名稱(class)
2.field區=>每一筆物件詳細的細目(變數)/attribute,其中"-"代表private
3.constructors
4.methods
=>每一個類別圖代表一個class,裡面只要寫摘要不要寫內容(內容是流程圖)
=>紅色的兩項最重要
 
 
 
 
 
 
文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

In the beginning I thought today would be a happy day because my boss was absenst.

However, I've been totally wrong since I heard one of my co-workers gave notice this afternoon.

After that, the atmosphere at my office was really bad. 

 

*give notice: to tell your employer that you will be leaving your job soon 

文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

● Loop迴圈,重複結構(連續)
(一)for(1;2;3){
      重複連續步驟.....
      }
1=>次數索引變數,要給初始值
2=>判斷loop是否停止或繼續做
  =>true:執行
      false:停止
*這邊2不一定要跟1有關,可以用迴圈之外的變數做判斷
  2其實和if是一樣的意思,所以可以用多個條件,但是不建議
3=>設計如何讓loop停止的規則=>計算是與2有關
ex1:
for(int x=1;x<6;x++){
System.out.println("x="+x+"\thello");
}
 
ex2:
int y=2;
for(int x=0; x<=50 && y<=30 ; x+=2 , y++){
System.out.println("x="+x+"\thello");
}
*這邊因為當x++超過50時,就變成false &&中斷機制發揮
,所以也不會再去判斷y<=30
 x++後面要加上,才能加第二個條件
 int y的宣告也可以放在for迴圈中
,變成 for(int x=0 , y=2; x<=50 && y<=30 ; x+=2 , y++)
 但建議for的條件不要設得太複雜
 
ex3:
for(int x=0,y=0; x<=100 && y<=30 ;){
System.out.println("x="+x+"\thello");
x=x+2;
x=2*x+1;
y=3*x-1;
} /
/outputs
x=0    hello
x=5    hello 
*也可以3的設定停止規則不寫,改放到迴圈中,如上述例子
 
ex4:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
System.out.println("x="+x+"\thello");
}
 
(二)while(條件式) 步驟..... }=>條件式(true/false)
      =>不確定總次數為多少時使用
ex:
int x=1;
while(x<=10){
System.out.println("x="+x+"\thello");
x++;
}
*while的條件式只能放一個,且不能定義變數,變數要先在外面定義好
 while的停止規則要放在{}中
 
(三)do步驟....     }while(條件式);
      =>和while的差別在於,當條件不符合時
      ,do...while會執行一次才停, while不會執行
      =>判斷式的起始值如果是固定值,兩者就會相同,
     但如果起始值是個不確定數(變數),結果就可能會不同
ex:
int x=1;
do{
System.out.println("x="+x+"\thello");
x++;
}while(x<=10);
    
(四)break(符合條件就停止)和contiune(不執行符合條件的那一次,其他繼續,只能在loop中使用)
ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
if(x==51) break;
System.out.println("x="+x+"\thello");
}
*break要搭配if來使用,如果這邊條件設定為if(n==51) break;
 代表當n輸入為51時才會break,輸入52還是會跑52個迴圈
 for/do...while/while可以在{}內加另外的條件設定
 
ex1:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
if(x==51) continue;
System.out.println("x="+x+"\thello");
}
*continue要搭配if來使用,執行時會直接跳過x==51不做,往下繼續做,如下圖
 
ex2:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
if(x>=41 && x<=51) continue;
if(x>=71 && x<=80) continue;
if(x==101) break;
System.out.println("x="+x+"\thello");
}
*當x在41~51中跳過,x在71~80中也跳過,x=101後停止執行,如下圖
  
  
(五)label標籤=>與巢狀迴圈搭配使用
=>類似網頁的錨點功能,作為位置的標記
=>java的標記功能只能用在loop,針對loop給一個編碼(可任意取名字)
=>做法為在迴圈的前一行給個代號,如: a:
ex:九九乘法表
for(int x=1;x<=9;x++){
     for(int y=1;y<=9;y++){
          System.out.print(x+"*"+y+"="+(x*y)+"\t"); 
     }
     System.out.println();
}
* System.out.print()是不換行, System.out.println()是要換行,
  且可單獨列出來不帶入內容作為換行之用
  所有的regular expression都是針對字串使用,所以都要加上""
 
ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
System.out.println();
*當n=4,m=7時,結果如下圖,可以知道,
 第一個for決定多少列(橫),第二個for決定多少欄(直)
 
ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入列數");
int n=sc.nextInt();
System.out.println("請輸入欄數");
int m=sc.nextInt();
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
System.out.print(" *");
}
System.out.println();
}
*可以用*做表格,如下圖
 
ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入列數");
int n=sc.nextInt();
System.out.println("請輸入欄數");
int m=sc.nextInt();
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
     if(x==7) break;
     if(y==8) break;
     System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
     System.out.println();
}
*break的限制條件:當遇到巢狀迴圈時,break只能控制所在的那一層迴圈停止
  所以上述例子,只停了x=7*1 ,7*2 ,7*3...那一層
 
調整的作法有兩種:
(一)把 if(x==7) break;拉到上一層迴圈(迴圈很多層的時候容易出問題)
for(int x=1;x<=n;x++){
     if(x==7) break;
for(int y=1;y<=m;y++){
     if(y==8) break;
     System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
     System.out.println();
}
(二)使用label
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入列數");
int n=sc.nextInt();
System.out.println("請輸入欄數");
int m=sc.nextInt();
a:
for(int x=1;x<=n;x++){
b:
for(int y=1;y<=m;y++){
     if(x==7) break a;
     if(y==8) break;
     System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
     System.out.println();
}
*  if(x==7) break a;代表把迴圈從標記為a的那一層開始使用停止條件
 
實作練習
(一)找零錢程式(尺:26元/筆:39元/圓規:45元)
1.需求:
a)使用者輸入數量(X,Y,Z)=>計算總價(Sum)(應付)
b)輸入使用者付款金額(pay)=>計算找零多少元?
class ex3{
public static void main(String args[]){
java.util.Scanner sc = new java.util.Scanner(System.in);
 
int pay,sum;
 
System.out.println("請輸入尺的數量");
int x=sc.nextInt();
System.out.println("請輸入筆的數量");
int y=sc.nextInt();
System.out.println("請輸入圓規的數量");
int z=sc.nextInt();
sum=26*x+39*y+45*z;
System.out.println("一共"+sum+"元\n");
System.out.println("請輸入付款金額");
pay=sc.nextInt();
System.out.println("找你"+(pay-sum)+"元");
}
}
*變數可以一次定義多個,用","隔開即可
 
class ex3{
public static void main(String args[]){
java.util.Scanner sc = new java.util.Scanner(System.in);
 
int pay,sum;
 
System.out.println("請輸入尺的數量");
int x=sc.nextInt();
System.out.println("請輸入筆的數量");
int y=sc.nextInt();
System.out.println("請輸入圓規的數量");
int z=sc.nextInt();
sum=29*x+39*y+49*z;
System.out.println("一共"+sum+"元\n");
System.out.println("請輸入付款金額");
pay=sc.nextInt();
int h=(pay-sum)/100;
int t=(pay-sum-100*h)/10; //((pay-sum)%100)/10
int o=(pay-sum-100*h-10*t);//(pay-sum)%10
System.out.println("找你"+h+"張一百元\n");
System.out.println("找你"+t+"個十元\n");
System.out.println("找你"+o+"個元\n");
System.out.println("總共找你"+(pay-sum)+"元");
}
*上例變化,利用%算出百元、10元、1元個找多少
 
(二)設計一程式判斷是否錄取(學校)
需求:
1.輸入3科目=>國(chi)、英(eng)、數(math)
2.分2階段篩選
a)第一階段:總分滿200分(sum)
b)第二階段:數學75分=>兩階段都符合才錄取
程式要求:
1.輸入分數項目
2.判斷
a)是否錄取
b)不錄取的原因為何
=>第一階段未滿200
    第二階段滿200,數學未達標
class ex4{
public static void main(String args[]){
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入國文分數");
int chi=sc.nextInt();
System.out.println("請輸入英文分數");
int eng=sc.nextInt();
System.out.println("請輸入數學分數");
int math=sc.nextInt();
int sum=chi+eng+math;
if(sum>=200){
if(math>=75){
System.out.println("總分:"+sum+"分,數學:"+math+"分,錄取!");
}else{
System.out.println("總分:"+sum+"分,數學:"+math+"分,未錄取!");
}
}else{
System.out.println("總分:"+sum+"分,數學:"+math+"分,未錄取!");
}
}
}
 
(三)等差數列(1+2+3+x+....+n=sum)
1.堆疊=>用總分作堆疊 (sum=sum+1=>sum+=1往上疊的概念)
2.迴圈
x=1=>sum=1
x=2=>sum=1+2=sum+2
x=3=>sum=1+2+3=sum+3
x=4=>sum=1+2+3+4=sum+4
導出公式=>sum=sum+x
class ex5{
public static void main(String args[]){
     java.util.Scanner sc = new java.util.Scanner(System.in);
     int sum=0;
     int n=sc.nextInt();
     for(int x=1;x<=n;x++){
     sum=sum+x;
     System.out.println("x="+x+"\tsum="+sum);
}
}
}
 
文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

I invited my husband to exercise with me to strengthen his immune system.

I started to collect my works become a portfolio and  hoped  the portfolio would come in handy at next job interview.

Everyday, I have a lot of things to do but I don't have enough time.

 

*immune system:the system by which your body protects itself against disease

*come in handy:派上用場

 

文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

main(String args[])中的[]如果沒寫,可以compilier,
但不能執行,會出現錯誤訊息:找不到主方法,這就代表main有錯!
 
class name最好和檔名一致,
因為compilier後產生的*.class檔名會以前面的class name命名
 
● Operator 運算子、元、符號
(一)算術運算子( +-*/% )
int x=10;
int y=3;
 
System.out.println("x+y="+(x+y));
System.out.println("x+y="+(x-y));
System.out.println("x+y="+(x*y));
System.out.println("x+y="+(x/y));
//要有小數點要先把分子或分母任一變成double
System.out.println("x+y="+(double)(x/y));
//在x/y的時候已經先把結果視為int,去掉小數才轉型為double
System.out.println("x+y="+((double)x/y));
System.out.println("x+y="+(x%y));
 
(二)指定運算子(遞增/減)
1.   =  :等號的左邊一定要是變數(將變數視為容器),不能為計算式,
右邊可為值、變數或計算式 ,所以程式一定會先run右邊得到一個結果再給左邊
Int x=10;
x =20;
這時候,10還是存在,是一種資料堆疊的概念,有兩個不同時間點的x,
但在java中會永遠保持兩層,有第3層時會把第1層刪掉
Ex:
int x=10; // 第一層x
System.out.println("x="+x);
x=x+20; //第二層x
System.out.println("x="+x);
x=2*x+25; //第三層x已抽掉第一層x,用第二層x計算
System.out.println("x="+x);
 
2.+=、-=、*=、/=、%=
Ex:
int Chinese=98;
//Chinese=Chinese+10;
Chinese+=10;
System.out.println(Chinese);
 
//Chinese=Chinese-10;
Chinese-=10;
System.out.println(Chinese);
 
//Chinese=Chinese*10;
Chinese*=10;
System.out.println(Chinese);
 
//Chinese=Chinese/10;
Chinese/=10;
System.out.println(Chinese);
 
//Chinese=Chinese%3;
Chinese%=3;
System.out.println(Chinese);
 
 
3.++,--
X++=>x+1
X--=>x-1
運算符號有先後順序,所以++x和x++會不一樣
Ex:
int x=10;
int y;
++x; y=x //output x=11,y=11
y=x++; //output x=11,y=10,因為先做y=x;再做x=x+1;
y=++x; //output x=11,y=11,因為先做x=x+1;再做y=x;
 
(三)關係運算子(relation)=>判斷式用
1.結果(True/false)
2.>、<、>=、<=、==、!=
Ex:
int chi=65;
 
System.out.println("chi>60---->"+(chi>60)); //outputs true
System.out.println("chi<60---->"+(chi<60)); //outputs false
System.out.println("chi>=60---->"+(chi>=60)); //outputs true
System.out.println("chi<=60---->"+(chi<=60)); //outputs false
System.out.println("chi==60---->"+(chi==60)); //outputs false
System.out.println("chi!=60---->"+(chi!=60)); //outputs true
 
(四)條件運算子=>多個判斷條件
1.&&(AND)、||(OR)
EX:
int chi=70;
int eng=80;
System.out.println("chi>65 && eng>90---->"+(chi>65 && eng>90)); //outputs false
System.out.println("chi>65 || eng>90---->"+(chi>65 && eng>90)); //outputs true
 
2.^(XOR):至少一個true,但全都為true時會變false
Ex:
int chi=70;
int eng=95;
//outputs true
System.out.println("chi>65 || eng>90---->"+(chi>65 ^ eng<90));
//outputs true
System.out.println("chi>65 ^ eng>90---->"+(chi>65 ^ eng>90));
 
3.!(not):反轉結果把true=>false把false=>true
int chi=70;
int eng=95;
//outputs false
System.out.println("chi>65 && eng>90---->"+(!(chi>65 && eng>90)));
//outputs true
System.out.println("chi>65 ^ eng>90---->"+(!(chi>65) ^ eng>90));
 
(五)位元,位移運算子=>會轉成2進位計算,再轉10進位顯示成果
1.位元 :
&(AND=>乘):
5=>00000101
2=>00000010
=>00000000 =>10進位的0
EX:
int chi=70;
int eng=80;
// outputs false
System.out.println("chi>65 & eng>90---->"+(chi>65 & eng>90));
作法為:判斷chi>65為true=>1 eng>90為false=>0 1&0=>false
 
|(OR=>加):
5=>00000101
2=>00000010
=>00000111 =>10進位的7
 
^(XOR) :
7=>00000111
5=>00000101
=>00000010=>10進位的2
 
~(補數):正整數和負整數相對應到相同位置的值,
如:正整數開始為0對應到負整數開始為-1
Ex:
//outputs 整數5是第6個位置,去找負整數第6個位置就是-6
System.out.println(~5);
//outputs負整數-5是第5個位置,去找數第5個位置就是4
System.out.println(~(-5));
 
2.位移 :>>(向右移2位)、<<(向左移2位)
Ex:
System.out.println(5>>2); //outputs 1
5=>00000101 右移兩位=>000001,前面補0=>00000001=>10進位的1
System.out.println(5<<2); //outputs 20
5=>00000101 左移兩位=>000101,後面補0=>00010100=>10進位的20
 
●流程圖
代表開始/結束
代表一般的步驟;輸出(計算式,定義變數…)
代表輸入;鍵盤
 
流程圖範例
X:int; =>代表變數x的reference為int
ex:
class ex3{
     public static void main(String args[]){
          java.util.Scanner sc=new java.util.Scanner(System.in);
          System.out.println("請輸入一個數字");
          int x;
          x=sc.nextInt();
          System.out.println("您輸入的是:"+x);
     }
}
 
Java前一定要有功能文件
java.util.Scanner sc =>sc為變數,變數前即為reference(功能文件)
Scanner只能在dos下輸入資料
x=sc.nextInt(); =>nextInt()只能輸入整數,把key進去的值放入x
“.”代表把nextInt()從java.util.Scanner sc call出來
 
實作:尺25元,筆39元
流程圖
java.util.Scanner sc=new java.util.Scanner(System.in);
System.out.println("請輸入尺的數量");
int x;
x=sc.nextInt();
System.out.println("請輸入筆的數量");
int y;
y=sc.nextInt();
System.out.println("一共是"+(25*x+39*y)+"元");
 
在int y;前面可以再new一次java.util.Scanner作出第二個物件sc2
java.util.Scanner sc2=new java.util.Scanner(System.in);
 
在這邊這兩個做法都是可以的,一個是同一物件執行兩次,
一個是兩個物件各執行一次
 
流程控制 =>條件判斷(true/false)
1.if(單選)
圖示法:代表圖為菱形,右邊的點代表 true(blue),左邊和下面的點代表false(orange)
(1)單一條件,單一選項
     語法:
     If(條件) 符合動作;
Ex: java.util.Scanner sc=new java.util.Scanner(System.in);
int chi=sc.nextInt();
if(chi>=60) System.out.println("及格");
*注意當只有一行的時候才可以省略{},如果有兩行以上敘述不可省略
 
(2) 單一條件,兩個選項
語法:
If(條件){ 符合……}else{不符合…..}
 
ex:
java.util.Scanner sc=new java.util.Scanner(System.in);
int chi=sc.nextInt();
if(chi>=60) {
System.out.println("及格");
System.out.println("恭喜");
}
else{
System.out.println("不及格");
System.out.println("加油");
}
 
(3)多個條件,單一選項
語法:
If(條件1){符合1…..}
  else if(條件2) {符合2…..}
  else if(條件3) {符合3…..}
  ….
  else{ 皆不符合}
 
Ex:
java.util.Scanner sc=new java.util.Scanner(System.in);
int chi=sc.nextInt();
if(chi>=91 && chi<=100){
     System.out.println("A");
}else if(chi>=76 && chi <=90){
     if(chi>=82){
          System.out.println("B+");
     }else{
          System.out.println("B-");
}
}else if(chi>=60 && chi <=75){
     System.out.println("C");
}else if(chi>=0 && chi <=59){
     System.out.println("D");
}else{
     System.out.println("0~100");
}
=>由分數高的往下做
 
(4) 三元運算子=>與if…else….一樣
語法 :條件? 符合(true): 不符合(false)
=>兩者都必須產生”值”,不能出現一個計算式或變數
=>?的用法和if一樣
=>通常三元運算會在程式只run一行且功能一樣或同樣為計算式時
Ex:
java.util.Scanner sc=new java.util.Scanner(System.in);
int chi=sc.nextInt();
System.out.println(chi>=60? "ok":"no");
 
 
(5) switch=>可單選/複選(資料類型和變數類型需要一致)
語法:
Switch(變數){
case 值1:
變數之值為1的動作
[break;]
case 值2:
變數之值為2的動作
[break;]
case 值3:
變數之值為3的動作
[break;]
…..
default:
皆不符合
}
=>調整break的位置,可以做成複選
(ex:case 2不放break,case3才放break,當符合case2會一直執行到case3)
=>break只能在switch和loop中使用
=>變數的限定
1.整數:byte,short,int
2.字元:char
3.字串:String
Ex:
 
java.util.Scanner sc=new java.util.Scanner(System.in);
System.out.println("會員等級:\n1)VIP\n2)金卡\n3)銀卡\n4)普通");
int member=sc.nextInt();
switch(member)
{
    case 1:
    System.out.println("VIP");
break;
case 2:
System.out.println("金卡");
break;
case 3:
System.out.println("銀卡");
break;
case 4:
System.out.println("普通");
break;
default:
System.out.println("1~4");
}
 
 
 
 
 
 
 
 
 
文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

My husband had the stomach flu yesterday , so I had to go to work by myself this morning.

I didn't know parking the scooter in front of my office building needed a special sequence until this morning.

After execrcising two days,  I felt energetic today.

 

*stomach flu:病毒型腸胃炎

 

文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

java跨平台
   Java 程式compilier後產生的*.class必須透過各個不同版本的jre
    才能跨平台與不同電腦溝通
   *.class=>jre=> mac os/windows/linux…
 
●所有純物件導向程式都會以class開頭
 
關於進位與位元
  
    因為是64位元電腦,10進位的0,在機器語言就是640
   8進位就會是201的組合
   16進會就會是401的組合
    依此類推
 
錯誤訊息說明
  看第一個error
  因為java開頭會有三種: class、interface、enum(小寫),用來定義功能
  出現下列錯誤訊息就是開頭定義功能有錯 
  
  ex1.java:5表示在第五行,^指出錯誤的地方,通常代表有字拼錯
    
 
Data type 資料類型前述
   1.=>功能
   2.文字/數字(可以加減乘除),不論變數或值,只要被” “框住全部都當作字串
   3.+的用法:
   數字+數字=數字中的加法
   文字+文字=兩個字串合併為一個字串
   文字+數字會把數字當作文字,變成一個字串
   System.out.println("10+20="+10+20);   //10+20=10+20
    在此,先判斷”10+20=”+10=>為文字+數字變字串
    再判斷”10+20=”+10為文字+20(數字)=>變字串
    compilier時,先確定  Call by reference(data type/java 的來源文件-jdk)
    compilier時,Call by values 後確定
    System.out.println("10+20="+(10+20));//10+20=30
    如果要用加法,先用括號括起來
 
Data type 基本類型
   數字:
   整數:long,int,short,byte
 (差別只在於位元大小)(byte:正整數0~127,負整數:-1~-128 )
  *整數會去小數:以下列為例,
     判斷時會先判斷10(int)/3(int)的結果是取用int
    所以要取整數去小數
   System.out.println(10/3); //outputs 3
   System.out.println(1/3); //outputs 0
     轉型為浮點數的方法,加上小數點,預設轉為double
  System.out.println(10/3.);
   浮點數:double,float,
   位階大小由大到小double>float>long>int>short>byte 
  (浮點和整數的大小不是用記憶體大小來看,
   因為浮點數是用計概的精準數換算的)
  
   字元:char只能有一個字元,並且用單引號框住,如果輸入數字,
  會自動對應到ASCII表去查找對應的字元
   char x='a'; //outputs a
   char x3=97; //outputs a
  
   布林:Boolean只有truefalse,在c就是1或0
   boolean x4=true;
 
*非基本類型因為有函式庫=>字串String:要加””
 
*當有兩個以上不同位階的數字混和運算時會取最大位階來運算,
  int x5=10+10+1.2 ;// error因為1.2變成double
  int x6=10+10+1.2f ;// error因為1.2f變成float
  int x7=(int)(10+10+1.2); //ok 因為右邊轉整數
  int x8=(int)(10+10+1.2f); //ok因為右邊轉整數
  long x9=(int)(10+10+1.2f); //ok因為右邊轉int 位階比long
  long x10=10+10+(int)(1.2f); //ok
 
變數 identify
   語法:DataType 變數=初始值(只有網頁語言不需要給datatype)
   變數在定義時,會先決定等號右邊的資料類型是否一致,
  且右邊位階不能比左邊大,最後才看值去計算
 
變數的定義錯誤
    x=20;
  
   因為當call by reference時,比對x java來源文件中有沒有資料(沒有給定datatype)
   因為沒有,所以顯示cannot find symbol
 
變數的 初始值:
   int x;
   System.out.println(x);
    錯誤訊息顯示x沒有初始值,在java中如果變數沒有給值,是無法使用的,
    連compilier都會有問題
    但如果只是int x;沒有使用這個變數,compilier是可以過的
  
 
變數的命名規則(先給初始值並定義資料類型)
   1.有大小寫的區分
   2.有功能的單字不能用來命名ex:class
   3.可搭配數字,但數字不能放在第一位
   4.可用的符號只有$_,其他符號不可用
   5.可用萬國碼unicode
 ex:int國文=98; System.out.println(國文-20); //outputs 78
 
c訂的規則
   輸入數字時,預設為int,但此時byte x=128; byte只到127所以出現錯誤訊息
   因為在compilier時,如果整數的設定類型不是int會自動由int轉換為所設定類型
 
 
數字位階大小晉升與轉型
       整數
   1.promotion=>晉升(變數)
   a)byte,short,(int因為記憶體空間夠大沒有這個問題)
      byte x=10;
      byte y=20;
      byte z=10+20;
      =>沒有問題,因為右邊為兩個值相加後的值小於127
      byte z2=x+y;
      =>有問題,因為這邊xy變數都是byte此時他不會管它實際上的數字,
          直接當作是 byte x + byte y
     (因為call by reference,他先看作是兩個byte相加)
          兩者相加是有可能超過127(假設兩者=127的話),會有問題,
          這時就會自動提升 x+y變成int且可能超過127
           所以會出現無法把int轉換為byte的問題
     
 
  2.casting轉型
  如上述問題,解決辦法有兩個
   a)int byte z2=x+y;直接升級為int但因為int32位元所占記憶體空間較大,
     如果不要占太多記憶體就不能用此方法
   b)轉型:byte z2=(byte)(x+y);x+yint轉為byte
    若是short則可以改為short z2=(short)(x+y);short z2=(byte)(x+y);
    轉型時,右邊可以轉為同等級會比較小(站記憶體空間比較小)的等級
 
浮點
  a)float
     10=>int
     10.0=>double,浮點數預設為double
     b)轉型:
     float x=10;
     //float y=10.0; =>因為.0double會有問題
     *double轉變為float的作法有三種
     float y2=(float)10.0;
     float y3=10.0f;
     float y4=10.0F;
 
跳脫字元(只有在字串時使用)
   \” \’ 可以正確顯示為一個字符
   \n:換行
   \t:跳格(一次空大約四個空格)
 
正規表示法regular expression(所有語言通用)=>之後教api一起提
 
 
 
文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

開始前先簡單地分享一下為什麼想寫筆記:

2017年在親友的鼓勵與支持下,

報名了勞動力發展署委外辦的智慧APP設計與行銷課程,

因為要面試與口試,所以很認真的準備了,畢竟自己是門外漢不是本科生,

又實在很喜歡很想要更有系統的學習寫程式,真的很擔心最後沒有上。

過程不多說,總之很幸運的成為這個課程的學員。

雖然上課前在網路上看到有人對這類課程的評價不高,

但實際上完課還是覺得受益匪淺。

所以想把自己的筆記分享出來,跟有興趣的朋友們一起學習討論。

 


 
(一) java環境工具:
 
1.JDK/JRE=>因為JDK無法打字,所以要先用Notepad++打字
2.Notepad++
3.測試=>DOS(cmd)
=>實務上會用netbeams(官網開發工具)或是eclipse(android),其他還有很多
 
(二)撰寫java步驟
 
1.原始碼(英文+代碼/source code):即自然語言,存檔時要加上.java(*.java)
  =>如果加了.java執行時還是不行,可以檢查副檔名是否被隱藏了
2.compiler編譯器(在dos環境):
=>javac *.java(把java都去compiler) =>可run的話,可確認jdk安裝成功
=>可以檢查語法,並同時產生機器碼/byle code(*.class)   
3.測試(抓bug):執行
=>java * (這邊不需要加副檔名,會自動抓上面產生的*.class)
=>這同時可確認jre可執行
 
(三)dos執行外部指令設定(只有在微軟的dos中要這樣做)
 
輸入javac ex1.java 會出現不是內部或外部指令,因為外部指令要指定路徑
1.javac和java這兩個指令的路徑在
C:\Program Files\Java\jdk1.8.0_141\bin下(看安裝在哪個位置)
2.電腦=>右鍵=>內容=>進階系統設定=>環境變數=>新增
名稱:path
值:貼上上述路徑,但如果已有路徑要先加上";"再貼上,不然其他程式可能會出問題
(如果加在上方會限定使用帳號,如果加在下方就不限定使用者)
3.關閉dos重開,再key一次 javac ex1.java
 
 
(四)dos用到指令(大小寫皆可)
 
1.查詢(清單):dir/w
=>查詢(詳細資料):dir
2.回上一層:cd..
3.回最上層:cd\
4.查詢所訂路徑資料夾:cd 資料夾\資料夾
5.清除畫面:cls
6.切換磁區:d:
7.指令的歷史紀錄:上下鍵
8.強迫中止執行:ctrl+c (所有介面都一樣)
 
(五)notepad++設定
 
1.因為使用dos,不認識utf編碼,所在使用時編碼要用ansi,否在註解在compiler時會出現亂碼,但只有dos環境需要這樣,在netbeam和eclips
=>設定:使用者自訂=>開新文件,編碼改為ansi
2.可增加設定字詞自動完成功能,如下圖
 
*安裝 java se (oracle=>trails and download=>middleware,這邊會放所有相關資源軟體)
=>安裝好會有jdk和jre的資料夾
 
* win7一般安裝軟體如果是32位元會放在programfiles x86,如果是64位元會放在 programfiles下
 
*如果再mac os 要使用terminal文字模式
 
 
 
 
 
 
 

 

文章標籤

muchone 發表在 痞客邦 留言(0) 人氣()

今年希望可以讓英文的寫作與口語慢慢能力提升,昨天在書店看到每天寫三句英文來提升英文能力,

於是決定每天都寫三句英文日記,慢慢練習!

如果大家發現英文句子很詭異,歡迎留言指教!

 

Today, the canker sore on my throat was bad  and was killing me when i was eating.

Hope my boss won't be at office everyday.

I started to play the JustDance for losing weight this moring, and I hoped I could persevere.

 

*canker sore:a sore area in the mouth of people or animals, caused by illness or a disease

*persevere:to continue trying to do something in a very determined way in spite of difficulties 

文章標籤

muchone 發表在 痞客邦 留言(1) 人氣()