有没有大神会做啊!!!救急

FinkaSama 2019-05-22 10:32:30
救急!!这个应该是VB基础类,求大神拯救我!
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
码上秀 2019-08-16
  • 打赏
  • 举报
回复
引用 3 楼 舉杯邀明月 的回复:
[quote=引用 1 楼 脆皮大雪糕 的回复:] 递归快速排序。
你觉得楼主能懂“递归”是什么吗………… 并且他这个只要找最大和最小值,没必要进行排序。 你给他说“排序”他肯定更搞不懂了。 [/quote] 排序完之后,取第一个和最后一个值不就行了
舉杯邀明月 2019-05-22
  • 打赏
  • 举报
回复
引用 1 楼 脆皮大雪糕 的回复:
递归快速排序。

你觉得楼主能懂“递归”是什么吗…………


并且他这个只要找最大和最小值,没必要进行排序。
你给他说“排序”他肯定更搞不懂了。
脆皮大雪糕 2019-05-22
  • 打赏
  • 举报
回复
剩下的自己做,兼职写代码、课外辅导老师啥都不是无偿的。父母已经给你交了学校学费了
脆皮大雪糕 2019-05-22
  • 打赏
  • 举报
回复
递归快速排序。
脆皮大雪糕 2019-05-22
  • 打赏
  • 举报
回复
引用 3 楼 舉杯邀明月 的回复:
[quote=引用 1 楼 脆皮大雪糕 的回复:] 递归快速排序。
你觉得楼主能懂“递归”是什么吗………… 并且他这个只要找最大和最小值,没必要进行排序。 你给他说“排序”他肯定更搞不懂了。 [/quote] 是哦,说不允许多重循环,没说不允许循环。
milaoshu1020 2019-05-22
  • 打赏
  • 举报
回复
vbs代码:

Dim a(99)
randomize
For i = 0 To 99
a(i) = int(rnd * 900 + 100)
Next

max = a(0)
min = a(0)
For i=1 To 99
If max < a(i) Then
max = a(i)
End If
If min > a(i) Then
min = a(i)
End If
Next

