Java03 二维数组|方法

一、声明数组和初始化(掌握)

数据类型[]  数组名 ;
数据类型  数组名[] ;

静态初始化

数据类型[]  数组名 = {元素1,元素2,元素3};

动态初始化

数据类型[]  数组名 = new 数据类型[5];
数组名[0] = 元素1;

二、数组的内存结构(掌握)

package com.hl.array;public class ArrrayDemo1 {public static void main(String[] args) {//局部变量//基本数据类型int i = 1;//引用数据类型int[] array = new int[5];System.out.println(i);//栈区的值System.out.println(array);//堆区的内存地址}
}

package com.hl.array;public class ArrrayDemo1 {public static void main(String[] args) {//局部变量//基本数据类型int i = 1;//引用数据类型int[] array = new int[5];System.out.println(i);//栈区的值System.out.println(array);//堆区的内存地址int[] array2 = array;array2[0] =  1;System.out.println(array2[0]);//1System.out.println(array[0]);//0 1}
}

三、使用数据

1、数据的复制 (深拷贝和浅拷贝)

int[] array1 = new int[5];
int[] array2 = array1;  //内存地址的copy 浅拷贝深拷贝拷贝的是数组的值
package com.hl.array;import java.util.Arrays;public class ArrayDemo2 {public static void main(String[] args) {int[] array1 = new int[10];int[] array2 = new int[array1.length];for (int i = 0; i < array2.length; i++) {array2[i] = array1[i];}array1[0] = 1;array2[0] = 2;System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));}
}

2、数组的插入和删除

数组插入,删除:效率低,牵涉到扩容和数据元素移动。

数据:查询|修改效率高 ,内存空间连续,有索引下标,可以快速定位。

3、算法(了解)

排序:冒泡、选择排序

查找:二分查找

没有二分查找时,是遍历所有元素 数组长度100,最快1次,最慢100次,平均50次

前提条件是 数组是有序的。

int[]  array = {1,2,3,4,5,6,7}

123 4 567

mid = 4

num 10 num>mid [5,6,7]

min = mid+1 max=length-1

mid = 6

min=max=mid mid==10

四、二维数组

二维数组本质上就是一个一维数组,每一个元素又是一个一维数组。

int[] array = {1,2,3,4};
int[][] array = {{1,2,3,4},{5,6,7,8}
};//索引坐标    从二维数组中获取数据int[] arr2 = array[0];
sout(arr2[0] + arr2[1])sout(arr[0][0])

二维数组的定义和初始化

静态初始化:
int[][] array = {{1,2,3,4},{5,6,7,8}
};动态初始化:
int[][] array = new int[2][4];
//2行 4列
0  0  0  0
0  0  0  0
array[0][0]  ... [0][3]
array[1][0]  ... [1][3]

二维数组的遍历

