一、抛出异常解决
需求:编程实现迷你计算器功能,支持“+”“-”“*”“/”,从控制台输入两个操作数,输出运算结果。
如下所示:
请输入第一个操作数:
5
请输入第二个操作数:
6
请输入运算符(+ - * /):
*
计算结果:5*6=30
请输入第一个操作数:
5
请输入第二个操作数:
a
请输入正确的数字!
编辑代码如下:
将会出现如下错误:
更改代码:使用try…catch语句
输出结果:
二、数组
2.1数组概述
数组的概念:用来保存一组具有相同数据类型的数据的一种存储结构。
注意:数组也是一种数据类型,数组类型,属于引用数据类型
数组的定义语法:
1、 数据类型[ ] 数组名=new 数据类型[数组中存储数据个数];-----推荐使用该语法
2、 数据类型 数组名[ ]=new 数据类型[数组中存储数据个数];
获取数组的长度:数组名.length
获取数组元素:数组名[下标 ]
3、 数据类型[] 数组名={值1,值2,…值n};
4、 数据类型[] 数组名=new 数据类型[]{值1,值2,…值n};
2.2数组原理内存图
内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程
序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理.
Java 虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式
- JVM 的内存划分
区域名称 | 作用 |
---|---|
寄存器 | 给CPU使用,和我们开发无关 |
本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
方法区 | 存储可以运行的class文件 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行 |
数组在内存中的存储
- 一个数组内存图
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);//[I@5f150435
}
以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在内存中的地址。new出来的内容,都是在堆
内存中存储的,而方法中的变量arr保存的是数组的地址
- 两个数组内存图
public static void main(String[] args) {
int[] arr = new int[3];
int[] arr2 = new int[2];
System.out.println(arr);
System.out.println(arr2);
}
- 两个变量指向一个数组
public static void main(String[] args) {
// 定义数组,存储3个元素
int[] arr = new int[3];
//数组索引进行赋值
arr[0] = 5;
arr[1] = 6;
arr[2] = 7;
//输出3个索引上的元素值
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//定义数组变量arr2,将arr的地址赋值给arr2
int[] arr2 = arr;
arr2[1] = 9;
System.out.println(arr[1]);
}
例题:冒泡排序
需求说明:冒泡排序时注意以下关键点:
(1)5个数字如何存放:(数组,数组.length = 5)
(2)控制比较多少轮:(外层循环,循环变量 i)
(3)控制每轮比较多少次:(内层循环,循环变量 j)
(4)交换数据;
使用二重循环实现如图所示的冒泡排序。
Public class Demo1{
Public static void main(String[] args){
int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println("请输入五个学员的成绩:");
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
System.out.println("排序前的成绩:");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i]+"\t");
}
//排序(冒泡排序)
//原理:
for (int i = 0; i < scores.length-1; i++) {
for (int j = 0; j < scores.length-1-i; j++) {
if(scores[j] > scores[j+1]){
int temp =scores[j];
scores[j]=scores[j+1];
scores[j+1]=temp;
}
}
}
System.out.println();
System.out.println("排序后");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i]+"\t");
}
}
}
请输入五个学员的成绩:
67
78
89
67
56
排序前的成绩:
67 78 89 67 56
排序后
56 67 67 78 89
口诀:N个数据来排序,外层循环N-1,内层循环N-1-I N:数组长度