笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数组就是一组数据
//1. double[]表示是double类型的数组,数组名hens
//2.{3,5,1,3.4,2,50}表示数组的值/元素,依次表示数组的
//第几个元素
//
double[] hens = {3,5,1,3.4,2,50};
//遍历数组得到数组的所有元素的和,使用for
//1.我们可以通过 hens[下标]来访问数组的元素
//下标是从日开始编号的比如第一个元素就是 hens[o]
//第2个元素就是 hens[1],依次类推
//2.通过for就可以循环的访问数组的元素/值
//老师提示:可以通过数组名·length得到数组的大小/长度
System.out.println("数组的长度=" + hens.length);
for( int i = 0; i < 6; i++){
System.out.println("第"+(i+1)+"个元素的值=" + hens[i]);
}
●使用方式1-动态初始化
数组的定义
数据类型数组名=new 数据类型[大小]
int a[]=new int[5];//创建了一个数组,名字a,存放5个int
●使用方式2-动态初始化
√先声明数组
语法:数据类型数组名;也可以数据类型[数组名;
int a[];或者int[] a;
√创建数组
语法:数组名=new数据类型[大小;
a=new int[10];
√案例演示【前面修改即可】
//(2)第2种动态分配方式,先声明数组,再new分配空间
double scores[] ;//声明数组,这时scores是null
scores = new double[5];// 分配内存空间,可以存放数据
●使用方式3-静态初始化
初始化数组
语法:数据类型 数组名[]={元素值,元素值...)
int a[]={2,5,6,7,8,89,90,34,5,6},如果知道数组有多少元素,具体值上面的用法相当于:
int a[]=new int[9];
a[0]=2;a[1]=5;a[2]=6; a[3]=7;a[4]=8;
a[5]=89;a[6]=90;a[7]=34;a[8]=56;
√快速入门案例【养鸡场】
double hens[]={3,5,1,3,4,2,50};等价
double hens[] = new double[6];
hens[0] = 3; hens[1] = 5; hens[2] = 1; hens[3] = 3.4; hens[4]=2;hens[5] = 50;
//基本数据类型赋值,赋值方式为值拷贝
//n2的变化,不会影响到n1的值
int n1 = 10;
int n2 = n1;
n2 = 80;
System.out.print1n( "n1=" +n1);//10
System.out.print1n( "n2=" + n2);//80
//数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值
//是一个地址, arr2变化会影响到arr1
int[]arr1 = {1,2,3};
int[]arr2 = arr1;//把arr1赋给arr2
arr2[0] = 10;
//看看arr1的值
System.out.println( "====arr1的元素====");for(int i = 0; i < arr1.length; i++){
System.out.println(arr1[i]);
}
JVM内存情况图

编写代码实现数组拷贝(内容复制)
将int[l] arr1 = {10,20,30};拷贝到arr2数组,要求数据空间是独立的.
int[] arr1 = {10,20,30};
//创建一个新的数组arr2,开辟新的数据空间
//大小arr1.length;
int[] arr2 = new int[arr1.length];
//逼历arr1 ,把每个元素拷贝到arr2对应的位置
for(int i = 0; i < arr1.length; i++){
arr2[i] = arr1[i];
}
Scanner myScanner = new Scanner(System.in);//初始化数组
int[]arr = {1,2,3};
do{
int[]arrNew = new int[arr.length + 1];
//遍历arr数组,依次将arr的元素拷贝到arrNew数组
for(int i =0; i< arr.length; i++){
arrNew[i] = arr[i];
}
System.out.println("请输入你要添加的元素");
int addNum = myScanner.nextInt();
//把addNum赋给arrNew最后一个元素
arrNew[ arrNew.length - 1] = addNum;
//让arr指向arrNew,
arr = arrNew;
//输出arr看看效果
System.out.println("====arr扩容后元素情况====");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + "\t");
}
//问用户是//问用户是否继续
System.out.println("是否继续添加y/n");
char key = myScanner.next( ).charAt(0);
if( key =='n'){//如果输入n,就结束
break;
}
}while(true);
System.out.println("你退出了添加...");
排序是将一群数据,依指定的顺序进行排列的过程。排序的分类:
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
冒泡排序法案例:
下面我们举一个具体的案例来说明冒泡法。我们将五个无序:24,69,80,57,13使用冒泡排序法将其排成一个从小到大的有序数列。
总结冒泡排序特点
1.我们一共有5个元素
2.一共进行了4轮排序,可以看成是外层循环
3.每1轮排序可以确定一个数的位置,比如第1轮排序确定最大数,第2轮排序,确定第2大的数位置,依次类推
4.当进行比较时,如果前面的数大于后面的数,就交换
5.每轮比较在减少4->3->2->4分析思路-→>代码..
●介绍:
在java中,我们常用的查找有两种:
1.顺序查找
2.二分查找【二分法,我们放在算法讲解】
●案例演示:
1.有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】要求:如果找到了,就提示找到,并给出下标值。
//定义一个字符串数组
String[] names = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入名字");
String findName = myScanner.next();
//逼历数组,逐一比较,如果有,则提示信息,并退出//这里老师给大家一个编程思想
int index = -1;
for(int i = 0; i < names.length; i++){
//比较字符串比较equals,如果要找到名字就是当前元素
if(findName.equals(names[i])){
System.out.println("恭喜你找到"+ findName);
System.out.println("下标为 " + i);
//把i保存到index
index = i;
break;//退出
}
}
if(index == -1){//没有找到
System.out.println("sorry ,没有找到" + findName);
}
2.请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数”。
答案:略
多维数组我们只介绍二维数组。
●二维数组的应用场景
比如我们开发一个五子棋游戏,棋盘就是需要二维数组来表示。
//1。从定义形式上看int[][]
//2.可以这样理解,原来的一维数组的每个元素是一维数组,就构成二维数组
int[][ ]arr = { {0,0, 0,0,0,0},
{0,0,1,0,0,0},
{0,2,0,3,0,0},
{0,0,0,0,0,0}};
//输出二维图形
for(int i = 0; i < arr.length; i++){
//逼历二维数组的每个元秦
//逼历二维数组的每个元素(数组)
//老韩解读
//1. arr[i]表示二维数组的第i+1个元秦比如arr[0]∶二维数组的第一个元秦
//2. arr[i].length得到对应的每个一维数组的长度
for(int j = 0; j <arr[i].length; j++){
System.out.print(arr[i][j] + "\t");//输出了一维数组
}
System.out.println();//换行
}
使用方式1:动态初始化
语法:类型[][] 数组名=new 类型[大小][大小]
比如: int[][] a[][]=new int[2][3]
使用演示
二维数组在内存的存在形式

