C#学习笔记(八):多维数组
一维数组
冒泡排序
二维数组

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace m1w2d5_array_rank
{
class Program
{
static void Main(string[] args)
{
#region 冒泡排序
//数组 冒泡排序
Random roll = new Random();
int[] array = { , , , , , , , , , };
for (int i = ; i < array.Length; i++)
{
array[i] = roll.Next(, );
}
foreach (var item in array)
{
Console.Write(item + ",");
}
//子问题:指定一个区间,我可以把最大的放后面
//子问题的子问题:从头到尾遍历(除最后一个位置),相邻位置对比,如果大,就排后面
for (int i = ; i < array.Length - ; i++)
{
for (int j = ; j < array.Length - - i; j++)
{
if (array[j] > array[j + ])
{
int temp = array[j];
array[j] = array[j + ];
array[j + ] = temp;
}
}
}
//枚举器:可以帮我们快速遍历,使用这样的遍历方式,我们不用关心遍历的算法
//有一定的内存消耗
//如果他的成员是值类型不可以改,但是可以访问,但是可以改成员的成员,前提是成员是引用类型
Console.WriteLine();
foreach (var item in array)
{
Console.Write(item + ",");
}
//1、先写内循环,循环次数为:数组长度-1-外循环当前次数
//2、内循环每次对比当前位置与下一位置,如果逻辑(当前位大于对比位)达成 则交换位置
//3、外循环,循环次数为 数组长度-1
#endregion
#region 二维数组
二维数组也是解决重复数据的重复逻辑,不同的是他允许我们通过两(多)个下标
为什么用多个下标,人们在生活,经常需要处理二维的数据,地图,表单(纯三维数据特别的少)
本质上,内存中一维和二维数组是一样的
使用二维数组
定义二维数组
不指定元素
数据类型[,] 变量名;
指定元素
数据类型[,] 变量名 = new 数据类型[标号为0维度的元素个数, 标号为1维度的元素个数]
数据类型[,] 变量名 = new 数据类型[行数, 列数]
数据类型[,] 变量名 = new 数据类型[x, y]
遍历
遍历二维数组我们需要有两个循环,每个循环处理不同维度
#endregion
#region 二维数组的练习
//将1到24赋值给一个二维数组(4行6列)
int[,] array = new int[, ];
int num = ;
//赋值正确
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
array[i, j] = num++;
}
}
//显示正确
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
Console.Write(array[i, j] + " "); //Console.Write(array[i, j] + "\t");
}
Console.WriteLine();
}
//将二维数组(5行5列)的右上半部分置零.
int[,] array = new int[, ];
int num = ;
//赋值正确
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
array[i, j] = num++;
if (i < j)
{
array[i, j] = ;
}
}
}
//显示正确
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
Console.Write(array[i, j] + "\t");
}
Console.WriteLine();
}
////求二维数组(3行3列)的对角线元素的和.
//00 01 02
//10 11 12
//20 21 22
int[,] array = new int[, ];
int num = ;
int sum = ;
//赋值正确
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
array[i, j] = num++;
}
}
//i = j
//i + j =array.GetLength(0)-1
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
if (i == j || i + j == )
{
sum += array[i, j];
}
}
}
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
Console.Write(array[i, j] + "\t");
}
Console.WriteLine();
}
Console.WriteLine(sum);
////求二维数组(5行5列)中最大元素值及其行列号。(随机1~500)
Random roll = new Random();
int[,] array = new int[, ];
int max = ;
int x = ;
int y = ;
//赋值正确
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
array[i, j] = roll.Next(, );
if (array[i, j] > max)
{
max = array[i, j];
x = i;
y = j;
}
}
}
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
Console.Write(array[i, j] + "\t");
}
Console.WriteLine();
}
Console.WriteLine("最大数为{0},行号为{1},列号位{2}", max, x + , y + );
//从键盘上输入9个整数,保存在二维数组中按方阵的形式输出
int[,] array = new int[, ];
int num = ;
//赋值正确
Console.WriteLine("请输入10个整数");
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
Console.WriteLine("请输入第{0}整数", num);
num++;
array[i, j] = int.Parse(Console.ReadLine());
}
}
for (int i = ; i < array.GetLength(); i++)
{
for (int j = ; j < array.GetLength(); j++)
{
Console.Write(array[i, j] + "\t");
}
Console.WriteLine();
}
#endregion
#region 交错数组
//交错数组与多维数组的区别
//交错数组理论上才是数组的数组
//1、多维数组必须是每一个维度的元素个数相等,多维数组只能表示矩形数据块
//交错数组可以表示锯齿数据块
//2、多维数组必须是指定每一个维度的元素个数
//交错数组只能指定最外层的数组个数
//3、多维本质上是一块连续内存空间,为什么是多维表示,为了人们方便去理解,多维和一维只是索引器不一样
//交错数组理论上才是数组的数组
//定义一个交错数组
//数据类型[][]变量名;
//数据类型[][]变量名 = new 数据类型[4][]{new int[10],new int[5],new int[10],new int[5],}
//数据类型[][]变量名 = new 数据类型[4][];
int[][] array = new int[][] { new int[] { , , , }, new int[] { , } };
//foreach (var item in array)
//{
// for (int i = 0; i < item.Length; i++)
// {
// Console.Write(item[i] + "\t");
// }
// Console.WriteLine();
//}
foreach (var item in array)
{
foreach (var subitem in item)
{
Console.Write(subitem + "\t");
}
Console.WriteLine();
}
#endregion
}
}
}
复习
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//&&和&的区别
int a = ;
int b = ;
bool c = a > && a / b > ;
Console.WriteLine(c);//结果false,只判断一遍
bool d = a > & a / b > ;
Console.WriteLine(d);//结果报错,位运算符两边都会判断
float cost = ;
float _cost = cost < ? : * 0.8f;
string name = "老王";
name = name == "老王" ? "老王" : "流氓"; //90 A 90-100
//80 B
//70 C
//60 D
//E
Random r = new Random();
int score = r.Next();
switch (score / )
{
case : //常量标号 字面值
case :
Console.WriteLine("A");
break;
case :
Console.WriteLine("B");
break;
case :
Console.WriteLine("C");
break;
case :
Console.WriteLine("D");
break;
default:
Console.WriteLine("E");
break;
} //0-10之间的偶数
int num = ;
while (true)
{
if (num == )
{
num++;
continue;
}
if (num % == )
{
Console.WriteLine(num);
}
num++;
if (num > )
{
break;
}
} //数组
int[] num1 = { , , };//静态数组,内存连续,大量读写效率高,长度不能动态增加,线性,内存连续
int[,] num2 = { { , , }, { , , } };
num2[, ] = ;
for (int i = ; i < num2.GetLength(); i++)
{
for (int j = ; j < num2.GetLength(); j++)
{
Console.WriteLine(num2[i,j] +"\t");
}
Console.WriteLine();
} //标志枚举
EGameState status = EGameState.菜单状态; //0菜单状态,1战斗状态,2结束
switch (status)
{
case EGameState.菜单状态:
Console.WriteLine("1.开始游戏 2.结束游戏");
char input = Console.ReadKey().KeyChar;
if (input == ) { }
else if (input == ) { }
else { }
break;
case EGameState.游戏状态:
break;
case EGameState.结束状态:
break;
default:
break;
} ERollBuff buff = ERollBuff.None;
buff = ERollBuff.中毒 | ERollBuff.减速 | ERollBuff.燃烧;
if ((int)(buff & ERollBuff.中毒) != ) { }//角色中毒
if ((int)(buff & ERollBuff.减速) != ) { }//角色减速
if ((int)(buff & ERollBuff.燃烧) != ) { }
}
}
enum EGameState
{
菜单状态,//
游戏状态,//
结束状态,//
游戏简介 //
}
enum ERollBuff
{
None = , //
减速 = , //
衰弱 = , //0010 1<<1 枚举项多,可以用位左移
中毒 = , //0100 1<<2
燃烧 = //1000 1<<3
}
}
C#学习笔记(八):多维数组的更多相关文章
- matlab学习笔记11_1低维数组操作
一起来学matlab-matlab学习笔记11 11_1 低维数组操作repmat函数,cat函数,diag函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab ...
- C语言学习笔记 (005) - 二维数组作为函数参数传递剖析
前言 很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维数组 //函数f的形参形式 f(int daytab[2][13]) {...} / ...
- Python学习笔记_二维数组的查找判断
在进行数据处理的工作中,有时只是通过一维的list和有一个Key,一个value组成的字典,仍无法满足使用,比如,有三列.或四列,个数由不太多. 举一个现实应用场景:学号.姓名.手机号,可以再加元素 ...
- C语言学习笔记 (006) - 二维数组传参的三种表现形式
# include <stdio.h> # include <stdlib.h> # define M # define N int getdate(int (*sp)[M]) ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- python3.4学习笔记(十一) 列表、数组实例
python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...
- Java学习笔记之---方法和数组
Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...
- JavaSE学习笔记(7)---数组
JavaSE学习笔记(7)---数组 1.什么是数组 数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个 ...
- matlab学习笔记(一)单元数组
matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x) :取最大的整数 ceil(3.18)=4,ceil( ...
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
随机推荐
- django的serializers
views.py # get所需的 from snippets.serializers import SnippetSerializer from rest_framework.views impor ...
- [django]模板template原理
django 中的render和render_to_response()和locals(): http://www.cnblogs.com/wangchaowei/p/6750512.html 什么是 ...
- Bellon(多么痛的领悟)
尼玛 我今天刚刚知道什么是负权回路 任意相连的无向图之间都是回路!!! 囧了一天了,算是看出来了,渣比 A====B 则A能到B且B能到A,这就是一个回路.
- phpmyadmin-配合nginx与php安装
1. 概况 phpMyAdmin是用来在网页端图形化操作MySQL数据库的工具,使用起来非常直观,目前最新版本是4.8.3.在搭建web集群架构时可能有这样的需求,数据库安装在专门的一台机器上,但是希 ...
- PAT The Best Rank[未作]
1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...
- 国内maven库
国内maven库 <mirrors> <mirror> <id>CN</id> <name>OSChina Central</name ...
- vue项目打包后css背景图路径不对的问题
问题描述: 自己在自学vue做项目的过程中,遇到一个有关背景图片路径的问题,就是css代码中背景图片是根据相对路径来写的,如下图: 当使用npm run dev命令本地访问的时候,背景图片是正常显示的 ...
- EasyUI写的登录界面
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> ...
- Promise学习探究
学习熟知吧,原理还是继续吧 例子1: var isGeted; function getRet(){ return new Promise(function(resolve, reject) { // ...
- python练习题,写一个方法 传进去列表和预期的value 求出所有变量得取值可能性(例如list为[1,2,3,4,5,6,12,19],value为20,结果是19+1==20只有一种可能性),要求时间复杂度为O(n)
题目:(来自光荣之路老师)a+b==valuea+b+c=valuea+b+c+d==valuea+b+c+d+...=valuea和b....取值范围都在0-value写一个方法 传进去列表和预期得 ...