Java复习第三天

一、代码题

1.爬楼梯

(1)题目

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?

  • 示例 1: 输入:n=2 输出:2
  • 解释:有两种方法可以爬到楼顶。 1阶+1阶 2 阶
  • 示例 2: 输入:n=3 输出:3
  • 解释:有三种方法可以爬到楼顶。 1 阶+1阶+1阶 1 阶 +2 阶 2 阶+1阶

(2)思路实现

问题的核心在于找到到达第 n 阶的方法数。每次你可以爬 1 或 2 个台阶,因此到达第 n 阶的方法数等于到达第 n-1 阶的方法数加上到达第 n-2 阶的方法数。这是因为从第 n-1 阶爬 1 个台阶可以到达第 n 阶,从第 n-2 阶爬 2 个台阶也可以到达第 n 阶。

(3)代码实现

package com.thor.test;


public class Demo {
    public static void main(String[] args) {
        //创建Solution对象的实例
        Solution solution = new Solution();
        //示例 1: 输入:n=2 输出:2 解释:有两种方法可以爬到楼顶。1阶+1阶   2阶
        int i = solution.climbStairs(2);
        System.out.println(i);
        //示例 2: 输入:n=3 输出:3 解释:有三种方法可以爬到楼顶。 1阶+1阶+1阶   1阶+2阶   2阶+1阶
        int i1 = solution.climbStairs(3);
        System.out.println(i1);
    }
}
class Solution {/**
 * @description:
 * @author: Allen
 * @date: 2025/1/13 15:18
 * @param: [n] n为n层台阶
 * @return:
 **/
    public int climbStairs(int n){
        //此时n为0或1,直接返回1,因为只有一种方法可以到达
        if(n<=1){
            return 1;
        }
        //创建一个数组dp,用于存储到达每一阶的方法数
        int[] dp= new int[n+1];
        //初始化dp[0] dp[1] 因为到达第0阶和第1阶的方法数都是1
        dp[0]=1;
        dp[1]=1;
        //使用循环计算从第2阶到n阶的方法数
        for(int i=2;i<=n;i++){
            //状态转移方程
            dp[i]=dp[i-1]+dp[i-2];
        }
        //返回到达第n阶的方法数
        return dp[n];
    }
}

2.删除排序链表中的重复元素

(1)题目

给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表

示例 1: 输入:head =[1,1,2] 输出:[1,2]

示例 2: 输入:head =[1,1,2,3,3] 输出:[1,2,3]

(2)思路实现

1. 从链表的头节点开始遍历。

2. 对于每个节点,检查其值是否与下一个节点的值相同。

3. 如果相同,则跳过下一个节点,即将当前节点的 next 指针指向下一个节点的下一个节点。

4. 如果不同,则继续遍历下一个节点。

5. 重复上述步骤直到遍历完整个链表。

6. 返回处理后的链表头节点。

(3)代码实现

package com.thor.test;

public class Demo {
    public static void main(String[] args) {
        // 创建 Solution 对象
        ListNode.Solution solution = new ListNode.Solution();
        // 示例 1: 输入: head = [1,1,2] 输出: [1,2]
        ListNode l1 = new ListNode(1, new ListNode(1, new ListNode(2)));
        ListNode listNode = solution.deleteDuplicates(l1);
        System.out.print("示例1输出:");
        printList(listNode);
        // 示例 2: 输入: head = [1,1,2,3,3] 输出: [1,2,3]
        ListNode l2 = new ListNode(1, new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(3)))));
        ListNode listNode1 = solution.deleteDuplicates(l2);
        System.out.print("示例2输出:");
        printList(listNode1);
    }
    // 打印链表的辅助方法
    public static void printList(ListNode head) {
        ListNode current = head;
        while (current != null) {
            System.out.print(current.val + " ");
            current = current.next;
        }
        System.out.println();
    }
}
class ListNode {
    /**
     * @description:
     * @author: Allen
     * @date: 2025/1/13 17:19
     * @param:
     * @return:
     **/
    int val; // 节点值
    ListNode next; // 下一个节点
    ListNode() {} // 无参构造方法
    ListNode(int val) { this.val = val; } // 有参构造方法
    ListNode(int val, ListNode next) { this.val = val; this.next = next; } // 有参构造方法
    static class Solution {
        /**
         * @description:
         * @author: Allen
         * @date: 2025/1/13 16:50
         * @param: [head] // 链表头节点
         * @return:
         **/
        public ListNode deleteDuplicates(ListNode head) {
            // 初始化当前指针指向链表头节点
            ListNode current = head;
            // 遍历链表,当前节点和下一个节点都不为 null
            while (current != null && current.next != null) {
                // 如果当前节点的值和下一个节点的值相同
                if (current.val == current.next.val) {
                    // 跳过下一个节点,当前节点的 next 指向下一个节点的下一个节点
                    current.next = current.next.next;
                } else {
                    // 如果当前节点的值和下一个节点的值不同,则指针后移一位
                    current = current.next;
                }
            }
            // 返回处理后的链表头节点
            return head;
        }
    }
}
二、数组

