首页 > 其他分享 >IDEA中通义灵码的使用技巧

IDEA中通义灵码的使用技巧

时间:2024-11-04 10:22:04浏览次数:1  
标签:通义 int IDEA length visited maze 灵码

大家好,我是 V 哥。在日常写代码的过程中,通过 AI 工具辅助开发已是当下程序员惯用的方式,V 哥在使用了众多的 AI 工具后,多数情况下,选择通义灵码来辅助开发,尤其是解释代码和生成单元测试功能甚是好用,听 V 哥来详细聊聊。

通义灵码安装

打开你的 IDEA 开发工具,在菜单栏中选择Settings,打开设置窗口,在左侧栏中选择 Plugins,在 Marketplace 的搜索栏中输入“通义灵码”,搜索结果的第一个就是通义灵码 AI 插件了,点击 Install 安装插件后,重启 IDE 即可安装成功。

重启IDEA后,在右侧会出现通义灵码选项,此时,就可以使用通义灵码来辅助编程啦。

使用前,请先使用阿里账号进行登录,V 哥的账号是威哥爱编程。

通过通义灵码 AI 工具解释代码

V 哥写了一个 DFS 算法,代码如下:

/**
 * description:
 * author: V哥
 * wx:finally-weige
 */
public class DFSMazeSolver {
    private static final int[] DX = {-1, 1, 0, 0}; // 行移动方向:上,下
    private static final int[] DY = {0, 0, -1, 1}; // 列移动方向:左,右

    public boolean dfs(int[][] maze, int x, int y, boolean[][] visited) {
        int rows = maze.length;
        int cols = maze[0].length;

        // 边界条件与目标判断
        if (x < 0 || y < 0 || x >= rows || y >= cols || maze[x][y] == 0 || visited[x][y]) {
            return false;
        }

        // 到达终点
        if (x == rows - 1 && y == cols - 1) {
            return true;
        }

        // 标记当前位置已访问
        visited[x][y] = true;

        // 递归地探索四个方向
        for (int i = 0; i < 4; i++) {
            int newX = x + DX[i];
            int newY = y + DY[i];
            if (dfs(maze, newX, newY, visited)) {
                return true;
            }
        }

        // 回溯
        visited[x][y] = false;
        return false;
    }

    public boolean canSolveMaze(int[][] maze) {
        int rows = maze.length;
        int cols = maze[0].length;
        boolean[][] visited = new boolean[rows][cols];
        return dfs(maze, 0, 0, visited);
    }

    public static void main(String[] args) {
        int[][] maze = {
                {1, 0, 0, 0},
                {1, 1, 0, 1},
                {0, 1, 0, 0},
                {1, 1, 1, 1}
        };

        DFSMazeSolver solver = new DFSMazeSolver();
        if (solver.canSolveMaze(maze)) {
            System.out.println("路径可达");
        } else {
            System.out.println("无可行路径");
        }
    }
}

从代码上看,我已经加了少量代码注释,但对于小白或者初学者来说,想要完全理解代码的含义还是有些困难,下面我们来看看通义灵码的解释代码功能如何。

我们在代码中可以看到有通义灵码的图标标识,下拉打开后,即可以非常方便的使用助手功能了。

我们选择解释代码功能,通义灵码就是会以此方法 dfs 为目标,解释此方法的代码含义,我们来试试。

我们可以看到,在右侧通义灵码的功能区里会把目标方法的代码选中,下方是 dfs 方法的具体解释,从解释来看,基本达到了代码的含义理解,如果你不满意,还可以重新生成,通常 V 哥会使用更详细的解释功能,我们点击更详细来看看。

这样生成的代码解释就很详细了,看一下解释的内容对不对,V 哥仔细查看,不放过每一个字,结果堪称完美,你可以试试。

通过通义灵码 AI 工具生成单元测试

通过通义灵码的生成单元测试功能,也是这款AI 工具的亮点,在代码的 dfs 方法的通义灵码图标,选择生成单元测试功能。

