Java第四天(抛出异常解决、数组、冒泡排序)

一、抛出异常解决

需求:编程实现迷你计算器功能,支持“+”“-”“*”“/”,从控制台输入两个操作数,输出运算结果。
如下所示:

请输入第一个操作数:
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:数组长度

猜你喜欢

转载自blog.csdn.net/weixin_43951534/article/details/88559029