数组:
注意事项:
1.可存储比 数组类型 更小的值
例如:
double[] a = {1 , 2 , 3 , 1.2 , 1.3 , 2.2 ,4}
short[] b = {1 , 2 , 'a' ,'我'}
2.数组和变量一样,在使用前必须赋值(初始化),否则报错
int[] a ;
sout(a) → 报错
初始化:在内存中,为数组容器开辟空间,并将数据存入容器的过程
动态初始化:
int[] a = new int [6]
数据类型 | 默认值 |
整数 | 0 |
浮点数 | 0.0 |
布尔 | false |
字符 | 空字符 |
引用数据类型 | null |
java中内容分配:
栈内存:方法运行时,进入的内存,局部变量都在于此
堆内存:new出来的内容都会进入堆内存,并都会被赋予地址值
方法区:字节码文件(.class文件)加载时进入的内存,各类方法也会进入此处,但运行是在栈内存
本地方法栈:调用系统相关资源
寄存器:交给cpu去使用
运行的流程:
创建并写好了某个类,例如类名叫:Demo3.java
方法区 →栈内存 →堆内存
方法区:
Demo3.java → jvm编译后 →Demo3.class →字节码文件加载进方法区中,且main方法存放在字节码文件中 →main方法被jvm自动调用,进入栈内存执行
栈内存:
执行main方法,new的变量会被赋予地址值
堆内存:
存放new出来的内容,且有地址值
注意:可以 多个数组 指向同一个堆内存地址
int[] arr1 = new int [2]
int[] arr2 = arr1;
静态初始化:
int[] arr = new int[]{1 , 2 , 3}
简化:int[] arr = {1 , 2 , 3}
注意这里的简化也是new了一个堆内存空间
如何证明arr有没有在堆内存new地址?
直接sout(arr),若出现地址值,则new了一个地址
遍历用循环
动态获取数组元素个数:数组名.length
案例:
数组找最值
数组求和
数组的索引查找
评委评分
数组找最值
package package1;
public class c0 {
public static void main(String[] args) {
int[] a = {1,2,6,5,8,7};
int max = a[0];//这里直接假设数组第一个为最大值
for (int i = 1; i < a.length; i++) {//数组的第一个(索引0)就不用比对,直接从索引1开始
if (a[i]>max){//不要用a[0],不然一直跟索引0比对,得出的只有最后一位数,只能跟max比对
max = a[i];
}
}
System.out.println(max);
}
}
数组求和
package package1;
import java.util.Scanner;
public class c1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] all = new int[5];
for (int i = 0; i < all.length; i++) {
System.out.println("请输入第"+(i+1)+"个数据");
int shuju = scanner.nextInt();
all[i]=shuju;
}
System.out.println("结果为");
System.out.print("[");
for (int i = 0; i < all.length ; i++) {
if (i<all.length-1) {
System.out.print(+all[i] + ",");
}else {
System.out.println(all[i]+"]");
}
}
System.out.println("数组求和结果:");
int acount =all[0];
for (int i = 1; i < all.length; i++) {
acount += all[i];
}
System.out.println(acount);
}
}
数组的索引查找
package package1;
import java.util.Scanner;
public class c2 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入要查询的数据(-2退出)");
int sj = scanner.nextInt();
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == sj) {
index = i;
System.out.println("索引值为:"+index);
break;
}
}
if (sj == -2) {
break;
} else if (index == -1) {
System.out.println("您输入的数据不存在,请重新输入");
}
}
}
}
评委评分
package package1;
import java.util.Scanner;
public class c3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] all = new int[6];
//
System.out.println("一共6位评委");
for (int i1 = 0; i1 < all.length; i1++) {
System.out.println("请第" + (i1 + 1) + "位评委输入评分(1-100分)");
int sc = scanner.nextInt();
if (sc >= 0 && sc <= 100) {
all[i1] = sc;
} else {
System.out.println("您输入的分数有误,请重新输入");
i1--;
}
}
int max = all[0];
for (int i = 1; i < all.length; i++) {
if (all[i] > max) {
max = all[i];
}
}
int min = all[0];
for (int i = 1; i < all.length; i++) {
if (all[i] < min) {
min = all[i];
}
}
int acount = 0;
for (int i = 0; i < all.length; i++) {
acount += all[i];
}
System.out.println("最终结果:");
for (int i = 0; i < all.length; i++) {
System.out.println(all[i]);
}
System.out.println("-----------");
System.out.println("最大分数为" +
":"+max);
System.out.println("最小分数为:"+min);
System.out.println("总分为:"+acount);
System.out.println("最终计算分数为:"+(acount - max - min));
}
}
二维数组:
含义:是放多个一维数组的容器
格式:int[][] arr
动态初始化:int[][] arr = new int[3][2] (3表示可以存放几个一维数组,2表示每个一维数组能存几个元素)
静态初始化:int[][] arr = {{1,2,3},{2,3,4}}(也可以写成{arr1,arr2})
注意:
int[][] arr1 ={11,22,33}
int[][] arr2 = {22,33,44,100}
int[][] arr = new int[2][3]
a[1] = arr2 (运行成功!赋的是地址值,且可以访问到)
sout(a[1][3])=100
a[0][3] = 100 (运行报错!此处赋的是元素值,在0这个一维数组里创建的堆内存空间只有3个,所以访问不到第四个)
遗留的疑问:
1.如何判断评分 只能输入数字,而不是其他的数字例如 ‘9-’或字符等?
2.jvm虚拟机 再细节的运行流程 后续需要继续深入学习