日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

个人作业1-数组(续1)

發(fā)布時(shí)間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 个人作业1-数组(续1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

新情況:

  1.要求數(shù)組從文件讀取。

  2.如果輸入的數(shù)組很大,并且有很多大的數(shù)字,就會(huì)產(chǎn)生比較大的結(jié)果(考慮一下數(shù)的溢出),請保持你的程序正常輸出。

  3.另外,如果輸入文件的參數(shù)有錯(cuò)誤,這個(gè)程序應(yīng)該能正確退出,并顯示相應(yīng)的錯(cuò)誤。任何輸入錯(cuò)誤都不能導(dǎo)致你的程序崩潰。

設(shè)計(jì)思想:

? ? ? ?首先實(shí)現(xiàn)文件的輸入輸出,向文件輸入時(shí)采取一行一個(gè)數(shù)的方式輸入,這樣在取值時(shí)可以比較簡單,一行一行的取。考慮到數(shù)組大小的不確定性,采用容器list從文件中獲取數(shù)據(jù),同時(shí)還可以很好的解決數(shù)組過大問題。最后解決數(shù)的溢出問題,采用BigInteger解決。最后進(jìn)行測試,解決一些意外導(dǎo)致的問題。

出現(xiàn)的問題:

? ? ? ?1.在使用BigInteger時(shí)add()函數(shù)出錯(cuò),數(shù)值無法相加。

  2.用list容器直接操作時(shí)出現(xiàn)了一些錯(cuò)誤。

  3.每次重新進(jìn)行操作時(shí)新增的內(nèi)容會(huì)出現(xiàn)在舊的內(nèi)容之下。

解決方法:
  1.直接運(yùn)用maxstart.add(y) 數(shù)值不變,所以我創(chuàng)了一個(gè)新的BigInteger變量v,讓v=maxstart.add(y),發(fā)現(xiàn)可以得到相加的結(jié)果,之后我讓maxstart=v,問題解決。

  2.直接使用list容器容易出錯(cuò),所以我通過for循環(huán)將容器中的值一一賦到String數(shù)組中。

  3.我在程序的末尾加入了文件清空函數(shù)。

package shuzuxu;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.*; public class shuzu {public static void main(String[] args) throws Exception{File f = new File("hello.txt");judeFileExists(f);//判斷文件是否存在//用FileOutputSteam包裝文件,并設(shè)置文件可追加OutputStream out = new FileOutputStream(f,true);Scanner in=new Scanner(System.in);System.out.println("請輸入產(chǎn)生隨機(jī)數(shù)的數(shù)量:");String nums;int n;while(true)//判斷輸入是否為整數(shù) {try{nums=in.next() ;n=Integer.parseInt(nums) ;break ;}catch(Exception e){System.out.println("只能輸入整數(shù)") ;}}for(int i=0;i<n;i++){java.util.Random r=new java.util.Random();String s=Integer.toString(r.nextInt());out.write(s.getBytes()); //向文件中寫入數(shù)據(jù)out.write('\r'); // \r\n表示換行out.write('\n'); }List list = new ArrayList();BufferedReader bw = new BufferedReader(new FileReader(f));String line = null;//因?yàn)椴恢烙袔仔袛?shù)據(jù),所以先存入list集合中while((line = bw.readLine()) != null){list.add(line);}//bw.close();int a=list.size();String[] li=new String[a];for(int i=0;i<list.size();i++){li[i]=(String) list.get(i);System.out.println(li[i]);}BigInteger maxsum = new BigInteger("0");BigInteger maxstart = new BigInteger("0");//用于判斷子數(shù)組是否小于0BigInteger x = new BigInteger("0");maxsum = new BigInteger(li[0]);BigInteger y;for(int i = 0;i < list.size();i++){if (maxstart.compareTo(x)!=1) {//忽略掉和為負(fù)數(shù)和0的子數(shù)組maxstart = new BigInteger(li[i]);}else {y= new BigInteger(li[i]);BigInteger v=maxstart.add(y);maxstart=v;}if (maxsum.compareTo(maxstart)<0) {maxsum = maxstart;}}System.out.println("最大值為:" + maxsum);FileWriter fileWriter =new FileWriter(f);fileWriter.flush();fileWriter.close();String line1 = null;if((line1 = bw.readLine()) == null){System.out.println("文件清空成功");;}}public static void judeFileExists(File file) {//判斷文件是否存在if (file.exists()) {System.out.println("file exists");} else {System.out.println("file not exists, create it ...");try {file.createNewFile();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}}} }

結(jié)果截圖:

總結(jié):

? ? ?目前測試的最大數(shù)組為500萬,明顯運(yùn)行的非常慢,不過還可以運(yùn)行,接下來的任務(wù)是盡可能優(yōu)化程序。在第三點(diǎn),我對輸入的數(shù)組的數(shù)量進(jìn)行了一次循環(huán)判斷,如果輸入的不是整數(shù)則重新輸入,之后增加了一個(gè)判斷文件是否存在的函數(shù),在程序末尾加了判斷文件是否為空的if語句,總之通過本次作業(yè),我進(jìn)行了依次小型的單元測試,也力爭讓程序變得更完善,之后我會(huì)繼續(xù)修改,爭取能變得更好。

轉(zhuǎn)載于:https://www.cnblogs.com/liujinxin123/p/10533709.html

總結(jié)

以上是生活随笔為你收集整理的个人作业1-数组(续1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。