二维数组的练习题、初识面向对象--学习JavaEE的day11

发布于:2024-03-04 ⋅ 阅读:(75) ⋅ 点赞:(0)

day11

一、二维数组练习

练习1

班上有3个学生,每个学生都参加了三门功课的考试,

其中第二个学生是特长生,上级要求给他每门功课都+5

[要求:使用二维数组做,并且分别使用for循环和增强for循环遍历二维数组]

	Scanner scan = new Scanner(System.in);
	
	double[][] scores = new double[3][3];
	
	for (int i = 0; i < scores.length; i++) {
		for (int j = 0; j < scores[i].length; j++) {
			System.out.println("请输入第" + (i+1) + "个学生的第" + (j+1) + "门成绩:");
			double score = scan.nextDouble();
			if(i == 1){//第二名学生
				score += 5;
			}
			
			scores[i][j] = score;
		}
	}
	
	for (double[] ds : scores) {
		for (double d : ds) {
			System.out.println(d);
		}
	}

scan.close();

练习2

声明一个二维数组,其中有3个一维数组,每个一维数组有5个元素。

一个一维数组表示一个学生,其中分别存储姓名、性别、年龄、班级号、学号这5个信息。

再编写一个学生管理系统,可以通过输入实现添加学生、打印学生信息的功能

public static void main(String[] args) {

	Scanner scan = new Scanner(System.in);

	//学生容器
	String[][] stus = new String[3][5];
	//设置指针
	int index = 0;//指针的位置表示二维数组中第几个有一维数组(学生)

	System.out.println("欢迎进入**学生管理系统");
	boolean flag = true;
	while(flag){
		System.out.println("请选择以下功能:");
		System.out.println("1 - 添加学生");
		System.out.println("2 - 打印所有学生信息");
		System.out.println("886 - 退出系统");
		int num = scan.nextInt();

		switch (num) {
		case 1:
			
			//思考题:如果满载了,可以采取二维数组扩容的方式,继续添加
			if(index == stus.length){
				System.out.println("学生管理系统中学生已满载,不能添加了");
				continue;
			}
			
			System.out.println("请输入姓名:");
			String name = scan.next();
			System.out.println("请输入性别:");
			String sex = scan.next();
			System.out.println("请输入年龄:");
			String age = scan.next();
			System.out.println("请输入班级号:");
			String classId = scan.next();
			System.out.println("请输入学号:");
			String id = scan.next();
			
			stus[index][0] = name;
			stus[index][1] = sex;
			stus[index][2] = age;
			stus[index][3] = classId;
			stus[index][4] = id;
			index++;
			break;

		case 2:
			
			for (int i = 0; i < index; i++) {
				for (int j = 0; j < stus[i].length; j++) {
					System.out.print(stus[i][j] + "\t");
				}
				System.out.println();
			}
			
			break;
		case 886:
			System.out.println("正在退出**学生管理系统,欢迎下次再来...");
			flag = false;
			break;
		default:
			System.out.println("输入错误,请重新输入...");
			break;
		}
		System.out.println("--------------------");
	}
	
	scan.close();
}
思考题:二维数组扩容
			//思考题:如果满载了,可以采取二维数组扩容的方式,继续添加
			if(index >= stus.length){ // 判断当前指针位置是否已经超出了数组容量
				// 扩容
				//获取数组长度
				int oldCapacity = stus.length;
				//计算二维数组中一维数组的新的长度
				int newCapacity = oldCapacity<<1;
				//新数组
				String[][] newStus = new String[newCapacity][5];
				//遍历源数组,将数据赋值给新数组
				for(int i = 0; i < stus.length; i++){
					for(int j = 0; j < stus[i].length; j++){
						newStus[i][j] = stus[i][j];
					}
				}
				// 将新数组的地址赋值给源数组
				stus = newStus;
			}

二、回顾

见文件资料的回顾.md

回顾前一段时间学习内容

三、初识面向对象

见文件资料的面向对象.md

全内容梳理

类与实体概念

现实生活:

​ 类:抽象的概念,把具有相同特征和操作的事物归为一类

