数组

静态初始化数组

  • 定义数组后直接赋值

  • 格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2......};

  • //例如
    double [] source = new double[]{89,54,65,14,8}
  • 也可以简化为 :数据类型 [] 数组名 = {元素1,元素2,.....}

  • //例如
    int [] souce = {54,12,96,45,74} 
  • 注意:数组变量名中储存的是地址即数组在内存中的地址,数组是引用类型

数组的访问

public class ArrayDome {public static void main(String[] args) {int[] arr = {111,22,33,44};arr[2] = 555;System.out.println(arr[2]);System.out.println(arr.length);}
}
  • 注意:数组中的元素类型必须是相同类型的

  • 注意:数据类型[] 数组名也可以写成数据类型 数组名[]

  • 注意:数组一旦被定义出来,程序执行过程中长度、类型就被固定了不可更改

动态初始化数组

  • 定义数组时只给类型与长度

  • 格式:数据类型[] 数组名 = new 数据类型[长度]

数组的遍历

  • 遍历便利就是一个一个得的访问数据

数组的案例

求和

public class ArrayDome {public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5,6};int sum = 0;for (int i=0;i< arr.length;i++) {sum +=arr[i];System.out.println(arr[i]);}System.out.println(sum);
​}
}

求最值

package Array;
​
public class ArrayDome {public static void main(String[] args) {//数组元素求最值int[] arr = new int[]{10,24,34,48,45,6};int max = arr[0];for (int i=0;i< arr.length;i++) {max = max>arr[i]?max:arr[i];}System.out.println(max);}
}

猜数字游戏

package Array;
import java.util.Random;
import java.util.Scanner;
public class ArrayDome {public static void main(String[] args) {//猜字小游戏int[] arr = new int[5];Random r = new Random();Scanner sc = new Scanner(System.in);for (int i=0;i< arr.length;i++) {arr[i] = r.nextInt(20)+1;}OUT:while (true){System.out.print("请输入一个在1-20之间的整数");int guess = sc.nextInt();for (int i = 0; i < arr.length; i++) {if(arr[i]==guess){System.out.println("你猜中了");break OUT;//结束OUT下的循环}}System.out.println("数组中不存在这个数,再猜");}System.out.println("数组中的内容为");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+"\t");}}}

随机排名

package Array;
import java.util.*;
public class ArrayDome1 {public static void main(String[] args) {//随机打乱工号Random r = new Random();Scanner sc =new Scanner(System.in);int[] job_number = new int[5];for (int i = 0; i < job_number.length; i++) {System.out.print("请输入第"+i+"未员工的工号");int number = sc.nextInt();job_number[i] = number;}for (int i = 0; i < job_number.length; i++) {int index = r.nextInt(job_number.length);int temp = job_number[index];job_number[index]=job_number[i];job_number[i]=temp;}for (int i = 0; i < job_number.length; i++) {System.out.print(job_number[i]+"\t");}}
}

冒泡排序

package Array;
​
public class Arraydome2 {public static void main(String[] args) {int[] arr = new int[] {4,8,7,7,10,11,12,6,9,11,12,1,5};for (int i=1;i<=arr.length;i++){for (int j=0;j<arr.length-1;j++){if (arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+"\t");}}
}

数组内存图

Java内存分配

栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。

存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。

方法区

存放class文件的地方,所有方法都在里面

本地方法栈

寄存器

数组使用的常见问题

  • 问题一:如果访问的最大索引超过最大索引,会报错ArrayIndexOutOfBroundsException

  • 如果数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现NullPointerException(空指针异常)

DeBug工具的使用

断点调试工具


方法

方法是生么

方法是一种语法结构他可以把一段代码封装成一个功能,以便反复调用。

使用方法的好处

  • 提高代码的复用性

  • 让程序逻辑清晰

方法定义的格式

修饰符 返回值的类型 方法名(形参列表){

​ 方法体代码

​ return 返回值;

}

注意:没有返回值也可以使用return立即跳出此方法

示例:

package Method;
​
public class MethodDome {public static void main(String[] args) {System.out.println(add(1,2));}public static int add(int a,int b){int c = a+b;return c;}
}
  • 注意:不要将定义的方法放到main方法中

  • 注意:返回值类型必须与返回值的类型相对应

  • 注意:没有返回值类型必须声明时void

  • 注意:如果声明了返回值类型就必须有return

  • 注意:一个方法中return后面的代码不会被执行。