我们就可以在右侧通义灵码的功能区看到生成的测试代码了。

完整生成的测试代码如下:

package com.example.mazesolver;

import java.util.*;
import java.math.*;

import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;

public class DFSMazeSolverTest {

    private DFSMazeSolver solver;

    @Before
    public void setUp() {
        solver = new DFSMazeSolver();
    }

    @Test
    public void testDfs_SimplePath_ReturnsTrue() {
        int[][] maze = {
            {1, 0, 0},
            {1, 1, 0},
            {1, 1, 1}
        };
        boolean[][] visited = new boolean[maze.length][maze[0].length];
        assertTrue(solver.dfs(maze, 0, 0, visited));
    }

    @Test
    public void testDfs_NoPath_ReturnsFalse() {
        int[][] maze = {
            {0, 0, 0},
            {0, 0, 0},
            {0, 0, 0}
        };
        boolean[][] visited = new boolean[maze.length][maze[0].length];
        assertFalse(solver.dfs(maze, 0, 0, visited));
    }

    @Test
    public void testDfs_AlreadyVisitedCell_ReturnsFalse() {
        int[][] maze = {
            {1, 0, 0},
            {1, 1, 0},
            {1, 1, 1}
        };
        boolean[][] visited = new boolean[maze.length][maze[0].length];
        visited[0][0] = true;
        assertFalse(solver.dfs(maze, 0, 0, visited));
    }

    @Test
    public void testDfs_MazeTooSmall_ReturnsFalse() {
        int[][] maze = {
            {0}
        };
        boolean[][] visited = new boolean[maze.length][maze[0].length];
        assertFalse(solver.dfs(maze, 0, 0, visited));
    }

    @Test
    public void testDfs_MazeWithMultiplePaths_ReturnsTrue() {
        int[][] maze = {
            {1, 1, 0},
            {0, 1, 1},
            {0, 0, 1}
        };
        boolean[][] visited = new boolean[maze.length][maze[0].length];
        assertTrue(solver.dfs(maze, 0, 0, visited));
    }

    @Test
    public void testDfs_MazeWithDeadEnd_ReturnsFalse() {
        int[][] maze = {
            {1, 0, 0},
            {0, 0, 0},
            {0, 0, 1}
        };
        boolean[][] visited = new boolean[maze.length][maze[0].length];
        assertFalse(solver.dfs(maze, 0, 0, visited));
    }
}

哇塞,看到代码你是不是跟 V 哥一样的惊叹,我们还可以通过下方的解释代码来帮助你理解测试代码的逻辑和含义。

把测试代码拿过来,测试一下看是否可以正常测试代码,结果是没有问题的,在测试中,可以根据自己的需求修改修改就OK 了。

通义灵码生成代码注释功能

通过代码解释功能的使用可以看出,生成代码注释肯定也是 OK 的,功能上貌似有些重复了,这里建议两个功能可以合并一下,比如把类注释的内容也加到解释代码中,把解释好的代码可以在右侧栏中直接一键插入即可。个人建议,当然官方估计看不到我的建议。

完整的代码注注释如下:

/**
 * 使用深度优先搜索(DFS)在迷宫中寻找从起点到终点的路径
 * 
 * @param maze    表示迷宫的二维数组,其中0代表墙壁,1代表可以通行的路径
 * @param x       当前位置的x坐标
 * @param y       当前位置的y坐标
 * @param visited 一个二维布尔数组,用于标记迷宫中哪些位置已经被访问过
 * @return 如果找到了从当前位置到迷宫终点的路径,则返回true;否则返回false
 */
