C#基础复习笔记(偏实战,不讲解无聊的教科书内容)

观前提醒

记录一些我不会或者少见的内容,不一定适合所有人,偏于实战,不会讲解无聊的原理

C# tutorial

跟着Youtube视频敲的代码,人家是真的讲得很简单,也很清晰,完全不像国内那堆培训机构,就是喜欢加一堆有的没的。

一、WorkWithString

可调用函数

了解字符串的作用,详细的函数与方法可以看微软的官网

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

二、WorkWithNumber

两个要点:

  • 运算符
  • Math
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));
        }
    }
}

三、GettingUserInput

要点:知道什么是输入,输出可以怎么写就行了

string name=Console.ReadLine();
Console.WriteLine("Hello "+name);

四、BuildingACalculator

要点:注意数据类型的转换对运算有什么影响

int num = Convert.ToInt32("45");
Console.WriteLine(num);
Console.Write("Enter your number: ");
int num1 = Convert.ToInt32(Console.ReadLine());
//ToDouble
Console.WriteLine(num + num1);

五、MakeArrays && Make2DArrays

要点:一维数组怎么创建的

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];
        }
    }
}

六、MakeMethods && ReturnStatement

要点

  • 方法是怎么创建的?
  • 返回什么东西?
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;
}

七、IfStatements 条件判断

if 和 switch

八、BuildingBetterCaculator

要点:一个简单的练习

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");
            }
        }
    }
}

九、WhileLoops && ForLoops

要点:循环怎么写

while(条件){}

do{}while(条件)

for(初始值;循环条件;初始值的自增){}

十、BuildingGuessGame

一个循环的练习:猜单词

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!");
            }
        }
    }
}

十一、ExceptionHandling

要点:异常抛出怎么写?

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);
            }
        }
    }
}

十二、ClassesAndObjects(难点)

要点:类和对象的调用有什么需要注意的地方?

创建了一个book类

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;
        }
    }
}

主函数是怎么调用的?

  • getter and setter
  • 静态文件是怎么引用的?
  • 静态方法怎么搞?
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,
            //则不用创建实例对象。
        }  
    }
}

十二、Inheritance(难点)

  • 超类和重载

创建普通类

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();
        }
    }
}

Siki学院学的笔记

评价:说实话,大多数挺无聊的,一切面向找工作的,太喜欢加入额外不相干的内容。

ASCII码:

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 byteshort参与运算会自动转换成int

接下来通过类似如下语句的写法(格式化)展示大小

Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
                typeof(byte).Name, sizeof(byte), byte.MinValue, byte.MaxValue);

C#基础复习笔记(偏实战,不讲解无聊的教科书内容)_第1张图片
注:

  • U的意思是无符号
  • SByte 数据类型可包含不需要 Integer 的完整数据宽度甚至 Short 的半数据宽度的整数值
  • decimal 类型较于 double 具有更高的精度和更小的范围
  • Int16shortInt32intint64为long,Singlefloat

测试用例:

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
C#基础复习笔记(偏实战,不讲解无聊的教科书内容)_第2张图片
:能用switch实现的,都能用if语句实现,反之不成立

字符读取

读取字符->缓冲区->控制台输出

a = (char)Console.Read();
b = (char)Console.Read();
//输入efdcba,读取相应的ef两个字符,而dcba放入到缓冲区中,接着控制台输出ef。
Console.WriteLine(a);//e
Console.WriteLine(b);//f

简单练习题思路(代码其实不重要)

1、如何让数字倒过来输出

  • 步骤1:输入整数,善用除法/和求余%得各个位数
  • 步骤2:通过字符串拼接输出即可,比如""+十位数+个位数
  • 另一种输出方式:乘法*与加法+结合重新拼一个数

扩展:给你5位数,我只想要千位和十位数,然后按顺序组合成的新数值是?

2、说出下面运算结果的逻辑实现与最终结果

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),那么结果为?

3、输出[n,m]区间所有能够被18整除的数的和

易错点:整除!=倍数

int sum=0;
for(int i=n;i=n){
		int j=i;
		sum+=j;
	}
}
Console.Write(sum);

4、已知: S n = 1 + 1 2 + 1 3 + . . . + 1 n S_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n} Sn=1+21+31+...+n1。输入任意一个大于等于1的整数 k k k,要求计算出一个最小的 n n n,使得 S n > k S_n > k Sn>k

  • 循环的条件怎么设置?
  • 自增与叠加计算的代码位置会有什么影响?

5、如果输入的是abc123,如何提取对应的123数值

  • ch=(char)Console.Read();输入
  • 条件判断识别ch对应的0~9字符
  • 获取结果int number = ch-'0'得到单个数值

我认为最不需要记的知识(知道就行)

程序结构:

  • 入口类(熟能生巧,VS也有提示)

变量:

  • 命名规则(VS会贴心提示你)
  • 数据类型(熟能生巧)

运算符

  • 算术运算符、逻辑运算符、关系运算符的知识(回炉重造,重学C语言吧)

循环(没用的知识又增加了)

为什么大多数代码都喜欢如下的第一种稍微难理解的写法?
小于号只用判断一次,而 小于等于号<=>小于或等于 要判断二次,因此第一种写法性能快

//第一种
for(int i=0;i<11;i++){
	//代码
}
//第二种
for(int i=0;i<=10;i++){
	//代码
}

for(;;){}等价于while(true){}

数组

为什么数组下标都是从0开始的?而不是从我们易于理解的1开始?
这就扯到我们大名鼎鼎的迪杰斯特

你可能感兴趣的:(游戏,c#,开发语言)