1.使用

  • 格式:数据类型 [] 变量名 = new 数据类型 [ 长度 ]————动态初始化
  • 数据类型 [] 变量名={数值 1,数值 2,数值 3......}————静态初始化
  • 赋值:变量名 [序号] = 数值
  • 代码
//数组格式
int [] arr= new int[5];
//赋值
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
//输出
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);

2.length

(1)属性和方法的区别

  • 有小括号叫方法——length()
  • 无小括号叫属性——length

(2)使用

  • 快速使用:arr.for 或者 arr.fori
  • 代码
int[]arr= {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < arr.length; i++) {
	System.out.println(arr[i]);
}

(3)练习题

a.题目:有一个数列:8,4,2,1,23,344,12。

  • 循环输出数列的值
  • 求数列中所有数值的和
  • 猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数

补充知识点:三目运算符 ——这里的 condition 是一个布尔表达式,如果它的值为 true,则整个表达式的结果为 value1;如果为 false,则结果为 value2

代码

Scanner scanner = new Scanner(System.in);
int[]arr= {8,4,2,1,23,344,12};
int sum= 0;
for (int i = 0; i < arr.length; i++) {
	System.out.print(arr[i]+" ");
	sum+=arr[i];
}
System.out.println("\n"+"和:"+sum);
System.out.print("请输入一个数: ");
int number = scanner.nextInt();
boolean flag= false;
for (int i = 0; i < arr.length; i++) {
	if(number==arr[i]){
		flag=true;
		break;
	}
}
System.out.println(flag?"存在":"不存在");

b.题目:从表格的形式输出5笔购物金额及总金额

实现步骤:

  • 创建一个长度为5的double类型数组,存储购物金额
  • 循环输入5笔购物金额,并累加总金额
  • 利用循环输出5笔购物金额最后输出总金额

代码

Scanner scanner = new Scanner(System.in);
double [] arr = new double[5];
System.out.println("消费记录");
for (int i = 0; i < arr.length; i++) {
    System.out.print("请输入第"+(i+1)+"笔购物金额: ");
    arr[i] = scanner.nextDouble();
}
System.out.println("序号\t金额");
double sum = 0;
for (int i = 0; i < arr.length; i++) {
    System.out.println((i+1)+"\t"+arr[i]);
    sum+=arr[i];
}
System.out.println("总金额: "+sum);
三、 Array类
  • 提供了很多操作数组的方法

1.sort——排序(升序)

int[]arr={1,4,7,3,2};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

2.to String——将数组转换成字符串

int[]arr={1,4,7,3,2};
System.out.println(Arrays.toString(arr));

3.equals——boolean equals(array1,array2):比较array1和array2两个数组是否相等

int[]arr1={1,4,7,3,2};
int[]arr2={1,4,7,3,2};
System.out.println(Arrays.equals(arr1,arr2));

4.fill——void fill(array,val):把数组array所有元系都赋值为val

int[]arr1={1,4,7,3,2};
Arrays.fill(arr1,12);
System.out.println(Arrays.toString(arr1));

5.copyOf——copy0f(array,length):将数组array复制成一个长度为length的新数组,返回类型与复制的数组一致

空位置默认为 0

int[]arr1={1,4,7,3,2};
System.out.println( Arrays.toString(Arrays.copyOf(arr1,6)));

练习题

题目:将 一组乱序的字符(a、d、r、t、y、u、h)进行排序进行升序和逆序输出

实现步骤:

  • 创建数组存储原字符序列
  • 利用Arrays类的sort()方法对数组进行排序,并循环输出
  • 从最后一个元素开始,将数组中的元素逆序输出