使用方式2:动态初始化
先声明:类型数组名[][];
再定义(开辟空间) 数组名=new 类型[大小][大小]
赋值(有默认值,比如int 类型的就是0)
使用演示
int arr[][];//声明二维数组
arr = new int[2][3];//再开空间
使用方式3:动态初始化-列数不确定

完成该案例
画出执行分析示意图
int[][] arr = new int[3][];//创建二维数组,但是只是确定一维数组的个数
for(int i = 0; i < arr.length; i++){//逼历arr每个一维数组
//给每个一维数组开空间new
//如果没有给一维数组new,那么、arr[i]就是null
arr[i] = new int[i + 1];
//遍历一维数组,并给一维数组的每个元素赋值
for(int j = 0;j < arr[i].length; j++){
arr[i][j] = i + 1;//赋值
}
}
System.out.println( "=====arr元素=====");//逼历arr输出
for(int i = 0; i < arr.length; i++){
//输出arr的每个一维数组
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][i]+" ");
}
System.out.println();//换行
}
使用方式4:静态初始化
定义类型数组名[]={{值1,值2..},{值1,值2..},{值1,值2..}}
使用即可[固定方式访问]
比如:
int[][] arr = {{1,1,1), {8,8,9}, {100});
解读
二维数组使用细节和注意事项
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat
我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我使用Ember作为我的前端和GrapeAPI来为我的API提供服务。前端发送类似:{"service"=>{"name"=>"Name","duration"=>"30","user"=>nil,"organization"=>"org","category"=>nil,"description"=>"description","disabled"=>true,"color"=>nil,"availabilities"=>[{"day"=>"Saturday","enabled"=>false,"timeSlots"=>[{"startAt"=>"09:00AM","endAt"=>