JAVA数组 day03
数组
静态初始化数组
定义数组后直接赋值
格式: 数据类型[] 数组名 = 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相关推荐
- java数组简单介绍以及其方法
小谈一下java数组 数组是存放数据的容器,有两个特点:元素类型唯一,长度固定. 一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种. 多维数组声明同样是以上要求. 在数组创建时,要注意一 ...
- java 数组 反射_java数组的反射
java数组的反射,有一个JAVA API类可以运用:java.lang.reflect.Array 具体应用: 1:判断一个对象是否是数组: int arr[] = {1,2,3}; Class c ...
- java 2维数据便利_计算机等级考试二级java数组辅导
数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 注意: ...
- (二十六)、Java数组在内存中如何存放与分配
Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字"new"创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说是一样的,因为数组也是一个 ...
- (PASS)JAVA数组去重 三种方法 (不用集合)
第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01;import java.sql.Array; import ...
- Java数组的基本操作方法整理
数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数 ...
- Java数组常见操作
Java数组常见操作 文章目录 Java数组常见操作 7.0 数组的遍历 1.使用foreach循环访问数组中每个元素. 2.使用简单的for循环(多层循环嵌套)来遍历数组. 7.1 数组长度 7.2 ...
- Java 数组转型和范型
今天写代码遇到一个奇怪的问题,代码结构如下: [java] view plaincopy print? ArrayList<String> list = new ArrayList< ...
- 1.1 Java数组简介:数组是什么?
在某些情况下,虽然可以使用单个变量来存储信息,但是如果需要存储的信息较多(例如存储 50 名学生的成绩),这时再依次创建变量声明并赋值显得非常麻烦. 随着处理的信息量越来越大,工作也就越来越烦琐,这时 ...
最新文章
- 96.6. Template
- 【实验】综合实验-咔咔咔还是一顿整
- Struts2的国际化(一)-国际化资源文件的配置及国际化信息的访问
- cocos2dx blender 骨骼动画实现
- Mycat设置开机自启
- UIKit框架-高级控件Swift版本: 6.UIAlertView方法/属性详解
- Java基础:参数是如何传递的
- c++客户端 grpc_grpc加TLS加密和令牌认证
- mysql 查询关键词顺序
- 【http协议2】 深入理解HTTP协议
- Mat 和 Iplimage* 相互转换
- jsp页面打开为空白页
- 如何在Ubuntu上使用Canonical的Livepatch服务
- 华硕重装后进入bios_重装系统以后,开机自动进bios,进不了系统怎么办
- 解析几何----双曲线左支极坐标方程
- 快速升级Anaconda中的Spyder
- java中获取指定时间的时间戳
- eclipse建maven项目报: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:1.0
- C语言小项目之扫雷游戏(简易版)
- 为什么要看《代码大全》?