package com.hl.array2;public class Demo1 {public static void main(String[] args) {int[][] array = {{1,2,3},{4,5,6},{7,8,9,10}};//遍历查询//求二维数组长度System.out.println(array.length);for(int i=0;i<array.length;i++){//一维数组int[] array2 = array[i]; // {1,2,3}//遍历每一个一维数组for (int j = 0; j < array2.length; j++) {System.out.print(array2[j]+"  ");}System.out.println();//换行符}}
}

package com.hl.array2;public class Demo2 {public static void main(String[] args) {int[][] a = {{1,2,3},{4,5,6},{7,8,9,10}};//作为二维数组,通过平面图形,利用坐标遍历for (int i = 0; i < a.length; i++) {//外层循环行for (int j = 0; j < a[i].length; j++) {//内层循环列System.out.print(a[i][j] +"  ");}System.out.println();}}
}

内存空间分配

使用二维数据

需求:生成10注双色球

//生成10注双色球
int[][] tickets = new int[10][7];
for (int i = 0; i < tickets.length; i++) {for (int j = 0; j < tickets[i].length; j++) {if(j < 6){//前6次,生成红色球tickets[i][j] = random.nextInt(33)+1;}else{//生成一次蓝色球tickets[i][j] = random.nextInt(16)+1;}}
}
//得到的二维数据
System.out.println(tickets);

改造需求:要求前6个球不能重复

//生成10注双色球
int[][] tickets = new int[20][7];
for (int i = 0; i < tickets.length; i++) {for (int j = 0; j < tickets[i].length; j++) {if(j < 6){//前6次,生成红色球tickets[i][j] = random.nextInt(33)+1;//解决数字重复问题for (int k = 0; k < j; k++) {if(tickets[i][j] == tickets[i][k]){j--;break;}}}else{//生成一次蓝色球tickets[i][j] = random.nextInt(16)+1;}}
}
//得到的二维数据
System.out.println(Arrays.deepToString(tickets));

五、方法

1、了解方法的作用

什么是方法?

方法是具有特定功能的代码块。

简单的理解就是:把一段完整的代码,看成一个整体,并给这段代码起个名字,以后在用的时候,使用这个名字就相当于执行了这一段代码。

方法必须先创建才可以使用,创建只需要进行一次创建,使用可以多次。方法的创建过程称为方法的定义。

2、声明方法(定义方法)

方法的定义

方法隶属于类,因此方法要定义在类中,且方法不能定义在别的方法内。---类后面会详细讲。

方法定义的格式

public static 返回值类型 方法名(参数列表){方法体
}public static void 方法名(){  //无参方法}public static 返回值(基本数据|引用类型) 方法名(){  //无参方法return 10;
}

public、static在讲类和对象的时候会详细讲,此处先固定这么写。

方法名的命名规范和变量名的命名规范相同。

返回值、参数列表 下面专门讲解

方法的分类

方法按有没有参数,有没有返回值可以分为以下4类:

  1. 无参数无返回值方法

  2. 无参数有返回值方法

  3. 有参数无返回值方法

  4. 有参数有返回值方法

3、调用方法

package com.hl.methodDemo1;public class MethodDemo2 {//main方法 入口方法public static void main(String[] args) {//调用方法//调用无参方法  方法名()printHello();printHello();//调用有参方法  方法名(值,值)   实参sum(1,2);int num = sum2(10,12);System.out.println(num);}//创建一个方法,在方法内打印helloworldpublic static void printHello(){System.out.println("hello world!");}//创建一个方法,在方法内打印两个数字的和(传入两个参数)//sum(int i,int j) 形参(一个变量,一个占位符)public static void sum(int i,int j){System.out.println(i+j);}//创建一个方法,返回两个数字的和(返回 --->要求有返回值)public static int sum2(int i,int j){return i+j;}
}

4、方法的值传递

基本类型的值传递(传递的是数值)

package com.hl.methodDemo1;public class MethodDemo3 {public static void main(String[] args) {//调用方法int i = 1;m1(i);System.out.println("main...."+i);}//声明方法public static void m1(int i){i++;System.out.println("m1...."+i);}
}

package com.hl.methodDemo1;public class MethodDemo3 {public static void main(String[] args) {//调用方法int i = 1;
//        m1(i);
//        System.out.println("main...."+i);int j = m2(i);System.out.println(i);System.out.println(j);}//声明方法public static void m1(int i){i++;System.out.println("m1...."+i);}public static int m2(int i){i++;return i;}
}

引用类型的值传递(堆区内存地址)

package com.hl.methodDemo1;public class MethodDemo4 {public static void main(String[] args) {//调用方法int[] array = {6,5,4,3,2,1};m1(array);System.out.println(array[0]);//6  1System.out.println(array[1]);//5  2System.out.println(array[2]);//4  4}//定义方法public static void m1(int[] array){array[0] = 1;array[1] = 2;System.out.println(array[0]);//1System.out.println(array[1]);//2System.out.println(array[2]);//4}
}

package com.hl.methodDemo1;public class MethodDemo5 {public static void main(String[] args) {int i = 1;int[] array = new int[10];i = m1(i,array);System.out.println(i);//8、  1   3   4System.out.println(array[0]);//9、 2}public static int m1(int i ,int[] array){i++;array[0] = i++;return ++i;}//    public static void m1(int i ,int[] array){
//        i++;
//        array[0] = i++;
//        System.out.println(array[0]);//15、2
//        System.out.println(i);//16、3
//    }}

5、方法的重载

同一个类中,方法名称相同,参数列表不同,称为方法重载。

package com.hl.methodDemo1;import java.util.Random;/*
Overload 和 Override 的区别?
方法重载 和 方法重写 的区别?同一个类中,方法名称相同,参数列表不同,称为方法重载。(跟返回值无关)参数列表不同:参数个数不同,类型不同  或者  类型顺序不同max(int i,int j);max(int j,int i);max(int i,double j); //重载max(double i;int j) //重载*/
public class MethodOverload {public static void main(String[] args) {Math.max(1,3);Math.max(1.0,3.0);Random r = new Random();r.nextInt();r.nextInt(100);}//方法名---变量名 见名知意public static void add() {System.out.println("........");}public static int add(int a, int b){return a+b;}public static double add(double a, double b){return a+b;}public static double add(double a, int b){return a+b;}public static double add(int a, double b){return a+b;}}

6、不定参数方法

package com.hl.methodDemo1;
/*
不定参数注意事项:int...变量名 不定参数(0到多个变量),底层是数组一个方法中最多只能有一个不定参数,并且不定参数必须是最后一个参数*/
public class MethodDemo6 {public static void main(String[] args) {
//        int sum = sum();
//        System.out.println(sum);int[] array = {1,2,3};//调用者int sum = sum2(null);System.out.println(sum);}//自定义一个方法,求多个int变量的和//int...变量名 不定参数(0到多个变量),底层是数组public static int sum(int...num){int sum = 0;for (int i = 0; i < num.length; i++) {sum += num[i];}return sum;}
//    public static int sum(int[] array){
//        return 0;
//    }//定义方法public static int sum2(int[] num){int sum = 0;if(num != null){  //避免空指针异常for (int i = 0; i < num.length; i++) {//num 为null,出现空指针异常sum += num[i];}}return sum;}//自定义方法public static void sum3(double d1,double d2,int...args){}}

7、方法练习

1. 需求:设计一个方法,自定义数据范围(最小值和最大值),根据键盘录入获取用户输入的数据。
要求用户必须输入num1~num2之间的数,如果不是,让用户重新输入,直到用户输入的内容合法。

package com.hl.homework;import java.util.Scanner;public class WorkDemo1 {//1. 需求:设计一个方法,获取用户输入的数据。// 要求用户必须输入0~9之间的数,如果不是,让用户重新输入,直到用户输入的内容合法。public static int input(){Scanner scanner = new Scanner(System.in);int num = -1;do{System.out.println("请录入0-9的数字:");num = scanner.nextInt();if(num >= 0 && num <= 9){break;}else{System.out.println("录入错误,请重新录入");}}while(true);return num;}//2. 需求:设计一个方法,自定义数据范围,获取用户输入的数据。// 要求用户必须输入num1~num2之间的数,如果不是,让用户重新输入,直到用户输入的内容合法。public static int input(int num1,int num2){Scanner scanner = new Scanner(System.in);int num = -1;do{System.out.println("请录入"+num1+"-"+num2+"的数字:");num = scanner.nextInt();if(num >= num1 && num <= num2){break;}else{System.out.println("录入错误,请重新录入");}}while(true);return num;}public static void main(String[] args) {
//        int num =  input();
//        System.out.println("接收到:"+num);int num = input(5,10);System.out.println("接收到:"+num);}
}

关于return关键字:

package com.hl.homework;public class WorkDemo2 {public static void main(String[] args) {//调用方法double money = getMoney();System.out.println(money);}//方法定义//返回值的方法,必须使用return关键字返回结果给调用者public static double getMoney(){int i = 1;
//        if(i > 1){
//            return 1000;
//        }else{
//            return 10000;
//        }//        while(true){
////            break;
//            return 100000;
//        }boolean flag = true;while(flag){return 1;//返回到方法调用位置//System.out.println("----不可达---");}System.out.println("-----while 外------");return 10000;}
}

需求2:定义一个方法,接收一个二维数组,求二维数组中元素的最大值和最大值的索引下标。

package com.hl.homework;public class WorkDemo3 {
//    需求2:定义一个方法,接收一个二维数组,求二维数组中元素的最大值。public static int getMax(int[][] array){int max = array[0][0];int x = 0;int y = 0;for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {
//                System.out.print(array[i][j] + " ");if(array[i][j] >= max){max = array[i][j];x = i;y = j;}}}System.out.println("最大值索引下标"+x+"--"+y);return max;}//定义一个方法, 编写代码, 求二维数组中,第2行的平均值。public static double getAvg(int[][] array){int sum = 0;for (int i = 0; i < array[1].length; i++) {sum += array[1][i];}return sum*1.0/array[1].length;}public static void main(String[] args) {int[][] array = {{1,22,3},{4,55,6},{7,8,9}};
//        int max = getMax(array);
//        System.out.println("最大值是:"+max);double avg = getAvg(array);System.out.println("第二行的平均值为:"+avg);}
}

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

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

相关文章

1. JVM介绍和运行流程

1. jvm是什么JVM&#xff08;Java Virtual Machine&#xff09;是 Java 程序的运行环境&#xff0c;它是 Java 技术的核心组成部分&#xff0c;负责执行编译后的 Java 字节码&#xff08;.class文件&#xff09;。jvm 说白了就是虚拟机&#xff0c;一个专门运行java字节码文件的…

Spring Cloud Gateway 的路由和断言是什么关系?

1. 基本概念 路由是 Spring Cloud Gateway 的基本组成单元。它定义了从客户端接收到的请求应该被转发到哪个目标服务。一个完整的路由通常包含以下几个要素&#xff1a; ID (id)&#xff1a;路由的唯一标识符。目标 URI (uri)&#xff1a;请求最终要被转发到的后端服务地址。断…

线程属性设置全攻略

目录 一、线程属性的概念 二、线程属性的核心函数 1. 初始化与销毁线程属性对象 2. 常用属性设置函数 三、线程属性的设置示例 1. 设置线程为分离状态 2. 设置线程栈大小 3. 设置线程调度策略和优先级 四、线程属性的关键注意事项 1. 分离状态&#xff08;Detached S…

苍穹外卖-day06

苍穹外卖-day06 课程内容 HttpClient微信小程序开发微信登录导入商品浏览功能代码 学习目标 能够使用HttpClient发送HTTP请求并解析响应结果 了解微信小程序开发过程 掌握微信登录的流程并实现功能代码 了解商品浏览功能需求 功能实现&#xff1a;微信登录、商品浏览 1. H…

安卓定制功能

未解决的定制功能 1.创建自定义分区 2.通过服务启动应用进程 3.应用白名单 4.网络白名单 5.应用锁 6.默认launcher 7.多主页动态切换 8.禁止状态栏下拉/锁屏页面禁止下拉状态栏&#xff08;两种一起&#xff09; 9.导航栏动态打开关闭 10.固件默认是手势还是导航栏 11.状态栏动…

【项目】GraphRAG基于知识图谱的检索增强技术-实战入门

GraphRAG—基于知识图谱的检索增强技术&#xff08;一&#xff09;GraphRAG入门介绍&#xff08;二&#xff09;GraphRAG基本原理回顾&#xff08;三&#xff09;GraphRAG运行流程3.1 索引&#xff08;Indexing&#xff09;过程3.2 查询&#xff08;Query&#xff09;过程3.3 P…

Zookeeper添加SASL安全认证 修复方案

#作者&#xff1a;任少近 文章目录1修复背景2 修复方案说明3 配置流程3.1停止zookeeper服务3.2Zookeeper添加SASL参数3.3配置jaas密码文件3.4 添加启动参数3.5启动zookeeper服务3.6访问测试4 Kafka连接zookeeper服务端配置4.1未配置身份认证4.2停止kafka服务4.3配置身份认证4.4…

AI进化论07:第二次AI寒冬——AI“改头换面”,从“AI”变成“机器学习”

书接上回&#xff0c;上回咱们聊了神经网络在第一次寒冬中的“蛰伏”与“萌动”。但别高兴太早&#xff0c;AI很快就迎来了它的第二次“寒冬”&#xff08;大概从20世纪80年代末到90年代中期&#xff09;。这次寒冬啊&#xff0c;比第一次还“冷”&#xff0c;还“漫长”。AI这…

基于开源AI智能名片链动2+1模式与S2B2C商城小程序的渠道选择策略研究

摘要&#xff1a;在数字化商业环境下&#xff0c;品牌与产品的渠道选择对其市场推广和运营成功至关重要。本文聚焦于如何依据自身品牌和产品特性&#xff0c;结合开源AI智能名片链动21模式与S2B2C商城小程序&#xff0c;运用科学的渠道选择方法&#xff0c;慎重挑选1 - 2个适宜…

开源 C# .net mvc 开发(八)IIS Express轻量化Web服务器的配置和使用

文章的目的为了记录.net mvc学习的经历。本职为嵌入式软件开发&#xff0c;公司安排开发文件系统&#xff0c;临时进行学习开发&#xff0c;系统上线3年未出没有大问题。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 相关链接: 开源 C# .net mvc 开…

PostgreSQL安装及简单应用

下载地址&#xff1a;EDB: Open-Source, Enterprise Postgres Database Management 安装 注意&#xff1a;端口号默认是5432 配置dbeaver应用&#xff0c;创建数据库和表 -- 创建模式&#xff08;如果不存在&#xff09; CREATE SCHEMA IF NOT EXISTS bbbase;-- 创建序列&…

wedo智能车库-----第31节(免费分享图纸)

夸克网盘&#xff1a;https://pan.quark.cn/s/10302f7bbae0 高清图纸源文件&#xff0c;需要的请自取

【springboot】IDEA创建SpringBoot简单工程(有插件)

需求 使用SpringBoot开发一个web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串 hello world~ 步骤 1.创建Maven工程 2.导入spring-boot-stater-web起步依赖 3.编写controller 4.提供启动类 pom.xml文件了解 启动类 新建包 创建类 package com.zw…

python正则表达式re(Regular Expression)

目录 正则表达式&#xff1a; match()函数&#xff1a; search()函数&#xff1a; findall()函数&#xff1a; 正则表达式的参数&#xff1a; 表示字符范围的参数&#xff1a; 表示字符出现的次数的参数&#xff1a; 表示同一类字符的参数&#xff1a; 贪婪和非贪婪模式…

事件驱动设计:Spring监听器如何像咖啡师一样优雅处理高并发

架构哲学&#xff1a;当咖啡店面对汹涌客流时&#xff0c;真正的优雅不是更快的动作&#xff0c;而是科学的协作机制。Spring事件驱动正是通过发布-订阅模式&#xff0c;让系统像顶级咖啡师般从容应对突发流量。一、从咖啡店看监听器本质&#xff1a;3大核心组件拆解 场景还原&…

C++ const 关键字解析

const 是 C 中用于定义常量或指定不可变性的关键字&#xff0c;它在不同上下文中有不同的含义和用法。下面是对 const 的全面解析&#xff1a;1. 基本用法定义常量const int MAX_SIZE 100; const double PI 3.14159;这些值在程序运行期间不能被修改必须在定义时初始化与指针结…

[es自动化更新] Updatecli编排配置.yaml | dockerfilePath值文件.yml

链接&#xff1a;https://github.com/elastic/elasticsearch/tree/main/build-conventions elasticsearch自动化更新 本专栏使用updatecli实现自动化版本更新与依赖管理。 其配置通过编排文件&#xff08;updatecli-compose.yaml&#xff09;实现&#xff0c;该文件罗列了称…

新手向:使用Python将多种图像格式统一转换为JPG

本文将详细解析一个专业的Python脚本&#xff0c;它能够将指定文件夹中的所有非JPG格式图像批量转换为JPG格式。这个脚本虽然代码量不大&#xff0c;但包含了文件操作、图像处理、异常处理等多个重要编程概念&#xff0c;非常适合初学者系统学习。环境准备在开始之前&#xff0…

深入剖析C++ RPC框架原理:有栈协程与分布式系统设计

深入剖析C RPC框架原理&#xff1a;有栈协程与分布式系统设计 &#x1f6e0;️ 第一部分&#xff1a;RPC框架核心原理与技术架构 &#x1f310; 1.1 RPC在分布式系统中的核心地位 远程过程调用&#xff08;RPC&#xff09;是现代分布式系统的基石&#xff0c;它实现了&#xf…

基于springboot+Vue的二手物品交易的设计与实现

基于springbootVue的二手物品交易的设计与实现 作者&#xff1a; Mr顺 | 某大厂全栈开发工程师 | CSDN新星计划导师 | Java领域优质创作者 技术栈&#xff1a; SpringBoot, JavaWeb, 数据库等。精通Java、微信小程序开发。 项目亮点&#xff1a; 完整可运行&#xff1a; 提供…