java学习-数组
数组
Tips:IDEA的部分快捷键
psvm 生成主方法的矿建
sout 生成输出语句
ctrl +alt +L 格式化代码
alt +enter 代码修正提示
使用IDEA进行编程的时候,首先就是创建模块,直接在file下面的setting的ptoject str……里面进行创建和导入
但是在导入的时候注意选择的是模块的文件夹,也就是src上一级的目录文件夹
1、random模块,随机数模块
案例演示
//导入包
import java.util.Random;
public class random {
public static void main(String[] args) {
//创建对象
Random r = new Random();
//获取随机数
for(int i= 1; i<=10; i++){
int num= r.nextInt(10);
System.out.println("num");
}
}
}
案例二:猜数字
//导入包
import java.util.Scanner;
import java.util.Random;
//建立对象
Random r = new Random();
Scanner sc = new Scanner(System.in);
int randomNum = r.nextInt(100)+1;
//循环进行输入
while(true){
System.out.println("请输入数字");
int scnum = sc.nextInt();
if(num > randomNum){
System.out.println("猜大了");
}else if{
System.out.println("猜小了");
}else{
System.out.println("猜对了");
break; //如果程序没有这个break就报错,因为在死循环里面,无法执行到下面的感谢参与,如果有break,说明有可能执行到下面去。
}
System.out.println("感谢参与~");
}
数组
概念:存储同种数据类型的的多个值
小于容器类型的数据也可以存下去,比如int可以存储int byte short类型的数据
数组的格式:
1、数据类型[] 变量名
例子:int[] arrar //这种方法是常用的格式
2、数据类型 变量名[] //就是中括号的位置改变了一下
比如:char[] cArr //这个名字都是可以自定义的,怎么判断这个变量是否是一个数组,最直接的方法就是看是否有这个中括号。而且在使用数组的使用必须进行初始化
动态初始化
指定数据长度 由系统为数组分配初始值 初始值都是0
格式:
数据类型[] 变量名 = new 数据类型[数组长度];
int[] arr= new int[5]
//通过new关键词创建了int数据类型的数组容器,该容器可以存储5个int类型的数值,这个容器被arr所记录
数组的访问
格式:数组[索引]
存数据
arr[0]=1;
java的内存分配
有三个区域:
栈内存:方法运行的时候,就会进入栈内存,局部的变量都会存放这块内存种,比如main方法运行的时候就会进入这个区域
堆内存:new出来的内容就会直接进入堆内存,并且会存在地址值
方法区:字节码(class)文件加载的时候就会进入这个内存
每new一次的时候,在堆内存中,都是一块新的空间,堆内存中的空间地址不会出现重复的现象
java内存运行图
一个数组的内存图
两个数组的内存图:
多个数组指向相同的数组空间图:
静态数组
概念:就是指定数组要存储的元素,系统自动计算数组的长度
格式:数据类型[] 变量名 = new 数据类型[]{数据1.数据2,……}
例子:int[] arr = new int[]{1,2,3}
简化的格式:
int[] arr ={1,2,3}
Tips:动静态的使用场景,当明确了数据的具体数值可以使用静态初始化,想法就用动态初始化
数组的遍历
Tips:for循环的快捷键
arr.fori+回车,这样就会出现一个遍历数组的for循环
案例:
数组遍历
public class arr1{
public static void main(String[] args){
//第一步:首先定义数组
int[] arr = {11,22,33,44,55};
//第四步:调用函数
printArr(arr);
}
//第二步:定义遍历的函数
public static void printArr(int[] arr){ //这个里面就得填写数组int[] arr,就是参数
//第三步就是for循环换行输出
//第六步增加前面的中括号
System.out.print("[");
for(int i =0;i<arr.length;i++){
//第七步:判断输出最后的中括号
if (i == arr.length -1){
System.out.print(arr[i] + "]"); //为了防止影响之后的代码修改成println
//第八步:修改代码为else让最后输出这个]
}else{
System.out.print(arr[i]+", "); //第五步:增加打印间隔 效果 11, 22, 33, 44, 55,
}
}
}
}
里面还有一个细节就是第四步这个调用函数会影响其他的代码,因为他这个是不换行输出,如果后面的代码有输出的话就会在这个函数执行完输出之后贴着输出比如函数调用下面有一条代码System.out.println("第二部分"),结果就是[11,22,33,44,55]第二部分,修改的话就直接将这个最后输出[符号的代码修改成println
案例:数组的最大值输出
public class max {
public static void main(String[] args) {
//第一步就是定义数组
int[] arr = {11,22,66,9,20};
//调用函数
int max = getMax(arr);
System.out.println(max);
}
public static int getMax(int[] arr) { //这边注意这个不是void,因为有返回值 所以就是int
//定义一个初始值
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if(max < arr[i]){
max = arr[i];
}
}
return max;
}
}
案例:数组的求和实验
import java.util.Scanner;
//首先创建一个输入对象用来接收输入的数字
//定义求和变量
//定义一个动态数组来接收数据
//将数值放入数组里面
//循环数组进行累加
//最后输出结果
public class arrsum {
public static void main(String[] args) {
// 创建输入对象
Scanner sc = new Scanner(System.in);
// 定义求和变量
int sum = 0;
// 定义数组
int[] arr = new int[5];
//接受数据
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i + 1) + "数字");
arr[i] = sc.nextInt(); //一次一次的接受输入的数据 注意这边怎么去接受数据的
}
for (int i = 0; i <arr.length; i++) {
sum +=arr[i];
}
System.out.println("总和为"+sum);
}
}
总结
需要掌握数组的创建格式还有动静态的初始化,还有就是对数组的遍历和存入的方式以及这个数组在代码运行的饿时候使用了那些区域,栈区,堆区和方法区这几个。