思路就是在非环状的基础上,将数组扩大两倍,然后利用原来的方法进行寻找。
本程序代码是从文件中读取数字,然后进行寻找。
下面这段代码是文件读取的代码,其中加了一个自定义的异常处理,增强文件的健壮性。
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); } }
接下来附上两张运行结果
分别是正常规范的文件和不规范的文件的运行的结果图。