子數組最大求和(續)
阿新 • • 發佈:2019-03-17
++ print 不知道 輸出最大值 xxx pub try length 沒有
這次實驗的主要設計思路和上次的大框差不多,只是不同的地方就是從文件獲取大量的數據和對大型數據的處理,我主要是將文件中的內容讀取成了double型,進而使其能處理比較大的數據,但要是想讓其處理更大的數據只能將其轉化為big型。
package shuzu; import java.io.*; import java.util.*; public class shuzu { public static void main(String[] args) throws IOException{ String path = "F:\\JAVA_2019\\shuzu\\shuzu.txt";double[] nums = writeToDat(path); int[] shuzu= new int[nums.length]; for(int i=0;i<nums.length;i++){ shuzu[i]=(int)nums[i]; } //時間復雜度沒有實現,只是實現了輸出最大值 int nshu;//循環的次數 int shu[] = {-1,3,-6,-5,-2}; int max = (int)shuzu[0];//存儲最大的和for(nshu=0;nshu<nums.length;nshu++) { int n1 = 0; int n2 = 0; for(int nnshu=nshu;nnshu<nums.length;nnshu++) { n1 = n1 + shuzu[nnshu]; if(nnshu<4) { nnshu = nnshu + 1; n2= n1 + shuzu[nnshu]; max = maxxx(n1,n2,max); nnshu = nnshu - 1; }else { max = maxx(n1,max); } } } System.out.println("最大值" + max); System.exit(0); } static int maxxx(int a,int b,int ab) { int max; if(a<b) { max = b; if (max<ab) { max = ab; } }else { max = a; if(max<ab) { max = ab; } } return max; } static int maxx(int a , int b){ int max; if(a<b) { max = b; }else { max = a; } return max; } public static double[] writeToDat(String path) { File file = new File(path); List list = new ArrayList(); double[] nums = null; try { BufferedReader bw = new BufferedReader(new FileReader(file)); String line = null; //因為不知道有幾行數據,所以先存入list集合中 while((line = bw.readLine()) != null){ list.add(line); } bw.close(); } catch (IOException e) { e.printStackTrace(); } //確定數組長度 nums = new double[list.size()]; for(int i=0;i<list.size();i++){ String s = (String) list.get(i); nums[i] = Double.parseDouble(s); } return nums; } }
最後想說的就是雖然能勉強實現處理大數的功能但是對大量數據的處理還沒有到理想化,所以還要在優化上下功夫。
子數組最大求和(續)