public boolean dfs(int[][] maze, int x, int y, boolean[][] visited) {
    // 获取迷宫的行数和列数
    int rows = maze.length;
    int cols = maze[0].length;

    // 边界条件与目标判断
    // 如果当前位置超出迷宫边界、是墙壁或是已经访问过的位置,则返回false
    if (x < 0 || y < 0 || x >= rows || y >= cols || maze[x][y] == 0 || visited[x][y]) {
        return false;
    }

    // 到达终点
    // 如果当前位置是迷宫的终点,则返回true
    if (x == rows - 1 && y == cols - 1) {
        return true;
    }

    // 标记当前位置已访问
    visited[x][y] = true;

    // 递归地探索四个方向
    // 尝试向四个可能的方向移动,并递归调用DFS如果找到一条路径,则返回true
    for (int i = 0; i < 4; i++) {
        int newX = x + DX[i];
        int newY = y + DY[i];
        if (dfs(maze, newX, newY, visited)) {
            return true;
        }
    }

    // 回溯
    // 如果四个方向都无法到达终点,回溯标记当前位置为未访问,撤销之前的访问标记
    visited[x][y] = false;
    return false;
}

下面这段与解释代码是一致的:

通义灵码的生成优化建议功能

生成优化建议功能让 V 哥很好奇,通义灵码会给出怎样的建议呢,我们一起来看一下,通义灵码给出了如下建议,并提供了优化后的代码:

建议修改后的代码如下:

public class MazeSolver {
    // 定义方向数组
    private static final int[] DX = {1, -1, 0, 0};
    private static final int[] DY = {0, 0, 1, -1};

    public boolean dfs(int[][] maze, int x, int y, boolean[][] visited) {
        // 输入验证
        if (maze == null || visited == null || maze.length == 0 || maze[0].length == 0) {
            throw new IllegalArgumentException("Invalid input: maze or visited array is null or empty");
        }
        if (visited.length != maze.length || visited[0].length != maze[0].length) {
            throw new IllegalArgumentException("Invalid input: visited array size does not match maze array size");
        }

        int rows = maze.length;
        int cols = maze[0].length;

        // 边界条件与目标判断
        if (x < 0 || y < 0 || x >= rows || y >= cols || maze[x][y] == 0 || visited[x][y]) {
            return false;
        }

        // 到达终点
        if (x == rows - 1 && y == cols - 1) {
            return true;
        }

        // 标记当前位置已访问
        visited[x][y] = true;

        // 递归地探索四个方向
        for (int i = 0; i < 4; i++) {
            int newX = x + DX[i];
            int newY = y + DY[i];
            if (dfs(maze, newX, newY, visited)) {
                return true;
            }
        }

        // 回溯
        visited[x][y] = false;
        return false;
    }
}

给出的解释是:

输入验证:在方法开始时添加了对 maze 和 visited 的验证,确保它们不为空且大小一致。

常量定义:将方向数组 DX 和 DY 定义为类的静态常量,提高代码的可读性和可维护性。

注释:增加了注释,使代码更易读。

这些修改不仅提高了代码的安全性和健壮性,还增强了代码的可读性和可维护性。

在通义灵码给出的代码中修改了三处地方,输入验证、常量定义和注释,输入验证和常量定义让 V 哥的代码更加严谨了,在算法实现上没有给出建议,V哥大胆猜测,要不就是V 哥的算法实现已经比较完美了,或者灵码也没有更好的算法优化建议了,哈哈。

通义灵码自动联想代码功能

在编码区写代码时,通义灵码还提供了语义级的自动代码联想功能,这个功能有点奇怪,比如我们在 main 方法中就会建议输出 Hello world:


也许通义灵码想做到想我所想,帮我写代码,由于通义灵码基于通义大模型实现,此功能应该会在学习你的编码习惯和代码意图,如果完全学会了,难道要变成你的克隆吗,还会根据项目中的代码结构来联想,这个功能一旦成熟,那可不得了,期待吧,暂时,V 哥觉得用的还很少。

最后小结一下

总的来说,V 哥在使用通义灵码的过程中,最常用的是解释代码和单元测试的生成,这两部分让我在代码逻辑和测试上大大提高了效率。通义灵码,你有在用吗,欢迎一起交流心得体会。关注威哥爱编程,编码路上我们结伴同行。

