记录一些我不会或者少见的内容,不一定适合所有人,偏于实战,不会讲解无聊的原理
跟着Youtube视频敲的代码,人家是真的讲得很简单,也很清晰,完全不像国内那堆培训机构,就是喜欢加一堆有的没的。
了解字符串的作用,详细的函数与方法可以看微软的官网
namespace WorkWithString
{
class Program
{
static void Main(string[] args)
{
string phrase = "Graffe Academy";
Console.WriteLine(phrase.Length);
Console.WriteLine(phrase.ToUpper());
Console.WriteLine(phrase.Contains("Academy"));
Console.WriteLine(phrase[0]);
Console.WriteLine(phrase.IndexOf("Academy"));
Console.WriteLine(phrase.Substring(8));
}
}
}
int a=3,b=8;
Console.WriteLine(a+b);//11
Console.WriteLine("a+b");//a+b
Console.WriteLine(a+"+"+b);//3+8
Console.WriteLine("a+b"+a+b);//a+b38
Console.WriteLine("a+b"+(a+b));//a+b11
两个要点:
namespace WorkWithNumber
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(5 * 8);
Console.WriteLine(5 /2.0);
Console.WriteLine(Math.Abs(-20));
Console.WriteLine(Math.Pow(3.8,2));
Console.WriteLine(Math.Sqrt(36));
Console.WriteLine(Math.Max(1,100));
}
}
}
要点:知道什么是输入,输出可以怎么写就行了
string name=Console.ReadLine();
Console.WriteLine("Hello "+name);
要点:注意数据类型的转换对运算有什么影响
int num = Convert.ToInt32("45");
Console.WriteLine(num);
Console.Write("Enter your number: ");
int num1 = Convert.ToInt32(Console.ReadLine());
//ToDouble
Console.WriteLine(num + num1);
要点:一维数组怎么创建的
int[] luckyNumbers = { 4,8,15,16,23,42 };
string[] friends = new string[5];
friends[0] = "Jim";
Console.WriteLine(luckyNumbers[0]);
二维又是怎么创建的
namespace Make2DArrays
{
class Program
{
static void Main(string[] args)
{
int[,] numberGrid =
{
{ 1,2},{3,4},{5,6}
};
Console.WriteLine(numberGrid[1, 0]);
int[,] myArray = new int[2, 3];
}
}
}
要点:
static void Main(string[] args)
{
SayHi("lifekokool",33);
Console.WriteLine(cube(2));
}
static void SayHi(string name,int age)
{
Console.WriteLine("Hello "+name+" you are "+age);
}
static int cube(int num)
{
int result = num * num * num;
return result;
}
if 和 switch
要点:一个简单的练习
namespace BuildingBetterCaculator
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter a number:");
double num1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter Operator:");
string op = Console.ReadLine();
Console.WriteLine("Enter a number:");
double num2 = Convert.ToDouble(Console.ReadLine());
if( op == "+")
{
Console.WriteLine(num1 + num2);
}else if(op == "-")
{
Console.WriteLine(num1 - num2);
}
else if (op == "/")
{
Console.WriteLine(num1 / num2);
}
else if (op == "*")
{
Console.WriteLine(num1 * num2);
}
else
{
Console.WriteLine("Invalid Operator");
}
}
}
}
要点:循环怎么写
while(条件){}
do{}while(条件)
for(初始值;循环条件;初始值的自增){}
一个循环的练习:猜单词
namespace BuildingGuessGame
{
class Program
{
static void Main(string[] args)
{
string secretWord = "giraffe";
string guess = "";
int guessCount = 0;
int GuessLimit = 4;
bool outOfGuesses = false;
while (guess != secretWord && !outOfGuesses)
{
if (guessCount<GuessLimit)
{
Console.Write("Enter guess:");
guess = Console.ReadLine();
guessCount++;
}
else
{
outOfGuesses = true;
}
}
if (outOfGuesses)
{
Console.Write("You Lose!");
}
else
{
Console.Write("You Win!");
}
}
}
}
要点:异常抛出怎么写?
namespace ExceptionHandling
{
class Program
{
static void Main(string[] args)
{
try
{
Console.Write("Enter a number:");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter another number:");
int num2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(num1/num2);
}
//catch(Exception e)
//{
// Console.WriteLine(e.Message);
//}
catch(DivideByZeroException e)
{
Console.WriteLine(e.Message);
}catch(FormatException e)
{
Console.WriteLine(e.Message);
}
}
}
}
要点:类和对象的调用有什么需要注意的地方?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _22ClassesAndObjects
{
internal class Book
{
public string title;
private string author;
public int pages;
//static class attrubutes
public static int count=0;
public Book(string atitle,string aauthor,int apages)
{
title = atitle;
authoring = aauthor;
pages = apages;
count++;
}
public bool HasHonors()
{
if (pages >= 300)
{
return true;
}
return false;
}
public string authoring
{
get { return author; }
set
{
if(value== "JK Rowling" || value == "Tolkein")
{
author = value;
}
else
{
author = "aasdkfasdfsd";
}
}
}
//静态文件是怎么引用的?
public int getCount()
{
return count;
}
}
}
using _22ClassesAndObjects;
namespace ClassesAndObjects
{
class Program
{
static void Main(string[] args)
{
Book book1 = new Book("Harry Potter", "JK Rowling", 400);
Book book2 = new Book("Lord Of the Rings", "Tolkein",300);
book2.title = "The hobbit";
Console.WriteLine(book2.title);
Console.WriteLine(book1.HasHonors());
Console.WriteLine(book2.HasHonors());
//getter and setter
Console.WriteLine(book2.authoring);
book2.authoring = "Tolkein11111";
Console.WriteLine(book2.authoring);
//静态文件是怎么引用的?
Console.WriteLine(Book.count);
Console.WriteLine(book2.getCount());
//静态方法不用自己创建类的实例,比如math
//自定义静态方法
//创建方法:public static void methods()
//调用 创建class实例,然后使用className(类).methods()
//如果class为静态类static class className,
//则不用创建实例对象。
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _23Inheritance
{
class Chef
{
public void MakeChicken()
{
Console.WriteLine("The Chef makes chicken");
}
public void MakeSalad()
{
Console.WriteLine("The Chef makes salad");
}
public virtual void MakeSpecialDish()
{
Console.WriteLine("The Chef makes bbg ribs");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _23Inheritance
{
internal class ItalianChef:Chef
{
public override void MakeSpecialDish()
{
Console.WriteLine("The Chef make chicken pram");
}
//查看警告
public void MakeSalad()
{
Console.WriteLine("Salad");
}
}
}
using _23Inheritance;
namespace Interface23 {
class Program
{
static void Main(string[] args)
{
//super class
Chef chef = new Chef();
chef.MakeSpecialDish();
//super class
ItalianChef italianchef = new ItalianChef();
//over ride
italianchef.MakeSpecialDish();
}
}
}
评价:说实话,大多数挺无聊的,一切面向找工作的,太喜欢加入额外不相干的内容。
char a='a';
int b=a;
Console.WriteLine(a);//a
Console.WriteLine(b);//97
如果遇到的是值a
超出范围了,那么VS会提示报错,就是不容许你把一个大容器的水装入到小容器中,这会导致溢出。
所以就需要用到强制类型转换,但是精度会下降。
原则:int b=a;
左边值的容器大小 ≥ \geq ≥ 右边值所需容器大小
所占字节大小(容器大小):byte,short,char < int < long
byte
和short
参与运算会自动转换成int
接下来通过类似如下语句的写法(格式化)展示大小
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(byte).Name, sizeof(byte), byte.MinValue, byte.MaxValue);
U
的意思是无符号SByte
数据类型可包含不需要 Integer
的完整数据宽度甚至 Short
的半数据宽度的整数值decimal
类型较于 double
具有更高的精度和更小的范围Int16
是short
,Int32
是int
,int64
为long,Single
为float
测试用例:
int a=97;
char b=(char)a;
输出...
@
的妙用作用1:不让转义字符生效
char a='\n';
char b='\\';
//方法一:
Console.WriteLine("\\a\\b");
//方法二:
Console.WriteLine(@"\a\b");
作用2:字符拼接但是换行!
与+
拼接字符串还是有些区别的
注:如果想要在拼接\a
与\b
字符中间插入"
,写法为@"\a""\b"
string str = @"\a
\b";
Console.WriteLine(str);
Console.ReadLine()
:最终得到的是string类型
string a=Console.ReadLine();
如果想转换成其他类型,比如我输入整数,转成Int
类型
int b = Convert.ToInt32(Console.ReadLine());
a++
先输出再加1++a
先加1再输出if 语句跟C语言类似。
C#
强制要求用switch
时每个case
条件必须要break
注:能用switch
实现的,都能用if
语句实现,反之不成立
读取字符
->缓冲区
->控制台输出
a = (char)Console.Read();
b = (char)Console.Read();
//输入efdcba,读取相应的ef两个字符,而dcba放入到缓冲区中,接着控制台输出ef。
Console.WriteLine(a);//e
Console.WriteLine(b);//f
/
和求余%
得各个位数""+十位数+个位数
*
与加法+
结合重新拼一个数扩展:给你5位数,我只想要千位和十位数,然后按顺序组合成的新数值是?
int a = 3;
int b = a++ + a++;
Console.WriteLine(a);//5
Console.WriteLine(b);//7
// (前面的)a先输出3 加上 (后面的)a++,此时(后面的)a值先输出为4
// 于是就为3 + 4 ,最终输出的a值为5
扩展:修改b = a++ + (++a)
,那么结果为?
易错点:整除!=
倍数
int sum=0;
for(int i=n;i=n){
int j=i;
sum+=j;
}
}
Console.Write(sum);
abc123
,如何提取对应的123
数值ch=(char)Console.Read();
输入ch
对应的0~9
字符int number = ch-'0'
得到单个数值为什么大多数代码都喜欢如下的第一种稍微难理解的写法?
小于号只用判断一次,而 小于等于号<=>
小于或等于 要判断二次,因此第一种写法性能快
//第一种
for(int i=0;i<11;i++){
//代码
}
//第二种
for(int i=0;i<=10;i++){
//代码
}
for(;;){}
等价于while(true){}
为什么数组下标都是从0开始的?而不是从我们易于理解的1开始?
这就扯到我们大名鼎鼎的迪杰斯特