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 ...
随机推荐
- IDL通过经纬度定位获取DN值
以前就想写,但是因为envi可以就一直没弄.今天正好有个机会,就做了这个事情.ENVI中在主窗口中pixel locator可以实现,但是当我们需要读入很多的数据的时候,也就是批量处理的时候,显然编程 ...
- Linux yum命令重装mysql
如果是 rpm 安装的话,可以用 rpm -e mysql-server 如果是yum安装的,可以用 yum remove mysql* 删除MySQL安装文件夹 然后使用yum安装mysql: 1. ...
- 'Service' object has no attribute 'process'
在使用selenium+phantomjs时,运行总是出现错误信息: 'Service' object has no attribute 'process' 出现该错误的原因是未能找到可执行程序&qu ...
- NC V6 nchome文件目录及其作用介绍
NC V6发布一段时间了,各个NC6.0 nchome文件夹下各个子文件夹内容和作用 ant:存放Apache Ant,用来执行EJB的构建. bin: 存放nc部署和系统监控等命令.configsy ...
- PreferenceFragment界面透明问题
PreferenceFragment界面默认是透明的 而其布局代码框架为 <PreferenceScreen> ... </PreferenceScreen>,背景色及透明度属 ...
- JAVA DATE解析(时间戳解析为固定格式)
public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (d ...
- [转]MySQL数据库备份和还原的常用命令小结
MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword datab ...
- Vijos P1521 跳舞 贪心
本来想找一道网络流的题来着,结果这道题越看越不对劲,总觉得这题存在不用网络流的解法 看了题解区以后坚定了自己的猜想 #include <cstdio> #include <cstri ...
- POJ2104 K-th Number 静态区间第k最值 平方分割
干掉这道题的那一刻,我只想说:我终于**的AC了!!! 最终内存1344K,耗时10282ms,比起归并树.划分树以及其他各种黑科技,这个成绩并不算光彩⊙﹏⊙ 但至少,从最初的无数次TLE到最终的AC ...
- 【BZOJ2281】【博弈论+DP】 [Sdoi2011]黑白棋
Description 黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是 ...