环状数组求最大子数组
思路就是在非环状的基础上,将数组扩大两倍,然后利用原来的方法进行寻找。
本程序代码是从文件中读取数字,然后进行寻找。
下面这段代码是文件读取的代码,其中加了一个自定义的异常处理,增强文件的健壮性。
package diyizhou; import java.io.File; import java.io.InputStreamReader; import java.math.BigDecimal; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.StringTokenizer; import java.io.FileWriter; class MyException extends Exception { public MyException(String Message) { super(Message); } public MyException(String message, Throwable cause) { super(message, cause); } public MyException( Throwable cause) { super(cause); } } public class cin_txt { public static void throwExceptionMethod() throws MyException { try { // System.out.println( "Method throwException" ); // System.out.println(11111); throw new Exception("内容不规范"); // 产生了一个特定的异常 } catch( Exception e ) { //System.out.println("2222"); System.err.println(e.getMessage()); //throw new MyException("NotSanjiaoException2"); } // any code here would not be reached } public static void duqu(String lujing) { int num[]=new int[10000]; String s=""; int i=0; try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw /* 读入TXT文件 */ String pathname = lujing; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径 File filename = new File(pathname); // 要读取以上路径的input。txt文件 InputStreamReader reader = new InputStreamReader( new FileInputStream(filename)); BufferedReader br = new BufferedReader(reader); String line = ""; line = br.readLine(); while (line != null) { StringTokenizer st2 = new StringTokenizer(line, ","); while (st2.hasMoreElements()) { s=String.valueOf(st2.nextElement()); try { num[i]=Integer.parseInt(s); i++; } catch(Exception e) { try { throwExceptionMethod(); } catch (MyException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } System.exit(0); } } // System.out.println(); //System.out.println("**********"); //System.out.println(line); line = br.readLine(); // 一次读入一行数据 } } catch (Exception e) { e.printStackTrace(); } xunhuanshuzu.huan(num,i); } }
接下来是处理数字的源程序代码
package diyizhou; import java.util.Scanner; public class xunhuanshuzu { public static void main(String[] args) { cin_txt.duqu("E:\\txt.txt"); } public static void huan(int[] a,int n) { for(int i=0;i<n;i++) { a[i+n]=a[i]; } Jisuan(a,n); } public static void Jisuan(int[] a,int n) { int mmax=a[0]; int s=-100000; for(int i=0;i<n;i++) { System.out.println(a[i]); s=-1000; for(int j=i;j<n+i;j++) { s+=a[j]; if(s>mmax) { mmax=s; } if(s<0) { s=a[j]; } } } System.out.println("mmax="+mmax); } }
接下来附上两张运行结果
分别是正常规范的文件和不规范的文件的运行的结果图。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!