java数组键_Java基础之数组

数组

数组就是用于存储相同数据类型数据的一个容器。可以通过有规律的索引来访问没有规律的元素。

一维数组

定义格式:元素的数据类型[ ] 数组名称 = new 元素的数据类型 [ 数组容器大小 ];

数组定义格式解释:

元素:数组中的数据,数组中的变量。

数据类型:数组中的数据的数据类型,用来声明当前数组中,可以存放什么类型的数据。

[ ]:表示是一个一维数组

数组名称:数组本身也是一个变量,用于存储数组的地址的变量。所以,数组名称要符合标识符规范。

=:赋值符号,将数组的地址,赋值给数组的名称

new:新建,用于在堆内存中开辟一块空间,用来存储数据

元素的数据类型:和前面的元素的数据类型保持一致

数组容器的大小:可以存储数据的个数,数组长度必须给出,用于确定在内存中开辟多大的一块空间。

数组初始化的格式:

1.元素的数据类型[] 数组名称 = new 元素的数据类型[数组元素的个数];

2.在程序书写的时候,就知道了数组中的元素是什么值,可以使用这一种

元素的数据类型[] 数组名称 = new 元素的数据类型[] {元素值的罗列};

可以简写为:元素的数据类型[] 数组名称 = {元素值的罗列};

数组的遍历

遍历:把所有元素都访问一遍。

方式:通过循环,访问到数组中所有元素的索引。通过索引,访问到对应元素。

索引:角标、下标、脚标,表示某个元素在数组中的位置。范围:0 ~ 数组长度-1。数组长度:数组元素的个数,可以通过 数组名称.length 获取。

代码:

public static void main(String[] args) {

//定义一个数组

int[] arr = {12, 23, 34, 45, 56};

//定义循环,获取到数组所有的索引,此时i不仅表示循环的控制,还表示数组的索引

for (int i = 0; i < arr.length; i++) {

//定义一个变量接收根据索引获得到的数组中的值,并打印出来

int x = arr[i];

System.out.println(x);

}

}

练习:

1、定义一个方法,遍历一个一维数组。

思路:通过循环,访问到数组中所有元素的索引。通过索引,访问到对应元素。

2、定义一个方法,求一个一维数组中的最大值。

思路:设置一个变量 max,作用是先代表数组中的最大值,遍历数组,让每个元素都和该变量比较,如果比最大值变量还要大,那么就让当前元素替换掉最大值变量中的数据。

3、定义一个方法,将一个数组中的数据进行反转。

思路:第一个变成最后一个,第二个变为倒数第二个。(0索引和arr.length-1索引位置对调,1索引和arr.length-2索引位置对调....,直到数组的最中间的元素,停止对调。)

代码:

public static void main(String[] args) {

//定义一个数组

int[] arr = {16,80,33,43,42,57,29};

//调用数组遍历方法,将数组作为一个实参传递

method01(arr);

//调用数组数组获取最大值的方法,将数组作为一个实参传递

method02(arr);

//调用数组数组反转的方法,将数组作为一个实参传递

method03(arr);

}

//定义一个有参数的数组遍历方法

public static void method01(int[] arr) {

//循环遍历,获取所有的元素

for (int i = 0; i < arr.length; i++) {

System.out.println(arr[i]);

}

}

//定义一个有参数的数组获取最大值的方法

public static void method02(int[] arr) {

//先假设数组的0号索引对应的值是最大值,将它复制给一个变量

int max = arr[0];

//循环遍历进行比较

for (int i = 1; i < arr.length; i++) {

//如果当前元素大于假设的最大值

if (arr[i] > max) {

max = arr[i];//就让当前元素将假设的最大值替换掉

}

}

//循环结束之后,此时max就是数组中的最大值

System.out.println("数组最大值为:"+max);

}

//定义一个有参数的数组反转的方法

