课堂作业
1 按 单步执行 键, 在 GUI 看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等。 最好用不同的颜色标识不同的状态。
2 按 自动运行 键, 在 GUI 看到程序自动运行,并自动显示过程, 每次改变状态的时候要稍作停留 (例如 1 秒钟的时间) 3. 最好有一个 倒带 / 回滚 的键, 让用户可以看清楚关键的几步。
设计思路:
首先就是利用之前写好的一维数组,在数组中记录每个最大子数组的起始位置和终止位置,然后就是统计数组中经历过得最大子数组的个数,然后就是定义一个字符串数组,将所有结果存入到字符串数组中,然后写一个方法判断是否需要进行单步调试,是否需要进行回滚,回滚到相应的位置,其实在此方法中主要就是进行判断然后调用字符串数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | package test; import java.util.Scanner; /* * 求子数组的最大值 */ public class shuzu { static String[] shu = new String[ 100 ]; static Scanner in = new Scanner(System.in); static int n; public static void main(String[] args) { // TODO 自动生成的方法存根 int num[] = new int [ 100 ]; int st,end = 0 ; int a= 0 ; int sum = 0 ; int value = 0 ; System.out.println( "输入数组的个数" ); n = in.nextInt(); System.out.println( "输入数组中的值" ); for ( int i = 0 ;i < n;i++) { num[i] = in.nextInt(); } st = 0 ; sum = num[ 0 ]; for ( int i = 0 ;i < n;i++) { if (value <= 0 ) { value = num[i]; //当用于记录的值小于等于0时就无需对其进行相加了,此时就等于下一个值 st = i; end ++; a++; } else { value += num[i]; //当value的值仍大于0时就继续相加 end ++; } if (sum < value) { //用sum等于子数组的最大值,若value的值大于sum的值,则将value赋值给sum sum = value; shu[i] = "第" + (i+ 1 ) + "步:" + "此时的最大子数组为" + sum + "从" + (st+ 1 ) + "到" + end + "已经计算了" + a + "个子数组" ; } else { shu[i] = "第" + (i+ 1 ) + "步:" + "此时的最大子数组为" + sum + "从" + (st+ 1 ) + "到" + end + "已经计算了" + a + "个子数组" ; } } done(); System.out.println( "最大值为" + sum); } public static void done() { int stop,k; System.out.println( "是否执行但不调试,单步调试请1," ); stop = in.nextInt(); if (stop != 1 ) { for ( int i = 0 ; i < n ; i++) { System.out.println(shu[i]); } } else { for ( int i = 0 ; i < n ; i++) { System.out.println( "继续执行请按1" ); stop = in.nextInt(); if (stop == 1 ) { System.out.println(shu[i]); continue ; } } } int choice = 0 ; while (choice != 1 ) { System.out.println( "是否需要回滚,回滚请按0" ); choice = in.nextInt(); if (choice == 0 ) { System.out.println( "请输入需要回滚到的步数" ); k = in.nextInt(); System.out.println(shu[k- 1 ]); } } } } |
效果截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话