IDEA的项目结构
project(项目、工程)
-- Module(模块)
-- Package(包)
-- Class(类)
-- Class(类)
-- Package(包)
-- Class(类)
-- Class(类)
-- Module(模块)
...
在使用IDEA来创建Java项目的时候,一定要满足上面的目录结构,否则代码跑不起来。
IDEA创建项目
1.创建项目
Crete New Project-->在左边选择Empty Project --> Next--> 填写项目名称(BasiceCode)
-->Finish
2.创建模块
点击+号-->New Module--> Next --> 填写模块的名称(myModule) -->finish --> Applye And Ok
3.在模块中创建包
选中src目录右键-->New --> Package --> 填写包的名称 (com.itheima.demo)
4.在包中新建类
选中包文件夹右键-->New --> Class --> 写具体代码
5.编译和运行
编译:自动编译
运行:
1)点击main方法左边的绿色三角按钮
2)右键-->Run
关闭已有项目
File --> Close Project
在已有的项目中新建模块
点击工具栏右边的按钮,如图所示。新建新的模块
删除已有的模块
在项目的结构页面,点击 减号 就可以删除模块。但是需要到项目文件夹中,手动删除才能彻底删除模块。
IDEA的快捷键
psvm: 一键生成主方法
sout: 生成输出语句
ctrl+alt+L: 格式化代码
alt+Enter: 代码修正提示
ctrl+/: 添加(取消)单行注释
ctrl+shift+/ : 添加(取消)多行注释
ctrl+D : 复制当前行的代码
ctrl+X : 剪切
ctrl+V : 粘贴
alt+1: 打开/隐藏项目结构
alt+4: 打开/隐藏控制台
10.fori : 10次的for循环
数组的初始化
数组是一个容器,用来存储多个类型相同的数据。数组中存储的每一个数据叫做元素
//定义数组格式- 动态初始化
数据类型[] 数组名=new 数据类型[长度];
int[] arrayA=new int[3]; //定义一个长度为3的数组,元素类型为int
byte[] arrayB=new byte[2]; //定义一个长度为2的数组,元素类型为byte
//定义数组格式- 静态初始化
数据类型[] 数组名=new 数据类型[]{元素1,元素2,元素3....};
int[] arrayA=new int[]{1,2,3,4,5}; //定义一个长度为5的数组,元素分别是1,2,3,4,5
char[] arrayB=new char[]{'a','b','c'} //定义一个长度为3的数组,元素分别是'a','b','c'
//定义数组格式- 静态初始化简化写法
int[] arrayA={1,2,3,4,5}; //定义一个长度为5的数组,元素分别是1,2,3,4,5
char[] arrayB={'a','b','c'}; //定义一个长度为3的数组,元素分别是'a','b','c'
注意:下面的写法也是可以的,但是不推荐
//定义数组格式- 动态初始化
数据类型 数组名[]=new 数据类型[长度];
int arrayA[]=new int[3]; //定义一个长度为3的数组,元素类型为int
byte arrayB[]=new byte[2]; //定义一个长度为2的数组,元素类型为byte
数组元素的访问
数组为每一个元素分配了一个编号,我们把这个编号叫做索引,从0开始依次递增。通过 数组名[索引] 就可以访问元素。
public class ArrayDemo1{
public static void main(String[] args){
//定义一个长度为3的数组,元素是int类型
int[] array=new int[3];
System.out.println(array); //地址值
System.out.println(array[0]); //0
System.out.println(array[1]); //0
System.out.println(array[2]); //0
//给数组的元素赋值
array[0]=10;
array[1]=20;
System.out.println(array[0]); //10
System.out.println(array[1]); //20
System.out.println(array[2]); //0
}
}
Java的内存分配
栈内存:存储局部变量(方法中的变量)
堆内存:new出来的数据
方法区:存储字节码的信息
HelloWorld.java (源码,给人看的)
HelloWorld.class (字节码文件,给JVM执行)
本地方法区:操作系统维护的内存区域
寄存器:给CPU使用的
一个数组的内存图解
两个数组的内存图解
每一个数组在堆内存中都有自己独立的空间,互不影响。
两个引用指向同一个数组
当两个引用指向同一个堆内存的地址,一个引用修改了堆内存中的数据,第二个引用去访问时数据已经被修改过了。
数组的常见问题
1.ArrayIndexOutOfBoundsException: 数组索引越界
数组的最小索引是0,最大的索引是长度-1
2.NullPointerException: 空指针异常
数组的变量,没有指向任何地址
数组练习题
遍历数组的元素
public class ArrayTest1 {
public static void main(String[] args) {
int a=10;
int[] arrayA={10,20,30,40,50,90,4,5,3,5,6,8,8}; //地址
//遍历数组快捷键:数组名.fori
//数组的长度:array.length
for (int i = 0; i <arrayA.length; i++) {
System.out.println(arrayA[i]);
}
}
}
求数组中元素的和
求和问题的思路
1.定义求和变量sum
2.遍历所有需要求和的数据
3.把数据和sum累加
public class ArrayTest2 {
public static void main(String[] args) {
int[] array={10,20,30,40,50};
//求和变量
int sum=0;
//遍历数组快捷键:数组名.fori
//数组的长度:array.length
for (int i = 0; i <array.length; i++) {
//让数组的元素和sum累加
sum+=array[i];
}
System.out.println("所有元素的和为:"+sum);
}
}
数组求最值
求最值的思路:
1.假设数组中的0索引元素为最大值max(擂主)
2.让其他的元素和max比较,把较大的值赋值给max(打赢的站在擂台上)
3.最终max就是最大值(最后站在擂台上的就是最大值)
public class ArrayTest3 {
public static void main(String[] args) {
int[] array={1,3,46,8,2,5,9,7};
//1.假设数组中的0索引元素为最大值(擂主)
int max=array[0];
//2.让其他的元素和max比较,把较大的值赋值给max(打赢的站在擂台上)
for (int i = 1; i < array.length; i++) {
if(array[i]>max){
max=array[i]; //打赢的站在擂台上
}
}
//3.最终max就是最大值(最后站在擂台上的就是最大值)
System.out.println("最大值为:"+max);
}
}
数组元素查找
查找数组中元素第一次出现的索引
数组元素查找的思路
1.确定需要查找的元素
2.遍历数组的元素和要查找的元素进行比较
如果相等,获取索引,break跳出循环
3.在循环外边定义一个index索引,如果找到了元素index记录索引;否则index等于-1
public class ArrayTest4 {
public static void main(String[] args) {
int[] array={10,20,30,40,15,60,15,80};
//1.确定需要查找的元素
int key=15;
int index=-1; //记录查找的索引,规定-1表示没有找到元素
//2.遍历数组中的元素和key进行比较
for (int i = 0; i < array.length; i++) {
if(array[i]==key){
index=i;
break;
}
}
//判断index的值,是否等于-1
if(index==-1){
System.out.println("对不起,没有这个元素");
}else{
System.out.println(key+"元素在数组中的索引为:"+index);
}
}
}
评委打分问题
在跳水运动中,假设6个评委给选手打分,要求去掉最高分,去掉最低分,求平均分
解题思路:
1)循环的采用键盘录入的方式,代表评委打分
使用Scanner录入6次
2)使用数组容器,把键盘录入的数据存起来
3)求数组元素的最大值
4)求数组元素的最小值
5)求数组元素的和
6)最终得分=(和-最大值-最小值)/(长度-2)
public class ArrayTest6 {
public static void main(String[] args) {
//定义数组,用于存储评委的分数
int[] array=new int[6];
//1)循环的采用键盘录入的方式,代表评委打分
for (int i = 0; i < array.length; i++) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第"+(i+1)+"评委的分数:");
int num = sc.nextInt();
//2)把分数存入数组中
array[i]=num;
}
//3)求数组元素的最大值
//把数组中的0索引元素假设为最大值
int max=array[0];
for (int i = 1; i < array.length; i++) {
//把数组中元素较大的值赋值给max
if(array[i]>max){
max=array[i];
}
}
System.out.println("最大值为:"+max);
//4)求数组元素的最小值
int min=array[0];
for (int i = 1; i < array.length; i++) {
//把数组中元素较小的值赋值给min
if(array[i]<min){
min=array[i];
}
}
System.out.println("最小值为:"+min);
//5)求数组元素的和
int sum=0;
for (int i = 0; i < array.length; i++) {
sum+=array[i];
}
System.out.println("所有元素的和为:"+sum);
//6)求平均值
double avg=(sum-max-min)*1.0/(array.length-2);
System.out.println("最终得分:"+avg);
}
}