​ 先有实体,再有类的概念

代码世界:

​ 类:抽象的概念,把具有相同属性和方法的对象归为一类

​ 编写顺序:先有类,再创建对象

​ 类的作用:类相当于一个模板,刻画出具有相同属性和方法的对象

  1. 类中只有属性和方法
  2. 属性也叫做全局变量,属性分为成员变量和静态变量
  3. 方法分为成员方法和静态方法
public class 类名{
    //属性也叫做全局变量,分为成员变量和静态变量
    
    //成员变量
    数据类型 变量名;
    
    //静态变量
    static 数据类型 变量名;
    
    //方法分为成员方法和静态方法
    
    //成员方法
    访问修饰符 返回值类型 方法名([参数]){}
    
    //静态方法
    访问修饰符 static 返回值类型 方法名([参数]){}
}

对象

创建对象的语法:类名 对象名 = new 类名();

​ new 构造方法; 属于对象,就在堆内存中开辟空间

​ 类名 对象名 :对象名属于引用,存的是对象在堆内存中的地址

操作对象:

  1. 设置成员属性

  2. 获取成员属性

  3. 调用成员方法

成员属性/成员变量

语法结构:数据类型 变量名;

编写的位置:类里,方法的外面

成员变量 vs 局部变量

成员变量:类里,方法的外面的变量,并且系统会赋默认值,作用在整个类中

局部变量:方法内的变量,系统不会赋默认值,作用在方法中

成员方法

语法结构:访问修饰符 返回值类型 方法名([参数]){}

编写的位置:类里

成员方法 vs 静态方法

成员方法:属于对象的方法,必须使用对象调用

静态方法:属于类的方法,使用类名调用

案例理解

1.初识面向对象的需求

需求:创建人类的对象,并操作对象

分析:

​ 人类 - Person

​ 属性:name、sex、age

​ 方法:eat、sleep

步骤:

​ 1.创建Person类,属性、方法

​ 2.创建Person类的对象

public static void main(String[] args) {
	
	//创建对象
	Person p = new Person();
	
	//设置属性
	p.name = "奇男子";
	p.sex = '男';
	p.age = 23;
	
	//获取属性
	System.out.println(p.name);
	System.out.println(p.sex);
	System.out.println(p.age);
	
	//调用成员方法
	//注意:成员方法使用引用/对象调用对象
	p.eat();
	p.sleep();
	
	//调用静态方法
	//注意:静态方法使用类名调用
	Person.method();
}
2.关于成员属性/成员变量的ps

注意:属于对象的变量,系统会赋默认值,该类所有的成员方法都能使用该变量

成员变量的默认值:

​ 整数类型:0

​ 浮点类型:0.0

​ 字符类型:’ ’

​ 布尔类型:false

​ 引用类型:null

public class Person {

		String name;
		char sex;
		int age;
		
		//成员方法
		public void eat(){
			
			//局部变量:方法里的变量,必须初始化后,才能使用,其作用域在方法内
			int i = 100;
			
			System.out.println("吃饭饭 -- " + i);
		}
		
		public void sleep(){
			System.out.println("睡觉觉");
		}
		
		//静态方法
		//注意:静态方法不能使用成员变量
		public static void method(){
			System.out.println("静态方法");
		}

}

面向对象理解图、面向对象内存图

面向对象理解图
面向对象理解图
面向对象内存图
面向对象内存图

小结

1.使用到类,JVM就会把该类的class文件加载到方法区,扫描该类的字面值常量,将字面值常量加载到常量池中
2.new对家会在堆中开辟空间,用于存储对象里的成员变量,系统会赋默认值

3.引用中存储的是对象在堆中的地址
4.调用方法,就会在栈开辟空间,该空间存放方法的局部变量,方法执行完毕该空间会立刻回收
5.class文件中存放了该类所有的信息(属性、成员方法、静态方法)

总结:

1.二维数组的练习题 – 二维数组扩容

2.根据回顾文档复习 – (1~10day的内容)

3.初识面向对象 – 根据面向对象文档开始一系列面向对象知识的学习

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到