msgbox "最大值:" & max & " 最小值:" & min
很多教程要么只讲 COMFYUI 怎么调参数,要么只讲 PS 怎么修图,学完还是 “两张皮”—— 不知道怎么配合出活。 但这门课直接聚焦 “联动效率”:用 COMFYUI 生成高质感初稿,再用 PS 精修细节(比如修掉 AI 画错的手指、优化光影);在 PS 里画简单线稿,丢给 COMFYUI 自动生成场景(比如画个房间轮廓,AI 秒出带家具、暖光的室内图);不用再重复画背景、扣产品、调色调,效率直接翻 10 倍,原来 1 天出 1 张图,现在 1 小时出 3 张! 17 节课分 3 大模块:从 “不装” 到 “能接单”,不用瞎摸索 每节课都给配套素材,跟着就能出结果,不用自己找资源、试错浪费时间! 【入门篇】0 基础 1 小时上手:装得对、不崩溃、能出图(第 1-4 课) 先解决 “第一步难” 的问题,电脑小白也能搞定: 《COMFYUI+PS 安装全攻略》:插件放哪个文件夹、路径怎么设、环境怎么配,一步一步截图教,保证一次装成;解决COMFYUI崩溃问题 《报错急救指南》:启动崩溃、插件不识别、生成卡顿?30 + 常见问题直接给解决方案,不用再搜半天百度; 《文生图 + 图生图基础》:不用背复杂咒语!教你 “关键词公式”(风格 + 主体 + 细节 + 光影),比如输入 “日系治愈风卧室,暖光,木质家具,窗台有绿植”,第一次用就能出可用的室内初稿,比自己画快 10 倍! 【实战篇】80% 商用场景覆盖:学完就能用,出图直接赚钱(第 5-12 课) 全是 “能落地、能救急” 的案例,不管是接小单还是自己的作品,都用得上: 人物转绘:PS 画简单线稿,COMFYUI 自动生成动漫风 / 写实风人物(头像、插画,某平台接单发稿 1 张 20-50 元); 室内设计:画房间线稿,AI 秒出带家具、光影的效果图(装修前预览、帮设计师出
线程安全,并发的知识有加深认知;当然,现在用过的东西并不是代表以后还能娴熟的使用,好笔记非常重要; 1:必须明白为什么要使用线程池:(这点很重要)   a:手上项目所需,因为项目主要的目的是实现多线程的数据推送;需要创建多线程的话,那就要处理好线程安全的问题;因为项目需要,还涉及到排队下载的功能,所以就选择了线程池来管理线程以及线程池里面的任务队列workQueue来实现项目所需的功能;   b:在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了防止资源不足,服务器应用程序需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务,这就是“池化资源”技术产生的原因。 线程池主要用来解决线程生命周期开销问题和资源不足问题(这段是摘自网络) 2:如何创建一个线程池:    复制代码 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime = corePoolSize || !addIfUnderCorePoolSize(command)) {//新建线程并启动 if (runState == RUNNING && workQueue.offer(command)) {//添加任务到队列 if (runState != RUNNING || poolSize == 0) ensureQueuedTaskHandled(command);//添加到队列失败或已满,拒接任务处理策略 } //若阻塞队列失败或已满;这里新建一个线程并启动应急处理(这里就是用到了maximumPoolSize参数) else if (!addIfUnderMaximumPoolSize(command)) reject(command); // 若线程池的线程超过了maximumPoolSize;就拒绝处理任务策略 } } 复制代码 -->>继续跟踪代码到addIfUnderCorePoolSize(Runnable firstTask):函数名称就可以看出来这个函数要执行的什么;如果线程池的线程小于核心线程数corePoolSize就新建线程加入任务并启动线程【在今后的开发中尽量把需要的功能在函数名体现出来】 复制代码 private boolean addIfUnderCorePoolSize(Runnable firstTask) { Thread t = null; final ReentrantLock mainLock = this.mainLock;//获取当前线程池的锁 mainLock.lock();//加锁 try { /* 这里线程池线程大小还需要判断一次;前面的判断过程中并没有加锁,因此可能在execute方法判断的时候poolSize小于corePoolSize,而判断完之后,在其他线程中又向线程池提交了任务,就可能导致poolSize不小于corePoolSize了,所以需要在这个地方继续判断 */ if (poolSize largestPoolSize) largestPoolSize = nt; } return t; } 复制代码 -->>接下来定位worker类,看看线程池里的线程是如何执行的 上面的addIfUnderCorePoolSize(..)已经把线程启动了;现在就直接查看worker 的run()方法了 复制代码 public void run() { try { Runnable task = firstTask;//该线程的第一个任务,执行完后就从阻塞队列取任务执行 firstTask = null; while (task != null || (task = getTask()) != null) {//getTask()从队列去任务执行 runTask(task);//线程执行任务 task = null; } } finally { workerDone(this);//若任务全部执行完,就开始尝试去停止线程池;这部分代码就不再追踪下去,有兴趣的读者可以自己打开源码分析,不必害怕,学习大神们的编码方式,看源码能让你学习到很多 } } private void runTask(Runnable task) { final ReentrantLock runLock = this.runLock; runLock.lock(); try { //多次检查线程池有没有关闭 if (runState = STOP) thread.interrupt(); boolean ran = false; //这里就可以继承ThreadPoolExecutor,并覆盖beforeExecute(...)该方法,来一些执行任务之前的统计工作或者用来保存正在执行的任务 beforeExecute(thread, task); try { task.run(); ran = true; //这里就可以继承ThreadPoolExecutor,并覆盖beforeExecute(...)该方法,来一些执行任务完成之后的统计工作或者用来保存正在执行的任务 afterExecute(task, null); ++completedTasks;//统计总共执行的任务数 } catch (RuntimeException ex) { if (!ran) afterExecute(task, ex); throw ex; } } finally { runLock.unlock(); } } 复制代码 至此线程池基本的流程完了; 再说说我在项目中的使用: MyExtendThreadPoolExecutor 继承了 ThreadPoolExecutor,并覆盖了其中的一些方法 复制代码 public class MyExtendThreadPoolExecutor extends ThreadPoolExecutor{ public static Logger logger=LoggerFactory.getLogger(MyExtendThreadPoolExecutor.class); /** * 记录运行中任务 */ private LinkedBlockingQueue workBlockingQueue=new LinkedBlockingQueue(); public MyExtendThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); } @Override protected void beforeExecute(Thread t, Runnable r) { super.beforeExecute(t, r); workBlockingQueue.add((GtdataBreakpointResumeDownloadThread)r);//保存在运行的任务 logger.info("Before the task execution"); } @Override protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); workBlockingQueue.remove((GtdataBreakpointResumeDownloadThread)r);//移除关闭的任务 logger.info("After the task execution"); } /** * * Description: 正在运行的任务 * @return LinkedBlockingQueue * @author lishun */ public LinkedBlockingQueue getWorkBlockingQueue() { return workBlockingQueue; } } 复制代码 MyExtendThreadPoolExecutor pool = new MyExtendThreadPoolExecutor(3, 3,60L,TimeUnit.SECONDS,new LinkedBlockingQueue ()); //创建线程池 复制代码 public void addToThreadPool(DownloadRecord downloadRecord){ BlockingQueue waitThreadQueue = pool.getQueue();//Returns the task queue LinkedBlockingQueue workThreadQueue =pool.getWorkBlockingQueue();//Returns the running work GtdataBreakpointResumeDownloadThread downloadThread = new GtdataBreakpointResumeDownloadThread(downloadRecord);//需要执行的任务线程 if (!waitThreadQueue.contains(downloadThread)&&!workThreadQueue.contains(downloadThread)) {//判断任务是否存在正在运行的线程或存在阻塞队列,不存在的就加入线程池(这里的比较要重写equals()) Timestamp recordtime = new Timestamp(System.currentTimeMillis()); logger.info("a_workThread:recordId="+downloadRecord.getId()+",name="+downloadRecord.getName()+" add to workThreadQueue"); downloadThread.setName("th_"+downloadRecord.getName()); pool.execute(downloadThread);//添加到线程池 }else{ logger.info("i_workThread:recordId="+downloadRecord.getId()+",name="+downloadRecord.getName()+" in waitThreadQueue or workThreadQueue"); } }

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