数组

数组定义:
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。
即:数(数据)组(一组)就是一组数据 v。
数组快速入门:

//数组的引出
public class Array01 { //编写一个main方法public static void main(String[] args) {/*它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg 。请问这六只鸡的总体重是多少?平均体重是多少?思路分析1. 定义六个变量 double , 求和 得到总体重2. 平均体重 = 总体重 / 63. 分析传统实现的方式问题. 6->600->5664. 引出新的技术 -> 使用数组来解决.*/// double hen1 = 3;// double hen2 = 5;// double hen3 = 1;// double hen4 = 3.4;// double hen5 = 2;// double hen6 = 50;// double totalWeight = hen1 + hen2 + hen3 + hen4 + hen5 + hen6;// double avgWeight = totalWeight / 6;// System.out.println("总体重=" + totalWeight //    + "平均体重=" + avgWeight);//比如,我们可以用数组来解决上一个问题 => 体验////////定义一个数组//老韩解读//1. double[] 表示 是double类型的数组, 数组名 hens//2. {3, 5, 1, 3.4, 2, 50} 表示数组的值/元素,依次表示数组的//   第几个元素//   double[] hens = {3, 5, 1, 3.4, 2, 50, 7.8, 88.8,1.1,5.6,100};//遍历数组得到数组的所有元素的和, 使用for//老韩解读//1. 我们可以通过 hens[下标] 来访问数组的元素//   下标是从 0 开始编号的比如第一个元素就是 hens[0]//   第2个元素就是 hens[1]  , 依次类推 //2. 通过for就可以循环的访问 数组的元素/值//3. 使用一个变量 totalWeight 将各个元素累积System.out.println("===使用数组解决===");//老师提示: 可以通过 数组名.length 得到数组的大小/长度//System.out.println("数组的长度=" + hens.length);double totalWeight = 0;for( int i = 0; i < hens.length; i++) {//System.out.println("第" + (i+1) + "个元素的值=" + hens[i]);totalWeight += hens[i];}System.out.println("总体重=" + totalWeight + "平均体重=" + (totalWeight / hens.length) );}
}

数组的使用:

import java.util.Scanner;
public class Array02 { //编写一个main方法public static void main(String[] args) {//演示 数据类型 数组名[]=new 数据类型[大小]//循环输入5个成绩,保存到double数组,并输出//步骤//1. 创建一个 double 数组,大小 5//(1) 第一种动态分配方式//double scores[] = new double[5];//(2) 第2种动态分配方式, 先声明数组,再 new 分配空间double scores[] ; //声明数组, 这时 scores 是 nullscores = new double[5]; // 分配内存空间,可以存放数据//2. 循环输入//   scores.length 表示数组的大小/长度//   Scanner myScanner = new Scanner(System.in);for( int i = 0; i < scores.length; i++) {System.out.println("请输入第"+ (i+1) +"个元素的值");scores[i] =  myScanner.nextDouble();}//输出,遍历数组System.out.println("==数组的元素/值的情况如下:===");for( int i = 0; i < scores.length; i++) {System.out.println("第"+ (i+1) +"个元素的值=" + scores[i]);}}
}

数组使用细节和注意事项

public class ArrayDetail { //编写一个main方法public static void main(String[] args) {//1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理//int[] arr1 = {1, 2, 3, 60,"hello"};//String ->int 不对double[] arr2 = {1.1, 2.2, 3.3, 60.6, 100};//int ->double 可以//2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用String[] arr3 = {"北京","jack","milan"};//3. 数组创建后,如果没有赋值,有默认值//int    0, short 0,    byte 0,   *斜体样式* long 0, //float 0.0,    double 0.0,   char \u0000,//boolean false,String null//short[] arr4 = new short[3];System.out.println("=====数组arr4=====");for(int i = 0; i < arr4.length; i++) {System.out.println(arr4[i]);}//6. 数组下标必须在指定范围内使用,否则报:下标越界异常,比如 //int [] arr=new int[5]; 则有效下标为 0-4 //即数组的下标/索引 最小 0 最大 数组长度-1(4)int [] arr = new int[5];//System.out.println(arr[5]);//数组越界}
}

数组赋值机制

