前言:
只要是c++有關於指標的都會記錄在這裡,不定期新增內容。
2016/12/21
10035 - Primary Arithmetic
這是我自己的寫法,沒想到竟然寫得出來,盡管彈性不好,但自己動手寫一次思考一下很重要。
再來看看書上的寫法:
值得學習的地方有....
第11行while:把判斷0 0的狀況寫在這一行。
第3~8行與15、16行的函式寫法:另外寫個函式把值存入陣列做處理,注意該函式for迴圈中的n!=0,也可這樣寫,和第三個參數int &cnt,這是用來存這個值有幾個位數用的,假設值為4889,第6行每除一次少一個位數,直到這個位數除到變0為止,所以會做4次,而&cnt參考至lenA的記憶體位址,等於最後lenA的值也是4。
第17行:max()函數會取最大的值。
第19~26行:其實第22行可以省略,這行只是把相加的值存入陣列而已,但題目只需判斷進位次數。這迴圈就是判斷相加的進位次數,可看到第19行 i<lenM,試問,我們要怎麼知道我們判斷進位次數的for迴圈要做幾次?還是直接給它設一個固定且夠的值就好?所以我們需要知道兩數裡面位數最多的數是誰,並且有幾位數,第17行及divide函式cnt就是在做這件事。
#include <iostream> using namespace std; int PTT(int d,int array[]){ for(int i=0;i<=3;i++){ array[i]=d%10; d=d/10; } } int main() { int arr[5]={}; int brr[5]={}; int r=0,m=0;//r為第一個數,m為第二個數 while(cin>>r>>m){ if(r==0 && m==0) break; int carryok[10]={0}; int count=0; PTT(r,arr); PTT(m,brr); for(int i=0;i<4;i++){//判斷進位的迴圈 if(arr[i]+brr[i]+carryok[i]>= 10){ carryok[i+1]++; count++; } } /*if(arr[0]+brr[0] >= 10){//個位數 carryok++; count++; } if(arr[1]+brr[1]+carryok>=10){//十位數 carryok_2++; count++; } if(arr[2]+brr[2]+carryok_2>=10){//百位數 carryok_3++; count++; } if(arr[3]+brr[3]+carryok_3>=10){//千位數 carryok_4++; count++; }*/ switch(count){ case 0: cout<<"No carry operation."<<endl; break; case 1: cout<<count<<" carry operation."<<endl; break; case 2: cout<<count<<" carry operations."<<endl; break; case 3: cout<<count<<" carry operations."<<endl; break; } } }
再來看看書上的寫法:
#include <iostream> using namespace std; int divide(int n,int arr[],int &cnt){ for(cnt=0;n!=0;cnt++){ arr[cnt]=n%10; n=n/10; } } int main() { int a,b; while(cin>>a>>b && (a!=0 || b!=0)){ int lenA=0,lenB=0; int arrA[11]={0},arrB[11]={0}; int sum[12]={0}; divide(a,arrA,lenA); divide(b,arrB,lenB); int lenM=max(lenA,lenB); int ans=0; for(int i=0;i<lenM;i++){ sum[i]=sum[i]+(arrA[i]+arrB[i]); if(sum[i]>=10){ sum[i]=sum[i]-10; sum[i+1]++; ans++; } } if(ans==0){ cout<<"No carry operation."<<endl; } else if(ans==1){ cout<<"1 carry operation."<<endl; } else cout<<ans<<" carry operation."<<endl; } }這樣寫法很彈性。
值得學習的地方有....
第11行while:把判斷0 0的狀況寫在這一行。
第3~8行與15、16行的函式寫法:另外寫個函式把值存入陣列做處理,注意該函式for迴圈中的n!=0,也可這樣寫,和第三個參數int &cnt,這是用來存這個值有幾個位數用的,假設值為4889,第6行每除一次少一個位數,直到這個位數除到變0為止,所以會做4次,而&cnt參考至lenA的記憶體位址,等於最後lenA的值也是4。
第17行:max()函數會取最大的值。
第19~26行:其實第22行可以省略,這行只是把相加的值存入陣列而已,但題目只需判斷進位次數。這迴圈就是判斷相加的進位次數,可看到第19行 i<lenM,試問,我們要怎麼知道我們判斷進位次數的for迴圈要做幾次?還是直接給它設一個固定且夠的值就好?所以我們需要知道兩數裡面位數最多的數是誰,並且有幾位數,第17行及divide函式cnt就是在做這件事。
2016/12/16
C++ 像陣列的Vector
- Vector可代替陣列,也可當加強版陣列
- 可用陣列形式操作Vector
- 使用前,加入表頭檔#include <vector>
- 使用前先設定好長度、型態 vector<int> ivector(10);//表型態為int,長度為10
- 可用size()看自己長度
- 可用empty()看是否空
2016/12/15
2016/11/30
M90H023:三角形重心
//公式:(a1+a2+a3/3,b1+b2+b3/3) #include <iostream> using namespace std; int main(){ double a1=0,a2=0,a3=0; double b1=0,b2=0,b3=0; double x=0,y=0; cin>>a1; cin>>b1; cin>>a2; cin>>b2; cin>>a3; cin>>b3; x=(a1+a2+a3)/3; y=(b1+b2+b3)/3; cout <<"("<<x<<","<<y<<")"; }
M90H011:整數商餘
#include <iostream> using namespace std; int main(){ int a=0,b=0,c=0,t=0; cin>>a; cin>>b; c=a/b; t=a%b; cout << endl; cout <<a<<" / "<<b<<"="<<c<<"\n"; cout <<a<<" mod "<<b<<"="<<t; }
F020:計算BMI
#include <iostream> using namespace std; int main(){ double w,h,bmi; cin>>h; cin>>w; bmi=w/(h*h); cout << bmi<<"\n"; if(bmi<18.5)cout << "too thin"; else if(bmi>=18.5&&bmi<24)cout << "standard"; else cout <<"too fat"; return 0; }
M90H007:考試調分(低成60高100)
#include <iostream> using namespace std; int main(){ int a,minScore=9999,maxScore=-9999; int scores[60]; for(int i=0;i<60;i++){ cin >>a; scores[i]=a; if(a>maxScore) maxScore=a; if(a<minScore) minScore=a; } for(int i=0;i<60;i++){ int ans=(100-60)*(scores[i]-minScore)/(maxScore-minScore)+60; cout <<ans<<"\n"; } return 0; }
2016/6/2
徹底修改Android 套件、應用程式ID、專案名稱
以Android Studio為例,我們要把一個舊的專案名稱,都改成新的專案名稱。
與專案名稱、ID有關的有3個地方:
- 專案資料夾
- 套件名稱
- Gradle的應用程式ID
- string.xml
2016/6/1
2016/5/28
台南裕農路 清淡爽口的老主顧滷味
來台南讀書也待了四年,覺得台南真是一個隨處都有美食的地方
尤其是台南的滷味,選擇真的很多,時常晚餐宵夜配著滷味看著連續劇真是人生一大享受
今天就來介紹一家滷味,這家老主顧滷味位在台南東區裕農路上,自己也吃了很多次, 真心覺得好吃的東西要推薦給大家!
尤其是台南的滷味,選擇真的很多,時常晚餐宵夜配著滷味看著連續劇真是人生一大享受
今天就來介紹一家滷味,這家老主顧滷味位在台南東區裕農路上,自己也吃了很多次, 真心覺得好吃的東西要推薦給大家!
2016/5/20
PHP PDO Select 從資料庫中查詢資料
發現之前學一陣子的PHP,太久沒碰差點忘掉了,而好不容易也玩過PDO,怎可以就這樣忘光光呢,發現會的東西一定要保持住,所以想寫篇文章來做個筆記。
本篇主要就是講基本的用PDO從資料庫中讀取資料至網頁來。
本篇主要就是講基本的用PDO從資料庫中讀取資料至網頁來。
2016/5/17
2016/5/12
匿名內部類別(Anonymous inner class)
例1,static class A就是匿名內部類別,用參考名稱z,去呼叫showMe()。
package anonymous1; public class Anonymous1 { static class A{ int i =0; public String showMe(){ return "This is X"; } } public static void main(String[] args) { final String ff="final"; //如果要在內部匿名類別中使用某個方法中的變數,它必須宣告為 final A z = new A(){ //匿名類別override showMe方法 public String showMe(){ return "This is Z"+i+ff; //可存取A類別的成員 } }; //注意分號別漏掉 System.out.println(z.showMe()); } } //run: //This is Z0final
2016/5/11
C++的#include <iostream> 與名稱空間namespace
前言:
這篇主要是討論C++底層的一些觀念的東西。
我覺得在學一個新東西前,一定要先了解他的來由始末,而不是只懂皮毛,初學者也別小看C++一開始的Hello World,這麼一小段程式背後還是有很多東西可以學,至少要懂它每段語法結構,和它運作的概念。
ps..這篇文章實際標題是C++的#include <iostream> 與名稱空間namespace,因為<iostream>含特殊字元,不然不能直接顯示出來,幸好上次有碰過這問題,所以這網站真的好用。
2016/5/10
interface介面:Java為例
接下來討論interface介面這東西,先假設我們要做一個海洋樂園遊戲,也假設我們不會用interface,也許你會先定義fish這類別且有swim():
public abstract class Fish { protected String name; public Fish(String name) { this.name = name; } public String getName() { return name; } public abstract void swim(); }每種魚游泳方式可能不一樣,所以swim()為abstract,那class也要abstract了。
2016/5/9
在Blogger中貼程式碼
以下是成果
public class Shape2D { // define super class public double area() { // all Shape2D have their own area return 0; } } public class Rectangle extends Shape2D { private double length, width; public Rectangle(double l, double w) { // define constructor length = l; width = w; } public double area() { // Override return length * width; } } public class Circle extends Shape2D { private double radius; public Circle(double r) { radius = r; } public double area() { // Override return 3.141592654 * radius * radius; } } public class Parallelogram extends Shape2D { private double top, bottom, height; public Parallelogram(double t, double b, double h) { top = t; bottom = b; height = h; } public double area() { // Override return (top + bottom) * height / 2.0; } } publicclass Main { public static double sum(Shape2D[] shapes) { double total = 0; for (int i = 0; i < shapes.length; i++) { total += shapes[i].area(); // use Virtual Function to calculate area of Shape2D // Without Virtual Function, value of Shape2D.area() will be 0 } return total; } public static void main(String[] argv) { Shape2D[] data; // array of reference to Shape2D data = new Shape2D[5]; // create array object data[0] = new Rectangle(2.4, 3.8); // Polymorphism data[1] = new Circle(3.9); data[2] = new Parallelogram(3.5, 6.7, 10.2); data[3] = new Rectangle(5.3, 7.2); data[4] = new Circle(4.6); System.out.println("Sum of all Shape2D is "+sum(data)); } }
2016/5/8
protected:Java為例
本篇參考良葛格-protected 成員
拿之前RPG遊戲拿說,現在我們想顯示角色細節,要這樣寫:
拿之前RPG遊戲拿說,現在我們想顯示角色細節,要這樣寫:
1 2 3 4 | SwordsMan swordsMan = new SwordsMan(); ...略 System.out.printf("劍士 (%s, %d, %d)%n", swordsMan.getName(), swordsMan.getLevel(), swordsMan.getBlood()); |
2016/5/6
抽象類別與方法abstract
承上篇:多型(Polymorphism):重新定義實作@Override
並參考1:良葛格-抽象方法、抽象類別
參考3:Gossip@Openhome
abstract method宣告方式:不用{},直接 ; 結束即可。
並參考1:良葛格-抽象方法、抽象類別
參考3:Gossip@Openhome
參考4:Davidou's Blog-[Java]6.抽象(Abstract)與介面(Interface)
參考5:Java 介面(Interface)與抽象類別(Abstract class)的差異
參考5:Java 介面(Interface)與抽象類別(Abstract class)的差異
如果一個class裡有一個抽象方法abstract method,那這個類別就必須定義為抽象類別abstract class 。
1 2 3 4 5 6 | package Cast; public abstract class Role { ...... public abstract void fight(); ...... } |
abstract class宣告方式:一定要在class前加abstract關鍵字。
2016/5/4
多型(Polymorphism):重新定義實作@Override
承上篇:OOP:多型(Polymorphism) 以Java為例、protected:Java為例
前言:這篇主要是探討Java中重新定義Override,根據參考資料自己做的筆記與心得,如日後有新發現都會陸續增加。
2016/5/3
OOP:多型(Polymorphism) 以Java為例
參考2暨南教科書多型基本觀念
參考3什麼是物件導向(3):Polymorphism
參考4Java 快速導覽 - 物件導向概念 多型
參考5劉逸-論物件導向part 5:Polymorphism
參考6程式設計俱樂部-OOP 中對 "多型" 的理解
參考7歐萊禮-多型
這裡主要是討論OOP多型的概念,爬了些資料自己做些整理。
首先看到參考1良葛格所寫,它把多型想成「is-a 關係」(是一種關係)來看,讓初學者很容易初步的理解多型的概念,與什麼時候的多型寫法會編譯失敗
參考3什麼是物件導向(3):Polymorphism
參考4Java 快速導覽 - 物件導向概念 多型
參考5劉逸-論物件導向part 5:Polymorphism
參考6程式設計俱樂部-OOP 中對 "多型" 的理解
參考7歐萊禮-多型
這裡主要是討論OOP多型的概念,爬了些資料自己做些整理。
首先看到參考1良葛格所寫,它把多型想成「is-a 關係」(是一種關係)來看,讓初學者很容易初步的理解多型的概念,與什麼時候的多型寫法會編譯失敗
2016/5/1
NetBeans IDE 8.1 更換主題theme
參考資料 http://codesleepshred.com/dark-netbeans-themes-oblivion-revival-and-monokai/
這網址提供兩個主題一個sublime的monokai和Oblivion Revival ?
我選sublime的monokai
附上成果
結果我是覺得還可以,只是它那綠底的反白我不太喜歡,但應該是可以調改天研究
monokai套進去後,不是那樣反白橘色的,反白後的文字也不是白的,我另外調的,稍微筆記一下...畢竟也是找了下....
NetBeans IDE>上排工具>選項>Fonts&Colors>Highlighting>Selected Text
Foreground:反白後的文字顏色
Background:反白的背景顏色
Effects:反白後是否要有底線之類的,可自玩玩看
這網址提供兩個主題一個sublime的monokai和Oblivion Revival ?
我選sublime的monokai
附上成果
結果我是覺得還可以,只是它那綠底的反白我不太喜歡,但應該是可以調改天研究
monokai套進去後,不是那樣反白橘色的,反白後的文字也不是白的,我另外調的,稍微筆記一下...畢竟也是找了下....
NetBeans IDE>上排工具>選項>Fonts&Colors>Highlighting>Selected Text
Foreground:反白後的文字顏色
Background:反白的背景顏色
Effects:反白後是否要有底線之類的,可自玩玩看
OOP:繼承(Inheritance) 以Java為例
本篇參考 http://openhome.cc/Gossip/Java/Inheritance.html
繼承的目的就是為了避免多個類別重複相同的實作。
先假設今天要開發一個RPG遊戲,一開始角色有劍士和魔法師,先定義劍士:
再來是魔法師:
可看到上面粗體+斜體+底線的地方與劍士重複了?重複的東西幹嘛一直寫呢?所以繼承就出現了
現在開始實作繼承(Inheritance)
步驟一:把重複的地方"拿出"去,當父類別,並且給父類一個新名字
步驟二:把子類別繼承父類別
現在來開始做
步驟一:把重複的地方"拿出"去,當父類別,並且給父類一個新名字叫Role
步驟二:把子類別繼承父類別
關鍵字extends繼承,把SwordsMan類別繼承Role類別,前面是子類別繼承父類別
Magician也一樣繼承Role:
如此一來,Role中定義的程式碼,SwordsMan與Magician中都有了
如何確定有真的繼承?試試看知:
注意,如果demoMagician與demoSwordsMan method沒有加static會編譯錯誤,因為main是static宣告,只有static能用static,還有final宣告的類別不能被繼承,否則會編譯錯誤!
換句話說,如果你不想你的類別被其他子類別繼承,那就請你把類別宣告成final
final class classname{
//...
}
還有,Java中,子類別只能繼承一個父類別,所以基本上你不會看到這種東西:
問題1:private成員可繼承嗎?可以
問題2:private成員繼承後,子類別可存取它嗎?不能,除非父類別提供method給子存取
反白看答案
繼承的目的就是為了避免多個類別重複相同的實作。
先假設今天要開發一個RPG遊戲,一開始角色有劍士和魔法師,先定義劍士:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
再來是魔法師:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
可看到上面粗體+斜體+底線的地方與劍士重複了?重複的東西幹嘛一直寫呢?所以繼承就出現了
現在開始實作繼承(Inheritance)
步驟一:把重複的地方"拿出"去,當父類別,並且給父類一個新名字
步驟二:把子類別繼承父類別
現在來開始做
步驟一:把重複的地方"拿出"去,當父類別,並且給父類一個新名字叫Role
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package Cast; public class Role { private String name; private int level; private int blood; public int getBlood() { return blood; } public void setBlood(int blood) { this.blood = blood; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public String getName() { return name; } public void setName(String name) { this.name = name; }} |
步驟二:把子類別繼承父類別
1 2 3 4 5 6 | package Cast; public class SwordsMan extends Role { public void fight() { System.out.println("揮劍攻擊"); }} |
關鍵字extends繼承,把SwordsMan類別繼承Role類別,前面是子類別繼承父類別
Magician也一樣繼承Role:
1 2 3 4 5 6 7 8 9 10 | package Cast; public class Magician extends Role{ public void fight() { System.out.println("魔法攻擊"); } public void cure() { System.out.println("魔法治療"); }} |
如此一來,Role中定義的程式碼,SwordsMan與Magician中都有了
如何確定有真的繼承?試試看知:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package rpg; import Cast.Magician; import Cast.SwordsMan; public class RPG { public static void main(String[] args) { demoSwordsMan(); demoMagician(); } static void demoSwordsMan() { SwordsMan swordsMan = new SwordsMan(); swordsMan.setName("Justin"); swordsMan.setLevel(1); swordsMan.setBlood(200); System.out.printf("劍士:(%s, %d, %d)%n", swordsMan.getName(), swordsMan.getLevel(), swordsMan.getBlood()); } static void demoMagician() { Magician magician = new Magician(); magician.setName("Monica"); magician.setLevel(1); magician.setBlood(100); System.out.printf("魔法師:(%s, %d, %d)%n", magician.getName(), magician.getLevel(), magician.getBlood()); }} |
注意,如果demoMagician與demoSwordsMan method沒有加static會編譯錯誤,因為main是static宣告,只有static能用static,還有final宣告的類別不能被繼承,否則會編譯錯誤!
換句話說,如果你不想你的類別被其他子類別繼承,那就請你把類別宣告成final
final class classname{
//...
}
還有,Java中,子類別只能繼承一個父類別,所以基本上你不會看到這種東西:
package Cast; public class Magician extends Role,Role2,...{ ............................. }
問題1:private成員可繼承嗎?可以
問題2:private成員繼承後,子類別可存取它嗎?不能,除非父類別提供method給子存取
反白看答案
NetBeans IDE 8.1 好用快捷鍵 筆記
區塊註解/反註解CTRL+SHIFT+C(已自訂為ALT+W)
批次修改變數名稱 CTRL+R
刪除整行CTRL+E
切換至前一個分頁或後一個分頁Previous Tab/Next Tab Ctrl+PgUp/PgDn
切換至上一個瀏覽的分頁 Ctrl+Tab
關閉目前分頁 Ctrl+w
打開剛剛關閉的分頁 Ctrl+Shift+t
以下是Mac OS:
程式碼提示(自動完成)⌘+\
單行註解 ⌘+/ (再按一次 解除註解)
多行註解⌘+shift+c (已自訂為⌃+A)
刪除這行 ⌘+E
選取所有同名變數,集體更換變數(好用!)⌃+R
幫你格式化程式碼 ⌃+Shift+f
清除Output內容 ⌘+L
切換標籤頁面 Fn+⌘+↓or↑
選擇目前這個字Select Word(像Sublime的⌘+D)⌘+D ,這功能需而外在Keymap設定,因Netbeans預設沒幫你設
設定部分:
關閉自動雙引號:Preference>Editor>Insert Closing Brackets Automatically>不要打勾
NetBeans MacOS快速鍵
批次修改變數名稱 CTRL+R
刪除整行CTRL+E
切換至前一個分頁或後一個分頁Previous Tab/Next Tab Ctrl+PgUp/PgDn
切換至上一個瀏覽的分頁 Ctrl+Tab
關閉目前分頁 Ctrl+w
打開剛剛關閉的分頁 Ctrl+Shift+t
以下是Mac OS:
程式碼提示(自動完成)⌘+\
單行註解 ⌘+/ (再按一次 解除註解)
多行註解⌘+shift+c (已自訂為⌃+A)
刪除這行 ⌘+E
選取所有同名變數,集體更換變數(好用!)⌃+R
幫你格式化程式碼 ⌃+Shift+f
清除Output內容 ⌘+L
切換標籤頁面 Fn+⌘+↓or↑
選擇目前這個字Select Word(像Sublime的⌘+D)⌘+D ,這功能需而外在Keymap設定,因Netbeans預設沒幫你設
設定部分:
關閉自動雙引號:Preference>Editor>Insert Closing Brackets Automatically>不要打勾
NetBeans MacOS快速鍵
2016/4/30
不定長度引數
http://www.codedata.com.tw/book/java-basic-source/ch11-2.htm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
訂閱:
文章 (Atom)