标签:通义,int,IDEA,length,visited,maze,灵码
From: https://www.cnblogs.com/wgjava/p/18524624

相关文章

  • IDEA中通义灵码的使用技巧
    大家好,我是V哥。在日常写代码的过程中,通过AI工具辅助开发已是当下程序员惯用的方式,V哥在使用了众多的AI工具后,多数情况下,选择通义灵码来辅助开发,尤其是解释代码和生成单元测试功能甚是好用,听V哥来详细聊聊。通义灵码安装打开你的IDEA开发工具,在菜单栏中选择Settings,打开......
  • IDEA 内置的 git 插件太好用了!附使用技巧分享。
    最近发现,clion里的git插件甚至能列出文件夹的修改历史,太方便了!分享一些经验技巧:提交UI具有多个视图模式。提交GUI可以放在底部,也可以显示为侧面板或模态对话框。有时很难切换。LocalChanges选项卡包含修改过未提交的文件列表。默认情况下,新文件折叠在底部的树......
  • 通义灵码实操—飞机大战游戏
    通义灵码实操—飞机大战游戏有没有想象过自己独立编写一个有趣的小游戏。在本实践课程中,你不仅可以实现这个想法,而且还将得到通义灵码智能编程助手的支持与指导。我们将携手步入编程的神奇世界,以一种简洁、高效且具有创造性的方式,一步步构建起一个完全属于你自己的个性化小......
  • IDEA神器
    IDEA神器:让代码自己写自己......
  • IntelliJ IDEA 中上传项目到 Gitee 的完整指南
    博主主页:【南鸢1.0】本文专栏:git目录简介1.插入intellij-gitee2.导入下载插件3.选择导航栏中的VCS->ShareProjectonGitee4.登录gitee6.验证gitee仓库是否创建成功7.上传分享项目8.验证仓库代码是否上传成功总结简介Gitee是一个代码托管平台,类似于GitHub......
  • Idea上Git仓库不见了是什么原因
    在使用IntelliJIDEA进行项目开发时,Git仓库突然消失是开发者常遇到的问题。该问题可能由多个因素引起,包括:1.环境配置问题;2.软件或插件更新;3.目录结构变更;4.用户权限问题;5.其他软件干扰。理解这些因素并采取相应的解决措施,不仅能快速恢复Git仓库,还能避免类似问题的再次出现。1.......
  • 2024最新IntelliJ IDEA常用的小技巧汇总,JAVA 新手上路必备
    目录一、IntelliJIDEA概述二、下载与安装2.1下载2.2安装三、快速创建并运行Java工程3.1创建Java工程3.2创建package和class四、详细设置4.1字体大小设置4.2字符编码设置4.3大小写不敏感设置4.4自动导包4.5启动退出设置4.6自动更新五、快速开发5.1代码模板......
  • idea2024.1下载和激活
    通过百度网盘分享的文件:IDEA2024.1激活.zip链接:https://pan.baidu.com/s/1RlZk-R4alx50IXgMg7KO2w提取码:ewq7安装包和激活工具都在链接里面1、安装好idea后2、打开IDEA2024.1激活\scripts\install-current-user.vbs 会提示安装补丁需要等待数秒。点击【确定】按钮后,过程大......
  • 通义灵码知识库问答增强:知识库构建与管理指南
    作者:垚佳、汐遥通义灵码能够结合企业知识库的私域数据,生成贴合企业特点的回答。充分发挥检索增强技术的优势,构建高质量的企业知识数据以及合理的知识库权限管理是必不可少的。本文将为您详细介绍如何构造与管理一个高质量的企业知识库。前提条件适用版本:通义灵码企业标准版、......
  • IDEA 利用groovy脚本生成注释
     介绍 本文主要介绍利用IDEA编辑器的活动模板,结合groovy脚本,生成注释模板。目前生成的注释主要适用于java和js文件推荐此方式,可以根据需要定义groovy脚本,生成不同格式的注释操作点击File>>Setting 找到Edtor>>LiveTemolates,建议创建一个模板组java_of......