public class ArrayAssign { //编写一个main方法public static void main(String[] args) {//基本数据类型赋值, 赋值方式为值拷贝//n2的变化,不会影响到n1的值int n1 = 10;int n2 = n1;n2 = 80;System.out.println("n1=" + n1);//10System.out.println("n2=" + n2);//80//数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值//是一个地址 , arr2变化会影响到 arr1int[] arr1 = {1, 2, 3};int[] arr2 = arr1;//把 arr1赋给 arr2arr2[0] = 10;//看看arr1的值System.out.println("====arr1的元素====");for(int i = 0; i < arr1.length; i++) {System.out.println(arr1[i]);//10, 2, 3}System.out.println("====arr2的元素====");for(int i = 0; i < arr2.length; i++) {System.out.println(arr2[i]);//10, 2, 3}}
}

数组拷贝

编写代码 实现数组拷贝(内容复制) ArrayCopy.java
将 int[] arr1 = {10,20,30}; 拷贝到 arr2 数组, 要求数据空间是独立的。

public class ArrayCopy { //编写一个main方法public static void main(String[] args) {//将 int[] 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];}//老师修改 arr2, 不会对arr1有影响.arr2[0] = 100;//输出arr1 System.out.println("====arr1的元素====");for(int i = 0; i < arr1.length; i++) {System.out.println(arr1[i]);//10,20,30}//System.out.println("====arr2的元素====");for(int i = 0; i < arr2.length; i++) {System.out.println(arr2[i]);//}}
}

数组反转

要求:把数组的元素内容反转。 ArrayReverse.java
arr {11,22,33,44,55,66} {66, 55,44,33,22,11}
方式 1:通过找规律反转

public class ArrayReverse { //编写一个main方法public static void main(String[] args) {//定义数组int[] arr = {11, 22, 33, 44, 55, 66};//规律//1. 把 arr[0] 和 arr[5] 进行交换 {66,22,33,44,55,11}//2. 把 arr[1] 和 arr[4] 进行交换 {66,55,33,44,22,11}//3. 把 arr[2] 和 arr[3] 进行交换 {66,55,44,33,22,11}//4. 一共要交换 3 次 = arr.length / 2//5. 每次交换时,对应的下标 是 arr[i] 和 arr[arr.length - 1 -i]//代码//优化int temp = 0;int len = arr.length; //计算数组的长度for( int i = 0; i < len / 2; i++) {temp = arr[len - 1 - i];//保存arr[len - 1 - i] = arr[i];arr[i] = temp; }System.out.println("===翻转后数组===");for(int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");//66,55,44,33,22,11}}
}


方式 2:使用逆序赋值方式

public class ArrayReverse02 { //编写一个main方法public static void main(String[] args) {//定义数组int[] arr = {11, 22, 33, 44, 55, 66};//使用逆序赋值方式 //1. 先创建一个新的数组 arr2 ,大小 arr.length//2. 逆序遍历 arr ,将 每个元素拷贝到 arr2的元素中(顺序拷贝)//3. 建议增加一个循环变量 j -> 0 -> 5int[] arr2 = new int[arr.length];//逆序遍历 arrfor(int i = arr.length - 1, j = 0; i >= 0; i--, j++) {arr2[j] = arr[i];}//4. 当for循环结束,arr2就是一个逆序的数组 {66, 55, 44,33, 22, 11} //5. 让 arr 指向 arr2数据空间, 此时 arr原来的数据空间就没有变量引用//   会被当做垃圾,销毁arr = arr2;System.out.println("====arr的元素情况=====");//6. 输出 arr 看看for(int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}}
}

数组扩容

实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java

  1. 原始数组使用静态分配 int[] arr = {1,2,3}
  2. 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4}
  3. 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
import java.util.Scanner;
public class ArrayAdd02 { //编写一个main方法public static void main(String[] args) {/*要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java1.原始数组使用静态分配 int[] arr = {1,2,3}2.增加的元素4,直接放在数组的最后 arr = {1,2,3,4}3.用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n思路分析1. 定义初始数组 int[] arr = {1,2,3}//下标0-22. 定义一个新的数组 int[] arrNew = new int[arr.length+1];3. 遍历 arr 数组,依次将arr的元素拷贝到 arrNew数组4. 将 4 赋给 arrNew[arrNew.length - 1] = 4;把4赋给arrNew最后一个元素5. 让 arr 指向 arrNew ;  arr = arrNew; 那么 原来arr数组就被销毁6. 创建一个 Scanner可以接受用户输入7. 因为用户什么时候退出,不确定,老师使用 do-while + break来控制*/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("你退出了添加...");}
}