  • 目前先使用public static

案例

判断输入数字是偶数还是奇数

package Method;
​
public class MethodDome {public static void main(String[] args) {check(5);}public static void check(int input){if (input%2==1){System.out.println("是奇数");}else{System.out.println("是偶数");}}
}

返回任意整形数组的·最大值

package Method;
​
public class MethodDome {public static void main(String[] args) {int[] arr = {1,3,5,7,3,4,6,8};System.out.println(getArrayMax(arr));}public static int getArrayMax(int[] arr){int max = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i]>max){max = arr[i];}}return max;}
}
  • 注意:参数列表中传输的是列表的地址

方法的传递机制

基本数据类型的传递机制

java基本数据类型的参数传递机制:值传递

  • 在传输实参给方法的形参的时候,并不是传输实参本身,而是传输实参变量中储存的值。

  • 形参:如定义的变量

  • 实参:如在定义方法时,“()”中所声明的参数

引用数据类型的传递机制

java引用数据类型的参数传递机制:值传递

传递的是地址,Array在方法中值被改变,main也会被改变

案例

打印像这样的数组[1,4,2,5,1,5,9]

package Method;
​
public class ArrayPrint {public static void main(String[] args) {int[] arr = {5,4,1,8,6,8,1,5};ArrayPrint(arr);}public static void ArrayPrint(int[] arr){System.out.print("[");for (int i = 0; i < arr.length; i++) {if (arr!=null && arr.length>0){System.out.print(i==arr.length-1 ? arr[i]:arr[i]+", ");}}System.out.print("]");}
}

设计一个方法可以接收整型数组,和要查询的元素值;最终要返回元素在该数组中的索引,如果数组中不存在该元素则返回-1。不存在该元素则返回-1.

package Method;
​
public class GetIndex {public static void main(String[] args) {int[] arr = {1,5,8,11,6,7,18};getIndex(arr,8);}public static int getIndex(int[] arr,int input){for (int i = 0; i < arr.length; i++) {if (arr[i]==input){System.out.println(i);return i;}}return -1;}
}

方法重载

  • 同一个类中,出现多个同名的方法,但是形参的列表是不同的,那么这种方法就是方法重载

案例

package Method;
​
public class GetIndex {public static void main(String[] args) {fire();fire("M国");fire(9, "M国");}public static void fire(){System.out.println("发射一枚武器");}public static void fire(String Loaction){System.out.println("发射一枚武器到"+Loaction);}public static void fire(int number, String Loaction){System.out.println("发射"+number+"枚武器到"+Loaction);}}
  • 方法重载的优势

  • 可读性强

方法重载的识别技巧

基础篇案例

买飞机票

package com.practise;
import java.util.Scanner;
public class Tese1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入购买的原价");double money = sc.nextInt();System.out.println("请输入购买的月份");int month = sc.nextInt();System.out.println("请输入购买的仓位");String type = sc.next();System.out.println(calc(money,month,type));}public static double calc(double money, int month, String type){//旺季if(month>=5 && month<=10){switch(type){case "经济舱":money *=0.85;break;case "头等舱":money *=0.9;break;default:System.out.println("您的输入有误");break;}}else if(month==11 || month==12 || month<5 && month>0){//淡季switch(type){case "经济舱":money *=0.65;
​break;case "头等舱":money *=0.7;break;default:System.out.println("您的输入有误");break;}}else {System.out.println("您的输入有误");}return money;}
}
​

打印素数

package com.practise;
​
public class Tese2 {public static void main(String[] args) {numer(100,200);}public static void numer(int start, int end){for (int i = start; i <end ; i++) {boolean flag =true;for (int j = 2; j < i/2; j++) {if(i%j==0){flag = false;break;}}if (flag){System.out.print(i+" ");}}}
}
​

生成验证码

 package com.practise;
import java.util.Random;
public class Test3 {public static void main(String[] args) {System.out.println(createCode(10));}public static String createCode(int n){Random r = new Random();String code = "";for (int i = 0; i < n; i++) {int type = r.nextInt(3);switch(type){case 0:code +=  r.nextInt(10);break;case 1:code += (char) (r.nextInt(26)+65);break;case 2:code += (char) (r.nextInt(26)+97);break;}}return code;}
}

双色球


