各位看官老爷好,如果还没有安装 MarsCode 请查阅前一篇

一、IDE集成AI助手豆包MarsCode保姆级教学(安装篇)

二、JetBrains IDEA 中使用教学

2.1 代码生成

单击右边的MarsCode AI图标 —> 在对话框输入自然语言 —> 单击发送按钮或按下回车键,豆包 MarsCode 编程助手可以根据你的自然语言描述生成对应的代码片段。

生成代码

完整的代码如下:

public class BubbleSort {
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 交换 arr[j+1] 和 arr[j]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(arr);
        System.out.println("排序后的数组:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

执行结果:

排序后的数组:
11 12 22 25 34 64 90

2.2 代码解释

选中代码片段 —> 右键 —> MarsCode AI —> 解释代码,代码解释可以帮助程序员快速理解业务逻辑,提高代码阅读效率。

解释代码
代码解释说明

2.3 代码编辑

选中代码片段 —> 右键 —> MarsCode AI —> chat —> 在对话框输入编辑需求,MarsCode 可以编辑指定代码,包括重构、优化、修改部分逻辑等。你可以通过自然语言描述代码编辑需求。

代码编辑
输入编辑需求

完整的代码如下:

public class UnionSetTest {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        List<Integer> list2 = Arrays.asList(6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

        // 创建一个 HashSet 来存储并集
        Set<Integer> unionSet = new HashSet<>(list);
        // 将 list2 中的元素添加到并集中
        unionSet.addAll(list2);

        // 将并集转换为列表
        List<Integer> unionList = new ArrayList<>(unionSet);

        // 打印并集
        System.out.println("两个列表的并集是: " + unionList);
    }
}

简单粗暴,直接使用set集合排除重复元素,运行结果如下:

两个列表的并集是: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

2.4 代码补全

MarsCode 编程助手可以帮助你自动补全后续代码。

场景一:在对应代码处,敲击回车键换行。MarsCode 编程助手会阅读并理解当前代码,然后自动补全后续代码。

代码补全提示

场景二:在对应位置添加注释,然后敲击回车键换行。豆包 MarsCode 编程助手会阅读并理解代码注释,然后直接生成代码。

求交集
将鼠标悬浮至自动补全的代码区域,然后按需进行以下后续操作:

  • 按下 Tab 键,添加自动补全的所有代码。
  • 按下 Shift + Tab,添加自动补全的一行代码,逐行添加可以使用此方法。

最终的代码如下:

public class UnionSetTest {
    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> list2 = Arrays.asList(1, 2,6, 7, 8, 9);
        List<Integer> intersection = new ArrayList<>(list1);
        intersection.retainAll(list2);
        System.out.println("交集:" + intersection);

    }
}

2.5 代码注释生成

选中代码片段 —> 右键 —> MarsCode AI —> 注释代码,把生成注释后的代码替换掉原代码即可,不爱写注释的程序员有福音了。

在这里插入图片描述

添加注释后的代码如下:

        /**
         * 定义要读取的 Excel 文件的路径
         */
        String fileName = "F:\\demo.xlsx";
        /**
         * 初始化 ExcelReader 对象,用于读取 Excel 文件
         */
        ExcelReader excelReader = null;
        try {
            // 通过 EasyExcel 库读取指定文件并构建 ExcelReader 对象
            excelReader = EasyExcel.read(fileName).build();
            
            // 创建第一个工作表的读取配置
            // 指定读取第一个工作表(索引为 0)
            // 设置表头对应的实体类为 DemoData.class
            // 注册数据读取监听器 DemoDataListener 用于处理读取的数据
            // 构建 ReadSheet 对象
            ReadSheet readSheet1 =
                    EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
            // 创建第二个工作表的读取配置
            // 指定读取第二个工作表(索引为 1)
            // 设置表头对应的实体类为 DemoData.class
            // 注册数据读取监听器 DemoDataListener 用于处理读取的数据
            // 构建 ReadSheet 对象
            ReadSheet readSheet2 =
                    EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
            // 调用 ExcelReader 的 read 方法,读取指定的两个工作表的数据
            excelReader.read(readSheet1, readSheet2);
        } finally {
            // 确保无论是否发生异常,ExcelReader 对象都会被关闭
            // 避免创建的临时文件占用磁盘空间
            if (excelReader != null) {
                excelReader.close();
            }
        }

        // 返回操作成功的结果
        return success();

2.6 单元测试生成

选中代码片段 —> 右键 —> MarsCode AI —> 生成单测

生成单测
单测说明

女性身份号码中的17位为7是奇数,应为偶数(2、4、6、8),就这里需要调整下。

最终的代码:

    public void testGetGender() {
        UserServiceImpl userService = new UserServiceImpl();

        // 正常情况,男性身份证号码
        String genderMale = userService.getGender("123456789012345678");
        assertEquals("男", genderMale);

        // 正常情况,女性身份证号码
        String genderFemale = userService.getGender("123456789012345689");
        assertEquals("女", genderFemale);

        // 无效的身份证号码,长度不为 18
        assertThrows(IllegalArgumentException.class, () -> userService.getGender("1234567890123456"));

        // 无效的身份证号码,格式不正确
        assertThrows(IllegalArgumentException.class, () -> userService.getGender("12345678901234567a"));
    }

单测运行结果:

单测运行结果

2.7 智能修复

当代码中存在错误时,窗口中的代码文件名称会高亮,名称右侧会提示错误数量。

选中有问题代码片段 —> 右键 —> MarsCode AI —> chat —> 在对话框输入 /fix 或修复选中的代码片段,MarsCode 编程助手将为选中的代码片段进行智能修复。
选中需要修复的代码
输入/fix

修复后的代码:

    /**
     * 给定一个身份证号,计算出该用户的性别
     *
     * @param identityCard 身份证号
     * @return 性别,"男" 或 "女"
     * @throws IllegalArgumentException 如果身份证号码为空、长度不为 18 或格式不正确
     */
    @Override
    public String getGender(String identityCard) {
        // 检查身份证号是否为空
        if (identityCard == null || identityCard.trim().isEmpty()) {
            throw new IllegalArgumentException("身份证号码不能为空");
        }
        // 去除前后空格
        identityCard = identityCard.trim();
        // 检查身份证号长度是否为 18 位
        if (identityCard.length() != 18) {
            throw new IllegalArgumentException("身份证号码长度必须为 18 位");
        }
        // 校验身份证号码格式
        if (!identityCard.matches("\\d{17}[0-9Xx]")) {
            throw new IllegalArgumentException("无效的身份证号码格式");
        }
        // 获取第 17 位字符
        char genderChar = identityCard.charAt(16);
        // 检查第 17 位是否为数字
        if (!Character.isDigit(genderChar)) {
            throw new IllegalArgumentException("身份证号码第 17 位必须是数字");
        }
        // 判断性别
        return (genderChar - '0') % 2 == 1 ? "男" : "女";
    }
}

修复说明

  1. 去除注释代码:移除了选中代码中被注释掉的部分,使代码更加简洁。
  2. 逻辑优化:将检查身份证号是否为空、长度是否为 18 位、格式是否正确以及第 17 位是否为数字的逻辑依次进行处理,提高代码的可读性和可维护性。
  3. 异常处理:对于不符合要求的身份证号输入,抛出 IllegalArgumentException 异常,增强代码的健壮性。

2.8 智能问答

唤起对话框后,你可以在输入框中输入你的问题,然后点击 发送 按钮或敲击回车键,MarsCode 编程助手将回答你的问题。你可以进行多轮问答,不断补充细节,从而使插件的回答更加准确。

演示下,给下面的代码增加一段身份证号码格式验证并对代码进行优化,最后生成单元测试。
源代码(无身份证号码格式验证):

	public String getGender(String identityCard) {
		if (identityCard == null || identityCard.length() != 18) {
			throw new IllegalArgumentException("无效的身份证号码");
		}
		
		return Integer.parseInt(identityCard.substring(16, 17)) % 2 == 1 ? "男" : "女";
	}

选中代码片段 —> 右键 —> MarsCode AI —> chat —> 在对话框输入:“给getGender方法增加段身份证号码格式验证并对代码进行优化,最后生成单元测试” —> 回车,这里有3个需求,1 增加身份证号码格式,2 优化代码,3 生成单测,这3个需求都是现在了,现在的AI编程插件都挺强大的。

输入需求:

输入需求

增加身份证号码格式及进行优化代码如下:

/**
     * 给定一个身份证号,计算出该用户的性别
     *
     * @param identityCard 身份证号
     * @return 性别,"男" 或 "女"
     * @throws IllegalArgumentException 如果身份证号码为空、长度不为 18 或格式不正确
     */
    @Override
    public String getGender(String identityCard) {
        // 检查身份证号码是否为空
        if (identityCard == null || identityCard.trim().isEmpty()) {
            throw new IllegalArgumentException("身份证号码不能为空");
        }
        // 去除前后空格
        identityCard = identityCard.trim();

        // 检查身份证号码长度是否为 18 位
        if (identityCard.length() != 18) {
            throw new IllegalArgumentException("身份证号码长度必须为 18 位");
        }

        // 校验身份证号码格式
        if (!identityCard.matches("\\d{17}[0-9Xx]")) {
            throw new IllegalArgumentException("无效的身份证号码格式");
        }

        // 获取第 17 位字符
        char genderChar = identityCard.charAt(16);

        // 检查第 17 位是否为数字
        if (!Character.isDigit(genderChar)) {
            throw new IllegalArgumentException("身份证号码第 17 位必须是数字");
        }

        // 判断性别
        return (genderChar - '0') % 2 == 1 ? "男" : "女";
    }

重新生成的单测如下:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class UserServiceImplTest {

    private UserServiceImpl userService = new UserServiceImpl();

    @Test
    public void testGetGender_Male() {
        String identityCard = "123456199001011234";
        String gender = userService.getGender(identityCard);
        assertEquals("男", gender);
    }

    @Test
    public void testGetGender_Female() {
        String identityCard = "12345619900101124X";
        String gender = userService.getGender(identityCard);
        assertEquals("女", gender);
    }

    @Test
    public void testGetGender_NullIdentityCard() {
        assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender(null);
        });
    }

    @Test
    public void testGetGender_EmptyIdentityCard() {
        assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("");
        });
    }

    @Test
    public void testGetGender_InvalidLength() {
        assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("123456");
        });
    }

    @Test
    public void testGetGender_InvalidFormat() {
        assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("12345619900101123A");
        });
    }

    @Test
    public void testGetGender_InvalidSeventeenthDigit() {
        assertThrows(IllegalArgumentException.class, () -> {
            userService.getGender("1234561990010112X4");
        });
    }
}

这里女性的身份证号码验证单测的17位为4,居然对了,牛逼。

测试用例说明:

  • testGetGender_Male:测试男性身份证号码,验证返回结果是否为 “男”。
  • testGetGender_Female:测试女性身份证号码,验证返回结果是否为 “女”。
  • testGetGender_NullIdentityCard:测试传入 null 时是否抛出 IllegalArgumentException 异常。
  • testGetGender_EmptyIdentityCard:测试传入空字符串时是否抛出 IllegalArgumentException 异常。
  • testGetGender_InvalidLength:测试传入长度不为 18 的身份证号码时是否抛出 - IllegalArgumentException 异常。
  • testGetGender_InvalidFormat:测试传入格式不正确的身份证号码时是否抛出 IllegalArgumentException 异常。
  • testGetGender_InvalidSeventeenthDigit:测试传入第 17 位不是数字的身份证号码时是否抛出 IllegalArgumentException 异常。

通过这些单元测试用例,我们可以确保 getGender 方法在各种情况下都能正常工作。

三、快捷健

功能Windows快捷键macOS快捷键
采用行内自动补全的代码TabTab
逐字采用行内自动补全的代码Ctrl + →Command + →
舍弃代码建议EscEsc
打开侧边 AI 对话框Ctrl + UCtrl + U
展示下一行自动补全的代码alt + ]opt + ]
展示前一行自动补全的代码alt + [opt + [

四、总结

    豆包MarsCode是由字节跳动推出的AI编程助手,集成于主流IDE(如VS Code、JetBrains),提供代码补全、错误修复、注释生成等功能,显著提升开发效率。其核心优势包括:

  • 智能补全技术:支持代码补全Pro,可预测用户后续编辑行为(如参数修改),并基于Git提交记录和上下文检索优化推荐准确性。
  • 多语言支持:覆盖几十种编程语言,适配传统开发者及跨语言AI编程用户需求。
  • 深度集成模型:接入高性能推理模型DeepSeek R1,优化复杂任务处理能力,同时提供代码解释与学习辅助,降低非技术用户门槛。
  • 评测体系创新:引入CPO指标(每触发补全的平均字符贡献),平衡推荐质量与用户体感。
    用户反馈显示,其刷题辅助功能能深化算法理解,并通过个性化推荐提升学习效率。MarsCode兼顾开发者效率提升与编程教育,成为AI时代“人机协作”的典型工具。

参数资料:



上一篇: 一、IDE集成AI助手豆包MarsCode保姆级教学(安装篇)


往期AI编程助手:

– 欢迎点赞、关注、转发、收藏【技术咖啡馆C】,各大平台同名。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