代码

char [] arr ={'a','d','r','t','y','u','h'};
System.out.print("原字符系列: ");
for (int i = 0; i < arr.length; i++) {
	System.out.print(arr[i]+" ");
}
Arrays.sort(arr);
System.out.println();
System.out.print("升序排序后: ");
for (int i = 0; i < arr.length; i++) {
	System.out.print(arr[i]+" ");
}
System.out.println();
System.out.print("逆序输出后: ");
for (int i = 0; i < arr.length; i++) {
	System.out.print(arr[i]+" ");
}
四、练习题

1.二重循环

题目:若有3个班级各4名学员参赛,如何计算每个班级参赛学员的平均分?

思路:外层循环控制班级数目,内层循环控制每个班级学员数目

代码:

Scanner scanner = new Scanner(System.in);
//外循环班级,内循环学生
for (int i = 1; i <= 3; i++) {
	System.out.println("第输入第" + i + "个班级的成绩");
	int sum = 0;
	for (int j = 1; j <= 4; j++) {
		System.out.print("第" + j + "个学生的成绩: ");
		sum+=scanner.nextInt();
	}
	System.out.println("第" + i + "个班级的平均成绩是: " + sum/4.0);
}

2.正方形

for (int i = 0; i <=5; i++) {
	for (int j = 0; j <= 5; j++) {
		System.out.print("*"+" ");
	}
	System.out.println();
}

3.直角三角形

for (int i = 1; i <= 5; i++) {
	for (int j = 1; j <= i; j++) {
		System.out.print("*");
	}
	System.out.println();
}

4.倒直角三角形

for (int i = 1; i <= 5; i++) {
	for (int j = 0; j < 5 - i; j++) {
		System.out.print("*");
	}
	System.out.println();
}

5.等腰三角形

for (int i = 1; i <= 5; i++) {
	for (int j = 1; j <= 5 - i; j++) {
		System.out.print(" ");
	}
	for (int k = 1; k <= 2 * i - 1; k++) {
		System.out.print("*");
	}
	System.out.println();
}

6.九九乘法表

for (int i = 1; i <= 9; i++) {
	for (int j = 1; j <= i; j++) {
		System.out.print(j + "*" + i + "=" + (i * j) + "\t");
	}
	System.out.println();
}

7.冒泡排序