package com.practise;
import java.sql.SQLOutput;
import java.util.*;
public class Test4 {public static void main(String[] args) {lunckNumber();}public static void lunckNumber(){Random r = new Random();Scanner sc = new Scanner(System.in);int[] lunckNumber = new int[7];int[] lunckNumberResult = new int[7];int red = 0;for (int i = 0; i < 7; i++) {if (i==0) {lunckNumber[i] = r.nextInt(1, 33);}else if (i==6){lunckNumber[i] = r.nextInt(1,16);}else {lunckNumber[i] = r.nextInt(1, 33);}}for (int i = 0; i < lunckNumber.length; i++) {if (i==6){System.out.print("请输入蓝球数字");lunckNumberResult[i] = sc.nextInt();}else {System.out.print("请输入第"+(i+1)+"个红球数字");lunckNumberResult[i] = sc.nextInt();}}for (int i = 0; i < lunckNumber.length; i++) {if(i==6){if (lunckNumber[i]==lunckNumberResult[i]){System.out.print("蓝球中  ");}else {System.out.print("蓝球未中  ");}}else {for (int i1 = 0; i1 < lunckNumberResult.length-1; i1++) {if(lunckNumber[i]==lunckNumberResult[i1]){red +=1;
​}}}}System.out.println("红球中了"+red+"个");System.out.print("选的号码是:");for (int i = 0; i < lunckNumber.length; i++) {System.out.print(lunckNumberResult[i]+" ");}System.out.println();System.out.print("中奖号码是:");for (int i = 0; i < lunckNumber.length; i++) {System.out.print(lunckNumber[i]+" ");}
}
}

JAVA数组 day03相关推荐

  1. java数组简单介绍以及其方法

    小谈一下java数组 数组是存放数据的容器,有两个特点:元素类型唯一,长度固定. 一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种. 多维数组声明同样是以上要求. 在数组创建时,要注意一 ...

  2. java 数组 反射_java数组的反射

    java数组的反射,有一个JAVA API类可以运用:java.lang.reflect.Array 具体应用: 1:判断一个对象是否是数组: int arr[] = {1,2,3}; Class c ...

  3. java 2维数据便利_计算机等级考试二级java数组辅导

    数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 注意: ...

  4. (二十六)、Java数组在内存中如何存放与分配

    Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字"new"创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说是一样的,因为数组也是一个 ...

  5. (PASS)JAVA数组去重 三种方法 (不用集合)

    第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01;import java.sql.Array; import ...

  6. Java数组的基本操作方法整理

    数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数 ...

  7. Java数组常见操作

    Java数组常见操作 文章目录 Java数组常见操作 7.0 数组的遍历 1.使用foreach循环访问数组中每个元素. 2.使用简单的for循环(多层循环嵌套)来遍历数组. 7.1 数组长度 7.2 ...

  8. Java 数组转型和范型

    今天写代码遇到一个奇怪的问题,代码结构如下: [java] view plaincopy print? ArrayList<String> list = new ArrayList< ...

  9. 1.1 Java数组简介:数组是什么?

    在某些情况下,虽然可以使用单个变量来存储信息,但是如果需要存储的信息较多(例如存储 50 名学生的成绩),这时再依次创建变量声明并赋值显得非常麻烦. 随着处理的信息量越来越大,工作也就越来越烦琐,这时 ...

最新文章

  1. 96.6. Template
  2. 【实验】综合实验-咔咔咔还是一顿整
  3. Struts2的国际化(一)-国际化资源文件的配置及国际化信息的访问
  4. cocos2dx blender 骨骼动画实现
  5. Mycat设置开机自启
  6. UIKit框架-高级控件Swift版本: 6.UIAlertView方法/属性详解
  7. Java基础:参数是如何传递的
  8. c++客户端 grpc_grpc加TLS加密和令牌认证
  9. mysql 查询关键词顺序
  10. 【http协议2】 深入理解HTTP协议
  11. Mat 和 Iplimage* 相互转换
  12. jsp页面打开为空白页
  13. 如何在Ubuntu上使用Canonical的Livepatch服务
  14. 华硕重装后进入bios_重装系统以后,开机自动进bios,进不了系统怎么办
  15. 解析几何----双曲线左支极坐标方程
  16. 快速升级Anaconda中的Spyder
  17. java中获取指定时间的时间戳
  18. eclipse建maven项目报: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:1.0
  19. C语言小项目之扫雷游戏(简易版)
  20. 为什么要看《代码大全》?

热门文章

  1. linux 4t磁盘格式化,Ubuntu 16.04系统挂载4T硬盘
  2. UVM实战书籍再复习
  3. ubuntu20.04美化
  4. 魅族15系统是android,魅族工程师回复Flyme 8没有升级底层,魅族15还是安卓7.1
  5. Linux内核内存检测工具KASAN
  6. 数学无敌—王老菊教你当典狱长
  7. C# WinIo获取键盘记录
  8. 迷宫游戏(wap页游还原)-JavaScript实现
  9. SPI flash远程加载FPGA 应用
  10. 【Verilog-9.9】initial和always的用法