public static void method03(int[] arr) {

//循环遍历比较,可以在for循环定义两个变量,一个索引从前向后,一个索引从后向前,

for (int i = 0, j = arr.length - 1; i < j; i++, j--) {

//i和j位置的元素,进行交换

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

二维数组

二维数组:数组的每个元素,恰好又是一个数组。

定义方式:

int[][] arr = new int[3][];

解释:定义一个二维数组,名字arr,数组中每个元素还是一个数组,但是元素对应的数组,没有被创建的,arr[0]  = null。

注意:二维数组的长度,一定要给出的,[3]代表二维数组长度

int[][] arr2 = {{},{4},{5,6,7}};

解释:arr2是一个二维数组,里面有3个元素,对应三个数组,分别是{},{4},{5,6,7}

注意:int [ ] [ ] arr = new int [0] [0];

这样定义回抛出异常,因为arr[0]索引上的元素为{},是一个没有任何元素的数组,获取没有元素的数组的指定索引,会抛出数组索引越界异常 ArrayIndexOutOfBoundsException。

数组的注意事项

1.在对数组进行操作时,先控制其值不为null,然后再判断数组的长度,以免发生空指针异常。如果 int [ ] a = null,那么针对于数组的所有操作,都将抛出空指针异常。

2.其实,如果不判断数组的长度不为0,就进行数组的循环遍历,for循环是可以控制住不报错的,但是最好将判断数组长度不为0写上,这样比较严谨。

3.int [ ] a = null;在内存中不开辟空间。int [ ] a = { };在内存中开辟空间,只不过数组中没有元素。

二维数组遍历代码:

public static void main(String[] args) {

//定义一个二维数组

int[][] arr2 = { {}, { 4 }, { 5, 6, 7 } };

// 首先,先判断二维数组不能为null并且数组的长度不为0

if (arr2 != null && arr2.length != 0) {

//利用for循环,遍历二维数组的每一个元素

for (int i = 0; i < arr2.length; i++) {

//二维数组的每一个元素又是一个数组,所以还需要判断数组不能为null并且数组的长度不为0

if (arr2[i] != null && arr2[i].length != 0) {

//利用for循环,遍历二维数组的每一个一维数组中的元素

for (int j = 0; j < arr2[i].length; j++) {

int z = arr2[i][j];

//在一行输出每个一维数组中的元素,用,分隔

System.out.print(z+",");

}

//每输出完一个一维数组,换行

System.out.println();

} else {

System.out.println("一维数组不能为null并且数组长度不能为0");

}

}

}else {

System.out.println("二维数组不能为null并且数组长度不能为0");

}

}

练习:

分析以下需求,并用代码实现:

(1)定义一个int类型的一维数组,内容为{6,2,9,15,1,5,20,7,18}

(2)将数组最大元素与最后一位元素进行交换,最小元素与第一位元素进行交换,并打印数组,最后效果{1,2,9,15,6,5,18,7,20}

提示思路:先查找最大值和最小值出现的索引。

代码实现:

public static void main(String[] args) {

int[] arr = {6,2,9,15,1,5,20,7,18};//{1,2,9,15,6,5,18,7,20}

//判断数组不能为null并且数组长度不能为0

if(arr != null&&arr.length != 0){

//判断数组中的元素个数是否为1,如果只有一个数,直接输出

if(arr.length == 1){

System.out.println(arr[0]);

//判断数组中元素个数是否为2,如果有两个,判断大小,最后输出结果

}else if(arr.length == 2){

if(arr[0]>arr[1]){

int temp = arr[0];

arr[0] = arr[1];

arr[1] = temp;

}

for(int i = 0;i

System.out.print(arr[i]+",");

}

//判断数组中的数据个数是否为2个以上

}else if(arr.length > 2){

//定义几个变量假设是最小值,最大值,最小值的索引,最大值的索引

int min = arr[0];

int max = arr[arr.length-1];

int minIndex = 0;

int maxIndex = arr.length-1;

//使用for循环进行遍历

for(int i = 0;i

//找到最小值和最小值的索引

if(arr[i]

minIndex = i;

min = arr[i];

}

//找到最大值和最大值的索引

if(arr[i]>max){

maxIndex = i;

max = arr[i];

}

}

//将最小值和第一个数替换

int tempMin = arr[minIndex];

arr[minIndex] = arr[0];

arr[0] = tempMin;

//将最大值和最后一个数替换

int tempMax = arr[maxIndex];

arr[maxIndex] = arr[arr.length-1];

arr[arr.length-1] = tempMax;

//for循环遍历输出最后结果

for(int i = 0;i

System.out.print(arr[i]+",");

}

}

}else{

System.out.println("数组不能为null并且数组长度不能为0");

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结构型设计模式总结

结构型设计模式总结Intro前面几篇文章已经介绍完了所有的结构型设计模式&#xff0c;来做一个总结结构型设计模式主要总结了一些类或对象组合在一起的经典结构&#xff0c;这些经典的结构可以解决一些特定应用场景的问题。结构型模式包括&#xff1a;代理模式、桥接模式、装饰器…

Java手撕Linkedlist(双向链表)基本用法的实现

一&#xff1a;引言 实现的方法 LinkList类都有 自带的 可以直接调用 &#xff0c;这是为了熟悉底层代码 敲了一下基本用法 &#xff0c;主要以高琪老师讲的来写 二&#xff1a;上码 package cn.wyj.two;import java.awt.image.RasterFormatException;/**自定义一个链表* pa…

在 MySQL 中使用码农很忙 IP 地址数据库

在下载到码农很忙 IP 地址数据库后&#xff0c;我们可以将其存储在 MySQL 数据库中&#xff0c;并在需要查询某个 IP 对应的位置数据时&#xff0c;通过 SQL 语句获取正确的结果。这是一种很便捷的使用方式&#xff0c;并且在增加了恰当的索引后&#xff0c;可以取得不错的搜索…

java numberformat异常_Java NumberFormat格式化float类型的bug

首先&#xff0c;这个NumberFormat这个类&#xff0c;可以格式化各种数字。你只要稍微设置一下&#xff0c;结果还是很理性的。但是&#xff0c;他有那么一丢丢的bug&#xff0c;不知道你知道不&#xff1f;/*** 2.3F经过格式化&#xff0c;竟然变成2.99啦。what the fuck .* f…

7-24 树种统计 (25 分)(详解)map做法 map真香啊!

一&#xff1a;题目 7-24 树种统计 (25 分)随着卫星成像技术的应用&#xff0c;自然资源研究机构可以识别每一棵树的种类。请编写程序帮助研究人员统计每种树的数量&#xff0c;计算每种树占总数的百分比。 输入格式: 输入首先给出正整数N&#xff08;≤10 ​5 ​​ &#xf…

死磕 Redis,我有这么几招

如果你是一位后端工程师&#xff0c;面试时八成会被问到 Redis&#xff0c;特别是那些大型互联网公司&#xff0c;不仅要求面试者能简单使用 Redis&#xff0c;还要深入理解其底层实现原理&#xff0c;具备解决常见问题的能力。可以说&#xff0c;熟练使用 Redis 就是后端工程师…

java 递归 全局变量_java - 递归期间的全局变量 - 堆栈内存溢出

我有一个全局变量masterList&#xff0c;它是一个HashMap。private static HashMap, Integer> masterList new HashMap, Integer>();我有一个递归函数generateAnagram&#xff0c;该函数将字谜的ArrayLists放入此HashMap中&#xff0c;并将列表中的单词数作为值。 但是&a…

回归统计在DMP中的实战应用

源宝导读&#xff1a;本文将讲解在大数据分析领域的线性回归统计计算方法&#xff0c;以及如何将非线性转化为线性回归的原理&#xff0c;同时介绍了两种的回归统计库的使用和对比&#xff0c;最后介绍线性回归在DMP产品的应用实践。一、背景回归统计&#xff0c;是数据分析常用…

java 变成题_Java 习题8 参考答案及解析

1.问答题“\hello”是正确的字符串常量吗&#xff1f;“你好KU”.length()和”\n\t\t”.length()的值分别是多少&#xff1f;“Hello”.equals(“hello”)和”java”.equals(“java”)的值分别是多少&#xff1f;“Bird”.compareTo(“Bird fly”)的值是正数还是负数&#xff1…

Java当中Map的认识和基本用法

一&#xff1a;Map Map用于保存具有映射关系的数据&#xff0c;Map集合里保存着两组值&#xff0c;一组用于保存Map的ley&#xff0c;另一组保存着Map的value,也就是Map的 键值 和关键值 。具体举例 &#xff0c;和查字典类似&#xff0c;通过key找到对应的value&#xff0c;通…

java 解析 manifest_解析AndroidManifest.xml之AXMLParser.java | 学步园

解析AndroidManifest.xml源码地址:http://code.google.com/p/android4me/source/browse/src/android4me/res/AXMLParser.java/* * Copyright 2008 Android4ME * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file exc…

Java手写Hashmap(HashMap的基本用法)

一&#xff1a;引言 HashMap是Map的实现类&#xff0c;其方法都可以继承Map,不用手写&#xff0c;本篇只是为了了解底层代码和复习java基础敲得码 二&#xff1a;上码 package cn.wyj.two;public class Demo5_手写HashMap<K,V> {Node2 table[];//位桶数组int size;pub…

龙芯3A5000初样顺利交付流片

此前&#xff0c;龙芯完成3A5000设计初样的流片交付。在3A4000架构的基础上&#xff0c;3A5000采用12纳米工艺&#xff0c;设计频率提高近40%&#xff0c;同频模式下功耗降低近60%&#xff0c;同时保持与3A4000芯片管脚兼容。龙芯3A5000和3A4000在微结构上变化不大&#xff0c;…

java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...

Java中堆、栈和常量池的区别栈 堆 常量池的概念首先我们先了解一下概念&#xff0c;Java把内存分成两种&#xff0c;一种叫做栈内存&#xff0c;一种叫做堆内存。栈内存存放基本类型的变量数据和对象类型的引用(请注意存放的是引用)&#xff0c;对象本身不存放在栈中&#xff0…

Java当中TreeMap用法

一&#xff1a;引言 当用到了TreeMap时候&#xff0c;是因为要根据键值进行排序&#xff0c;使输出的结果是按递增顺序的 二&#xff1a;上码 package cn.wyj.two;import java.util.Map; import java.util.TreeMap;/*** 一般当 键值需要排序时&#xff0c;我们会选择用 Tree…

redhat java 多个版本_Linux下安装JDK(多个版本) 切换

1、检查系统是否自带了OpenJDK以及相关安装包&#xff0c;如果有的话则应先将其卸载。检查命令&#xff1a;java -versionrpm -qa | grep javarpm -e --nodeps tzdata-java-2013g-1.el6.noarchrpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686rpm -e --nodeps…

efcore 新特性 SaveChanges Events

efcore 新特性 SaveChanges EventsIntro昨天早上看到之前关注的一个 efcore 的 issue 被 closed &#xff0c;于是看了一眼&#xff0c; ef core 新合并了一个 PR&#xff0c;在 DbContext 中增加了 SaveChanges 相关的几个事件&#xff0c;具体的变更可以参数 PR https://gith…

Java手写HashSet

一&#xff1a;引言 HashSet类继承于 Set接口 其方法均可被直接调用&#xff0c;不用手写&#xff0c;本篇敲的码是为了熟悉底层原理&#xff0c;HashMap的特点&#xff1a;无序&#xff0c;无重复。其底层用的也是map<key,value>容器&#xff0c;但其value值固定,所以在…

十分钟搭建自己的私有NuGet服务器-BaGet

点击上方蓝字"小黑在哪里"关注我吧搭建BaGet上传程序包在vs中使用其他前言NuGet是用于微软.NET&#xff08;包括 .NET Core&#xff09;开发平台的软件包管理器。NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。通常使用NuGet都是官方的服务&…

java swing 面试题_下面有关JAVA swing的描述,说法错误的是?

Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。工具包中所有的包都是以swing作为名称&…