讓我們打開我們昨天創建的MyFirstProgram
看看裡面的程式碼
using System;
namespace MyFirstProgram
{
class Program
{
static void Main(string[] args){
Console.WriteLine("Hello World!");
}
}
}
現在讓我們一行一行來看吧
using System;
這行所代表的意思是引用命名空間
下面所看見Console.WriteLine();
實際上全名為 System.Console.WriteLine();
由於在這邊引用了System 所以就不用每次調用這個方法的時候都打落落長的一串了
namespace MyFirstProgram
//namespace 命名空間名稱
//{
// 你的程式碼
//}
上方所提的命名空間(預設會跟你的專案名稱一樣),當然你也能改動他。
再來我們要寫的程式碼,都會被包在命名空間的大括弧下。
命名空間裡面可以有其他的命名空間(雖然很少這麼做)
還有一些class,interface,enum等等之後會介紹的結構(之後會介紹)
class Program
//class 你的類別名稱
//{
// 你的程式碼
//}
這邊宣告一個class
一個class裡面可能會有很多Method,Property,field等等
(後面會深入講解)
static void Main(string[] args){
// BLABLABLA
}
這邊算今天的重點之一
static 指的是靜態的物件 他不需要被new 即可實例化
void 指的是不回傳任何值
string[] arg 代表這專案執行所帶的環境參數
(這邊看不懂可以先跳過 後面會介紹)
這邊宣告了一個方法名稱Main()
也就是在你按下執行之後你的程式將會從blabla開始執行
本篇文章的程式碼會先打在
Main(){
//本文程式碼
}
Console.WriteLine(/*你想輸出的東西*/);
這行就是昨天在畫面上看見Hello World的關鍵
在括弧中輸入你想在小黑窗看見的東西
他就會出現
為什麼我在裡面輸入了文字 但是底下卻畫了錯誤
而且也執行不了呢
這是因為我打的文字屬於字串型態,所以需要用雙引號
紅色底線所代表的是編譯上的錯誤
也就是語法錯誤,是重大的錯誤
所以編譯器沒辦法讓你執行
我們重新加上雙引號執行
就能看見沉重的我了
在C#裡面我們用//來表示單行的註解 用/* 要註解的程式碼 */表示多行註解
註解的程式碼不會被執行
例如
//Console.WriteLine("HelloWorld");
/*
Console.WriteLine("HelloWorld");
Console.ReadLine();
*/
在C#的世界裡 資料是有型別的(現實生活也是)
你不會對著一匹馬說他是一隻鹿
所以我們就來認識認識一些常用的資料型別
資料型別|中文|說明
----|----
bool |布林|值為true或是false
int|整數|值從-2147483648~+2147483647(int32)
long|長整數|值從負的2的64次方到正的2的64次方-1(int64)
float|浮點數|就是帶小數點的數字(±1.5 x 10^−45 到 ±3.4 x 10^38)
double|倍精確數|厲害一點的帶小數點的數字(±5.0 × 10^−324 至 ±1.7 × 10^308)
char|字元|Unicode 字元 像是'a','b','@','{','小'等等
string|字串|一串文字 實際上為字元陣列 像是 "小夫我要進來了", "大...大雄"
在我們要指鹿為馬之前
要先定義什麼是馬
所以我們來宣告變數吧
語法會像:
int zero;//宣告一個整數 名稱叫做zero
int zero = 0;//宣告一個整數 名稱叫做zero 他的值為0
int zero,one;//宣告2個整數 名稱分別叫做zero,one
int zero=0,one=1;//宣告2個整數 名稱分別叫做zero,one zero的值為0 one的值是1
float f = 1.01;//宣告一個浮點數 名稱叫做f
string me = "帥哥";//宣告一個字串 名稱是me 值是帥哥 注意字串要加上"的符號
char alpha = 'a'; ////宣告一個字元 名稱是alpha 值是a 注意字元要加上'的符號
這邊的=符號跟數學上的=不同
指的是Assign(賦值)
也就是將等號右邊的值賦予給左邊
像是
int a;//宣告整數a
a = 0;//a現在是0
a = 3;//將3指派給a a現在是3
要注意的是變數名稱不能跟C#保留字相同
見連結 https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/
這邊只介紹幾個常用的
加+
減-
乘*
除/
還有比較特殊的取餘數%
int a = 1+2 //3
int b = 2-1 //1
int c = 2*2 //4
int d = 9/3 //3
int e = 9%2 //1
在字串和字串中用+來連接字串(-*/%無法用在字串身上)
string me = "我";
string handsomeboy = "金城武本人"
Console.WriteLine(me + handsomebody);
//我金城武本人
回傳的通常是true 或 false 的bool
有 (==) 相等(1個等號不是等於,兩個總該是了吧)
(>=) 大於等於
(<=) 小於等於
(>) 大於
(<) 小於
(!=) 不等於
int a = 1,b = 1,c = 2
a==b //true
a<=b //true
a>=c //false
a!=c //true
符號 | 意義 | 用法 |
---|---|---|
&& | AND | A&&B A跟B都成立時才為true |
|| | OR | A||B A或B有一成立時為true |
! | NOT | A為true 則 !A 為false ,反之亦然 |
一個ifelse stament長得像
if(條件){
條件成立時執行這裡的程式碼
}else{
執行條件不成立的程式碼
}
int a = 10;
if(a>5)//10>5 true
{
Console.WriteLine("成立了")
}else{
Console.WriteLine("不成立")
}
//成立了
有多個條件的情況 使用else if
int a = 10;
if(a>10)
{
Console.WriteLine("a大於10")
}else if(a<10 && a>5)
{
Console.WriteLine("a大於5且小於10")
}else if(a>0 && a<=5)
{
Console.WriteLine("a大於0且小於等於5")
}else
{
Console.WriteLine("a小於等於0")
}
//a大於0且小於等於5
** 注意 若前面的else if條件成立就不會判斷後面的else if **
for(初始值;終止條件;增加值){
//程式碼
}
在達成終止條件全會一值重複迴圈
for(int i = 0; i<10; i++)//i++ 就是 i=i+1 也就是把i+1的值賦予給i
{
Console.WriteLine(i);
}
/*
0
1
2
3
4
5
6
7
8
9
*/
while(條件式){
//條件成立時執行程式碼
}
int a=10;
while(a>5){
Console.WriteLine(a);
a--; //跟++差不多意思 只是變成-1
}
//10
//9
//8
//7
//6
除非是有意的,不然我們應該盡量避免無窮迴圈發生
int a= 10;
while(a>5)//沒有對a做控制 a 永遠為10 10>5 為true 會不斷執行{}裡的程式碼
{
Console.WriteLine(a);
}
/*
10
10
10
10
.
.
.
*/
do{
你的程式碼
}while(條件式)
do while其實跟while迴圈很像
只不過不論條件成不成立 都會先執行一次程式碼
int a = 0;
do{
Console.WriteLine(a);
a++
}
while(a>5)//這時候a=1條件不成立 所以不會繼續印數字
//0
break; 語法能讓你跳脫當前的迴圈
continue; 能讓你略過這輪迴圈 進行下一輪
for(int i =1;i<=5;i++){
if(i == 3)
{
break;
}
Console.WriteLine(i);
}
//1
//2
//i=3成立跳出迴圈 所以3.4.5都不會被印出來
for(int i =1;i<=5;i++){
if(i == 3)
{
continue;
}
Console.WriteLine(i);
}
/*
1
2
4
5
*/
用法跟if else很像
當你的else if 很多的時候
請考慮使用switch case 以增加可讀性
switch(變數){
case 條件1:
do something;
break;
case 條件2:
do something1;
break;
default:
do something2;
break;
}
default 有點像else 條件都不成立的時候執行
其中若是少了break
當條件一成立時 不論條件2是否成立
do something2都會被執行
所以請記得要加
string a = "帥哥";
switch(a){
case "惡魔貓男":
Console.WriteLine("我是惡魔貓男");
break;
case 帥哥:
Console.WriteLine("我是帥哥");
break;
default:
Console.WriteLine("Duke 沒有叫你衝");
break;
}
//我是帥哥
在開始之前
我們來介紹一下小黑窗輸入的方法
Console.ReadLine();
在程式讀到這行的時候會等待你從鍵盤輸入值
他預設是字串所以我們應該用一個字串的變數去接他
string input = Console.ReadLine();
Console.WriteLine(input);
這樣就能看見你在螢幕打的東西了
這時候能夠使用** int.Parse() **的方法
string a = "123";
int b = int.Parse(b);
//b = 123
int c = int.Parse(Console.ReadLine); // c為使用者輸入的數字
這樣就成功把string轉成int了
** 注意 **
若是b裡面放的不是數字
那麼程式執行的時候就會拋出例外
(後面會介紹如何處裡例外)
string a = "你好";
int b = int.Parse(b);
//轉型失敗 拋出例外
註:
有安全轉型的方法 但本篇不詳談 請參閱TryParse
using System;
namespace MyFirstProgram
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("請輸入a");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("請輸入b");
int b = int.Parse(Console.ReadLine());
Console.WriteLine("請輸入你要進行的運算:(+)(-)(*)(/)");
string input = Console.ReadLine();
int c;
if (input == "+")
{
c = a + b;
Console.WriteLine("a + b =" + c);//這裡的+號是串接
}
else if (input == "-")
{
c = a - b;
Console.WriteLine("a - b =" + c);//這裡的+號是串接
}
else if (input == "*")
{
c = a * b;
Console.WriteLine("a * b =" + c);//這裡的+號是串接
}
else if (input == "/")
{
c = a / b;
Console.WriteLine("a / b =" + c);//這裡的+號是串接
}
else
{
Console.WriteLine("無效的運算");
}
}
}
}
執行起來
但是每次跑完一次
就要重開一次
真D麻煩
所以我們調整一下程式碼
在外圈加上while條件
using System;
namespace MyFirstProgram
{
class Program
{
static void Main(string[] args)
{
while (true)//永遠成立 所以會一直執行
{
Console.WriteLine("請輸入a");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("請輸入b");
int b = int.Parse(Console.ReadLine());
Console.WriteLine("請輸入你要進行的運算:(+)(-)(*)(/)");
string input = Console.ReadLine();
int c;
if (input == "+")
{
c = a + b;
Console.WriteLine("a + b =" + c);//這裡的+號是串接
}
else if (input == "-")
{
c = a - b;
Console.WriteLine("a - b =" + c);//這裡的+號是串接
}
else if (input == "*")
{
c = a * b;
Console.WriteLine("a * b =" + c);//這裡的+號是串接
}
else if (input == "/")
{
c = a / b;
Console.WriteLine("a / b =" + c);//這裡的+號是串接
}
else
{
Console.WriteLine("無效的運算");
}
}
}
}
}
執行看看
簡易計算機完成拉(灑花)
介紹變數宣告賦值,基礎運算以及流程控制(其實還有switch case沒講到,之後有空會補上)
印出99乘法表
答案在Program.cs
如果有一種資料型別 能接所有變數就好了
還真的有!!!
那就是var(雖然他不是資料型別,而且只能在方法內使用)
他是一種隱含轉換
雖然很好用 但是我還是推薦初學者乖乖宣告資料型態
以避免你不知道這個變數是什麼型態
在系列文中我也會盡量避免使用var
var a = "我是帥哥";//a是string
var b = 123;// b是int
雖然才第2天,沒想到寫一些基礎的東西會如此花費時間。
加班回家真的很懶得動筆
總之總之 我會繼續堅持下去的~~~
雖然才第2天,沒想到寫一些基礎的東西會如此花費時間。
加班回家真的很懶得動筆
深有同感!起先以為就打打字應該還好,沒想到式會累的
大大, 你好
請問
string a = "你好";
int b = int.Parse(b);
//轉型失敗 拋出例外
是否應改成 int b = int.Parse(a);
謝謝