排序

查找

在 java 中,常用的查找有两种:

  1. 顺序查找 SeqSearch.java
  2. 二分查找
    例题
    有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判断数列中是否 包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。
import java.util.Scanner;
public class SeqSearch { //编写一个main方法public static void main(String[] args) {/*有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值思路分析1. 定义一个字符串数组2. 接收用户输入, 遍历数组,逐一比较,如果有,则提示信息,并退出*///定义一个字符串数组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 保存到 indexindex = i;break;//退出 } }if(index == -1) { //没有找到System.out.println("sorry ,没有找到 " + findName);}}
}

Java基础 DAY05相关推荐

  1. 小汤学编程之JAVA基础day05——数组

    一.概念 1.什么是数组      2.为什么要用到数组 二.使用方法 1.声明并分配空间      2.赋值     3.处理数据 三.数组的各种应用 1.求数组中最大/最小值      2.数组反 ...

  2. 第一阶段:Java基础总复习一一一和一一一面向对象OOP总复习

    一.Java基础 0.Maven的介绍: 官网:https://maven.apache.org/download.cgi (1)Maven是什么? Maven 是 Apache 开源组织奉献的一个开 ...

  3. Java基础入门语法和安装

    1. Java概述 1.1 Java语言背景介绍(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Un ...

  4. Java笔记整理-02.Java基础语法

    1,标识符 由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A-Z)和小写字母(a-z),数字包含0到9. 标识符的第一个字符不能是数字(即标识符不能以数字开头). 标识符 ...

  5. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  6. Java基础概念性的知识总结

    属于个人的所学的知识总结,不是全面的 1.JDK.JRE和JVM三者的区别 01.JDK:(Java Development ToolKit)Java开发工具包,是整个Java的核心.包括了Java的 ...

  7. 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer www.cnblogs.com/J ...

  8. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  9. java重要基础知识点_必看 | 新人必看的Java基础知识点大梳理

    原标题:必看 | 新人必看的Java基础知识点大梳理 各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的"冰镇西瓜,"给大家清凉一下,压压惊. ...

最新文章

  1. WPS菜单栏自动隐藏的解决方法
  2. ABAP类的继承、多态、重载
  3. LunarCalendarUtil
  4. eDiary电子日记本
  5. 为 Confluence 6 配置发送邮件消息
  6. Mysql连接错误:Mysql Host is blocked because of many connection errors
  7. mysql 安装目录配置_linux 下mysql安装,目录配置
  8. 扫地机器人滤网顺序_扫地机器人如何维护 扫地机器人维护技巧【介绍】
  9. Java集合——TreeMap源码详解
  10. 怎么在Telegram电报纸飞机中搜索频道群组机器人教程。
  11. USB转485/232
  12. 计算机网络哈勃,NASA已基本确认哈勃故障原因 出在电源控制单元上
  13. 4.4-软件开发中,“UI设计图”的作用与绘制方法说明
  14. easyui treegrid php,jQuery中关于EasyUI的TreeGrid查询功能的实现
  15. 一些GIS地图的基础知识
  16. 旅游评论文本数据,bert分类,加完整的论文
  17. ClickHouse表引擎到底怎么选
  18. 关于烛光斧影——赵光义是否谋杀赵匡胤,是否合法继位
  19. 用C++打开指定网址
  20. 机关计算机使用管理制度,机关计算机使用管理制度

热门文章

  1. 五层体系结构特点及其功能
  2. 分布式子系统之间通讯
  3. 使用Amazon Deep Learning AMI 快速实现 CUDA,cuDNN 和深度学习框架版本兼容
  4. 数据表格之多表头设置
  5. P1003 铺地毯 C++
  6. 计算3个地理坐标点之间的夹角
  7. 物联网卡要求实名认证的真正原因你知道吗?
  8. Len()、Lenw()与Lenb()函数间的区别
  9. POSCMS 模块发布内容
  10. 深入探索Android内存优化