java学习之数组(二)
在上一节中我们讲到了数组的概念,定义,以及在内存当中的表现形式。那么这里我们来说一下,数组的另一种定义方式。
在上一篇当中我们规定是这个样子定义数组的,
class ArrDemo { public static void main(String[] args) { int[] arr = new int[8]; } }
这个方式定义数组,有一个缺陷,什么缺陷呢,当你有整组数组元素,这里我们姑且称之为 3,4,598,88。比如说你现在有这个么一组数,如果你按照上面方法定义数组的话,你要做的事情就多了,你得一个个把这些个元素复制到数组当中去,想想这是多么痛苦,尽管你可以用循环来简化这个操作,但是当只有2、3个值的时候你还得写个循环来赋值么???java有这么傻么??当然没有。
数组定义方法之二:
数组元素类型[] 数组变量名 = 数组元素类型 [] {数组元素一,数组元素二,数组元素三,.....}。代码:
class ArrDemo { public static void main(String[] args) { int[] arr = new int[]{1,3,5,6,6,9,999};//需要注意一下,这个地方的第二个方括号,并没有明确数据的个数或者长度。这个也是java避免我们犯错的一个机制 } }
这里需要注意的一点就是跟第一种定义方式不同,这里的第二个方括号呢,并没有定义数组元素的个数或者数组的长度。但是这样定义和第一种定义就差不多了,我们还嫌他太过麻烦,怎么办?Java兄弟这个写法能再简化一下否???Java兄弟这么说,好吧我们再来简化一下,(*^__^*) 嘻嘻:
数组元素类型[] 数组变量名 = {数组元素一,数组元素二,数组元素三,.....},代码:
class ArrDemo { public static void main(String[] args) { int[] arr = {1,3,5,6,6,9,999};//这样子定义是不是显得清爽了很多呢? :) } }
当我们这个样子定义数组的时候,会不会感觉很爽?但是他本身也有个缺点,当数组元素较多的时候你一眼看不出数组中的元素到底是多少,也不知道数组的长度。还好的是java是完全面向对象的语言,这个数组也不例外。他是一个对象,他有一个属性值为length来标注。数组的长度,这后边在讲。
以上两种定义的方法的区别在于:前者能看到数组的长度或者元素的个数,但是看不到具体的直接赋值。后者的优点在于能够直接清晰的赋值,但是不能一眼看出数组的长度,各有优劣。
数组的遍历。
我们之值所以定义实体即对象或者数组的原因是因为他们能够存放封装数据。这些实体的主要的一个作用就在于:存、取。你可以存数据,同时你也可以取数据。
代码:
class ArrDemo { public static void main(String[] args) { int[] arr = {1,3,5,6,6,9,999};//需要注意一下,这个地方的第二个方括号,并没有明确数据的个数或者长度。 /**
*需求:取出数组中的所有元素,并且分别打印
*思路,以为要重复的取数据,这里采用循环的方式,循环有while和for循环两种,我们采用的是for循环,之所以采用
*for循环是因为他能在内部定义一个局部变量,这样子比较干净利索,执行完之后,不会有没用的变量驻留在内存当中
*因为我们使用for循环的话,必须明确这个数组的长度。由于java是完全面向对象的,一切皆为对象。这里数组也是对象
*他自身有一个属性值length.来取出数组的长度。这里数组的长度就是arr.length
*
*/
//方法一:正序遍历
System.out.println("正序遍历:");
for(int i = 0; i<arr.length ; i++ )//这里之所以把i的初始值设置为0,是因为数组的索引都是从0开始的
{ System.out.println(arr[i]); }
//方法二:倒序遍历
System.out.println("倒序遍历");
for(int i = arr.length-1; i>=0 ; i--){ System.out.println(arr[i]); } } }
这里需要注意的一点是:for循环当中i的初始值,和末尾值的设定。
正序的时候是从0开始的,在arr.length-1处结束
倒序的时候是从arr.length-1处取到,在0处结束,这一点一定要明确。
数组的最值:
我们平常对数组经常的一个操作就是求最值,这个数组当中的最小值,或者最大值。
class ArrDemo { public static void main(String[] args)
{ int[] arr = {1,3,888,5,6,6,9,999};
int[] arr2 = {-2,-88,-356,-135,-8445}; int m = getMax(arr);
int _m = _getMax(arr2); System.out.println(m);
System.out.println(arr2[_m]); } /**
*直接循环遍历值求最大值,缺点,当要循环遍历的值是负数的时候,其中max的初始化是个缺陷。
*思路:
* 1、在函数当中定义一个基值,并且初始化为0,
* 2、然后循环遍历数组,把数组当中的每个元素跟这个基值做比较,如果结果比这个基值大,那么就把此时的数组元素赋值给这个基值
* 3、相反如果基值比数组中的元素大,那么就保持不变,当循环遍历之后,返回最大值
*
*
*
*/
static int getMax(int[] arr)
{
int max = 0; for(int i = 0 ; i< arr.length ; i++)
{
max = (max >= arr[i])?max:arr[i];
} return max; } /*
*利用数组的索引求最值,这种方法对正数还有负数都是通用的。
*思路:
* 跟上边的思路是一样的,只不过这时候为了正负数比较通用期间,我们把原来直接值的比较,换为数组中各个索引值的比较
*
*/
static int _getMax(int[] arr)
{ int max = 0;
for(int i = 0 ; i < arr.length ; i++)
{ max = (arr[max]>=arr[i])?max:i; }
return max; } }
java学习之数组(二)的更多相关文章
- Java学习-028-JSON 之二 -- 数据读取
JSON数据由 JSONObject.JSONArray.key_value 组合而成.通常来说,JSONObject 可以包含 JSONObject.JSONArray.key_value:JSON ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- 初涉深度优先搜索--Java学习笔记(二)
版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 上周学习了数组和链表,有点基础了解以后,这 ...
- 2019暑假Java学习笔记(二)
目录 基础语法(下) 流程控制 if语句 switch语句 while语句和do-while语句 for语句 break关键字 continue关键字 数组 一维数组 二维数组 用户输入操作 练习题: ...
- java学习-zxing生成二维码矩阵的简单例子
这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency> <gr ...
- 登录模块的进化史,带大家回顾java学习历程(二)
接着前面的登录模块的进化史,带大家回顾java学习历程(一) 继续往下面讲 前面我们去实现登录功能,都是想着要完成这个功能,直接在处理实际业务的类中去开始写具体的代码一步步实现,也就是面向过程的编程. ...
- 从.Net到Java学习第十二篇——SpringBoot+JPA提供跨域接口
从.Net到Java学习系列目录 最近又撸了半个月的前端代码,做app离线存储,然后又花了一周去将过去的wcf项目转webapi,java又被落下了,总感觉我特么像斗地主中的癞子牌,变来变去..... ...
- JAVA学习笔记--数组初始化
JAVA中,数组只是相同类型的.用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.数组通过方括号下标操作符[]来定义和使用,要定义一个数组只需在类型名后面加上一个方括号即可,如: int[] ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十二周
java学习第十章:图形程序设计 本章,介绍的是如何编写使用图形用户界面GUI的java程序.主要讲的是如何编写定义屏幕上的窗口大小和位置的程序,如何在窗口中采用多种字体显示文本,如何显示 ...
- Java学习之==>数组【array】
一.定义数组 /** * 一维数组定义 * * 为数组插入元素 */ public void case1() { // 声明 int[] arr1; // 声明+初始化 int[] arr2 = ne ...
随机推荐
- iscsi介绍及iscsi target配置
iSCSI 主要是透过 TCP/IP 的技术,将储存设备端透过 iSCSI target (iSCSI 目标) 功能,做成可以提供磁盘的服务器端,再透过 iSCSI initiator (iSCSI ...
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素
1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...
- VNC服务端自动化配置脚本
在使用阿里云的linux云主机,看到官方提供的远程连接服务器bash脚本,记录下来. 功能:自动修改系统源和安装vncserver相关的软件包,centos.redhat系列都是安装gno ...
- C# Socket通信 小案例
本文将编写2个控制台应用程序,一个是服务器端(server),一个是客户端(client), 通过server的监听,有新的client连接后,接收client发出的信息. server代码如下: u ...
- a标签的背景图在ie8下显示问题
今天遇到个小问题,纠结了很久,分享下 a标签添加背景图,需要给a添加display:block样式 但是在ie8下还是不能显示背景图,开始以为是由于a标签为空造成的,试了下添加内容也没用,后来注意到一 ...
- C++ 简单的入门语法
入门的hello world using namespace std; 是使用命名空间,有点像java里面的引入包main 方法和java一样是主入口,有且只有一个,因为是int ,所以还必须返回一个 ...
- (转)修改ECSHOP前后台的title中的ecshop
前台部分: 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ecshop 前者在后台商店设置 - 商店标题修改 后者打开includes/lib_main.php $page_t ...
- 获取Android studio中的SHA1
因为想要弄一下百度地图. 然后要申请一个key. 需要SHA1. 按window键 +R 输入cmd 进入C:\Users\Administrator路径 输入cd .android,进行.andro ...
- AndroidManifest.xml中data标签中所有属性的含义
属性(ATTRIBUTES): android:host 这个属性用户定义URI授权的主机部分,除非给过滤器也指定了<data>元素的scheme属性,否则这个属性没有意义. 注意:在An ...
- 使用EMMET中的小坑
使用EMMET写HTML的时候,是一个非常爽的事情.但是今天我使用时,发现一个小坑.以前倒也没有注意,不过需要非常的小心. form[action="/process" metho ...