二IDE集成AI助手豆包MarsCode保姆级教学使用篇
二、IDE集成AI助手豆包MarsCode保姆级教学(使用篇)
各位看官老爷好,如果还没有安装 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 list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List list2 = Arrays.asList(6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
// 创建一个 HashSet 来存储并集
Set unionSet = new HashSet<>(list);
// 将 list2 中的元素添加到并集中
unionSet.addAll(list2);
// 将并集转换为列表
List 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 list1 = Arrays.asList(1, 2, 3, 4, 5); List list2 = Arrays.asList(1, 2,6, 7, 8, 9); List 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
编程助手将为选中的代码片段进行智能修复。
修复后的代码:
/**
- 给定一个身份证号,计算出该用户的性别
- @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 ? “男” : “女”; } } 修复说明
- 去除注释代码:移除了选中代码中被注释掉的部分,使代码更加简洁。
- 逻辑优化:将检查身份证号是否为空、长度是否为 18 位、格式是否正确以及第 17 位是否为数字的逻辑依次进行处理,提高代码的可读性和可维护性。
- 异常处理:对于不符合要求的身份证号输入,抛出 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快捷键 |
---|---|---|
采用行内自动补全的代码 | Tab | Tab |
逐字采用行内自动补全的代码 | Ctrl + → | Command + → |
舍弃代码建议 | Esc | Esc |
打开侧边 AI 对话框 | Ctrl + U | Ctrl + U |
展示下一行自动补全的代码 | alt + ] | opt + ] |
展示前一行自动补全的代码 | alt + [ | opt + [ |
四、总结
豆包MarsCode是由字节跳动推出的AI编程助手,集成于主流IDE(如VS Code、JetBrains),提供代码补全、错误修复、注释生成等功能,显著提升开发效率。其核心优势包括:
- 智能补全技术:支持代码补全Pro,可预测用户后续编辑行为(如参数修改),并基于Git提交记录和上下文检索优化推荐准确性。
- 多语言支持:覆盖几十种编程语言,适配传统开发者及跨语言AI编程用户需求。
- 深度集成模型:接入高性能推理模型DeepSeek R1,优化复杂任务处理能力,同时提供代码解释与学习辅助,降低非技术用户门槛。
- 评测体系创新:引入CPO指标(每触发补全的平均字符贡献),平衡推荐质量与用户体感。 用户反馈显示,其刷题辅助功能能深化算法理解,并通过个性化推荐提升学习效率。MarsCode兼顾开发者效率提升与编程教育,成为AI时代“人机协作”的典型工具。 参数资料:
- 上一篇: 往期AI编程助手:
- – 欢迎点赞、关注、转发、收藏【技术咖啡馆C】,各大平台同名。