int[] arr = {1, 3, 5, 7, 9, 2, 4, 6, 8, 0};
for (int i = 0; i < arr.length  - 1; i++) {
	for (int j = 0; j < arr.length  - 1 - i; j++) {
		if (arr[j] > arr[j + 1]) {
			// 交换 arr[j] 和 arr[j + 1]
			int temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}
}
// 打印排序后的数组的每个元素 
for (int i = 0; i < arr.length;  i++) {
	System.out.println(arr[i]);  // 只打印当前元素,而不是整个数组 
}
// 如果你还想打印整个排序后的数组,可以这样做一次: 
System.out.println(Arrays.toString(arr));  // 打印整个排序后的数组一次 
五、二维数组

1.格式

  • int[ ][ ] arr = new int [ ][ ]

2.代码

int[][]arr={
	{1,2,3},
	{4,5,6},
	{7,8,9}
};
//二重循环
//外循环:行数  内循环:行的元素
for (int i = 0; i < arr.length; i++) {
	for(int j = 0; j <arr[i].length ; j++){
		System.out.print(arr[i][j]+"\t");
	}
	System.out.println();
}
六、函数

1.有无返回值、参数

public static void main(String[] args) {
	//无参无返
	f01();
	//无参有返
	f02();
	int i = f02();
	System.out.println("返回的值: "+i);
	//有参无返
	f03("allen", 18);
	//有参有返
	f04("allen", 18);
	System.out.println("返回的值: "+i);
}
/*
     * @description: 公共的访问修饰符public 静态的static 没有返回值的void 方法名(参数列表){ 方法体 }
     * @author: Allen
     * @date: 2025/1/19 20:21
     * @param:
     * @return:
     */
public static void f01(){
	System.out.println("f01\n");
}
/*
     * @description: 公共的访问修饰符public 静态的static 有返回值的int 方法名(参数列表){ 方法体  return 数字 }
     * @author: Allen
     * @date: 2025/1/19 20:23
     * @param:
     * @return:
     */
public static int f02(){
	System.out.println("f02");
	return 0;
}
/*
     * @description: 公共的访问修饰符public 静志的static 没有返回值的void 方法名(参数列表){ 方法体  return 数字;} 有参无返
     * @author: Allen
     * @date: 2025/1/19 20:27
     * @param:
     * @return:
     */
public static void f03(String name,int age){
	System.out.println("\n"+name);
	System.out.println(age+"\n");
}
/*
     * @description: 公共的访问修饰符public 静志的static 有返回值的int 方法名(参数列表){ 方法体  return 数字;} 有参有返
     * @author: Allen
     * @date: 2025/1/19 20:34
     * @param:
     * @return:
     */
public static int f04(String name,int age){
	System.out.println(name);
	System.out.println(age);
	return 1;
}

2.函数重载

  • 什么是:函数支持同名
  • 原则:方法名相同,参数列表不相同,与返回值无关

代码

public static void main(String[] args) {
	f01(1);
	f01(1.0);
}
public static void f01(double money){
System.out.println("1");
}
public static int f01(int age){
System.out.println(age);
return age;
}

3.函数可变个数参数

public static void main(String[] args) {
	f01(new int[]{1,2,3});
	f01();
	f01(1);
	f01(1,2);
	f01(1,2,3);
	f01(1,2,3,4);
}
public static void f01(int... x){
	System.out.println(Arrays.toString(x));
}

4.foreach——增加和简化for循环

  • foreach 输出,没有下标
public static void main(String[] args) {
	f01(new int[]{1,2,3});
	f01();
	f01(1);
	f01(1,2);
	f01(1,2,3);
	f01(1,2,3,4);
}
public static void f01(int... arr){
	for (int i : arr) {
		System.out.print(i);
	}
}

5.传参

  • 基本数据类型
public static void main(String[] args) {
	int x=10;
	f01(x);
}
public static void f01(int y){
System.out.println(y);
y++;
System.out.println(y);
}
  • 引用数据类型
public static void main(String[] args) {
	int [] x={10,20,30};
	f01(x);
	System.out.println(Arrays.toString(x));
}
public static void f01(int[] y){
	System.out.println(Arrays.toString(y));
	y[0]++;
	System.out.println(Arrays.toString(y));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/956357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵

本博文内容导读&#x1f4d5;&#x1f389;&#x1f525; ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上&#xff0c;提供了强大的灵活性&#xff0c;能适应不同的应用需求。 ESP32中断主…

SpringBoot2 + Flowable(UI)

文章目录 引言I 技术栈软件架构基于 Vue.js 和 Element UI 的后台管理系统工程结构II 依赖rest,logic,conf 的依赖工作流flowable jar包flowable-ui所需jar包III 配置jdbc 配置 nullCatalogMeansCurrent = true引言 I 技术栈 软件架构 前端基于vue 、element-ui框架分模块设…

.Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现

前言 最近使用最新版的Serilog记录日志时&#xff0c;发现以前有些关于Serilog的Nuget弃用了&#xff0c;最关键的是有些配置写法也改变&#xff0c;于是就整理了一下最新版的Serilog配置方式(appsetting.json)的使用 说明&#xff1a;我是用的.Net6&#xff0c;最新长期支持…

sprnigboot集成Memcached

安装Memcached 下载地址 32位系统 1.2.5版本&#xff1a;http://static.jyshare.com/download/memcached-1.2.5-win32-bin.zip 32位系统 1.2.6版本&#xff1a;http://static.jyshare.com/download/memcached-1.2.6-win32-bin.zip 32位系统 1.4.4版本&#xff1a;http://stati…

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景&#xff1a;当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景&#xff1a;有一天&#xff0c;你在王国里担任“首席审判官”。你面前站着一位嫌疑人&#xff0c;有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的&#xff0c;还是他是被冤枉的&…

3dmax LOGO的符号、意义和历史,渲染100邀请码1a12

Autodesk 3ds Max 是一款 3D 建模、动画和渲染软件&#xff0c;由 Autodesk, Inc. 于 1996 年开发&#xff0c;其功能是能够创建复杂的数字场景和视觉效果&#xff0c;被专业建筑师、设计师和视频游戏创作者广泛使用&#xff0c;提供了七种语言的 Windows 版本&#xff0c;没有…

线段树优化dp,abc389F - Rated Range

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 F - Rated Range 二、解题报告 1、思路分析 考虑定义 f(i, j) 为 初始分…

青少年CTF练习平台 EasyMD5解题思路

题目 EasyMD5 PHP弱类型/弱等于的判断 翻译 上传之后网页提示&#xff1a;Not a PDF! angry!!! get out from my page 修改文件后缀为pdf 再次上传&#xff0c;答案出来了 s878926199a s155964671a 成功获取flag

Amazon MSK 开启 Public 访问 SASL 配置的方法

1. 开启 MSK Public 1.1 配置 MSK 参数 进入 MSK 控制台页面&#xff0c;点击左侧菜单 Cluster configuration。选择已有配置&#xff0c;或者创建新配置。在配置中添加参数 allow.everyone.if.no.acl.foundfalse修改集群配置&#xff0c;选择到新添加的配置。 1.2 开启 Pu…

SW - 钣金零件保存成DWG时,需要将折弯线去掉

文章目录 SW - 钣金零件保存成DWG时&#xff0c;需要将折弯线去掉概述笔记备注END SW - 钣金零件保存成DWG时&#xff0c;需要将折弯线去掉 概述 如果做需要弯折的切割件&#xff0c;最好做成钣金零件。 最近做了几个小钣金(将钣金展开&#xff0c;建立新草图&#xff0c;在2…

深度学习 Pytorch 基本优化思想与最小二乘法

在正式开始进行神经网络建模之前&#xff0c;我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function&#xff0c;但如果想更深入理解神经网络&#xff0c;对深度学习的…

Ceph与RAID在存储中的协同工作过程

本文将结合架构图&#xff0c;详细讲解Ceph与RAID如何在存储环境中相互配合&#xff0c;共同提供高效且可靠的存储服务。 架构概述 从上图中可以看到&#xff0c;Ceph的架构主要分为四个层次&#xff1a; 客户端和服务接口层&#xff1a;这一层包括客户端访问存储应用的接口…

PyTest自学-认识PyTest

1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么&#xff1f; PyTest是一个自动化测试框架&#xff0c;支持单元测试和功能测试&#xff0c;有丰富的插件&#xff0c;如&#xff0c;pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…

【MathType】mathtype在word中格式问题

【MathType】mathtype在word中格式问题 1. 问题解决方法效果 2.新的问题解决方法效果 1. 问题 mathtype在word中格式显示不全 解决方法 CtrlC&#xff1a;选中全部——>段落——>设置为单倍行距 效果 已经可以全部显示出来&#xff0c;但是还有新问题&#xff01;…

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…

华为AI培训-NLP实验

中文分词、命名实体识别、语义词性标注、语句逻辑推理、文本摘要、机器翻译、文本情感分析、内容创作 1 实验介绍 1.1 实验背景 中文分词、命名实体识别、语义词性标注、语句逻辑推理是自然语言处理领域中的重要任务。中文分词是将连续的汉字序列切分成有意义的词语序列…

一文大白话讲清楚webpack基本使用——4——vue-loader的配置和使用

一文大白话讲清楚webpack基本使用——4——vue-loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇&#xff1a;一文大白话讲清楚啥是个webpack第二篇&#xff1a;一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建第三篇一文大白话讲清楚webpack基本使用…

【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

< OS 有关 > 阿里云:轻量应用服务器 的使用 安装 Tailscale 后DNS 出错, 修复并替换 apt 数据源

VPS 配置 主机&#xff1a;vCPU x2, 512MB, 20GB位置&#xff1a;阿里云&#xff0c;日本.东京OS&#xff1a; ubuntu24.20 原因&#xff1a; 这篇是操作过程的记录文章。 2 个月前&#xff0c; 在阿里云买了台 vps 。当时本想放到韩国&#xff0c;因为它离北京近。 但最便…

第6章 ThreadGroup详细讲解(Java高并发编程详解:多线程与系统设计)

1.ThreadGroup 与 Thread 在Java程序中&#xff0c; 默认情况下&#xff0c; 新的线程都会被加入到main线程所在的group中&#xff0c; main线程的group名字同线程名。如同线程存在父子关系一样&#xff0c; Thread Group同样也存在父子关系。图6-1就很好地说明了父子thread、父…