题目:数组元素从文件中读取。
要求:数字很多和很大,也能正常输出(考虑数的溢出),输入文件参数有错误,程序能正常退出,并显示相应的错误信息。任何输入错误都不能导致程序崩溃。
思路:在文件读取getfile函数中规范文件的格式;在selectArray函数中进行数组的运算,类似于前面的数组运算;在FindArrayList函数进行文件的读取,并处理读取到的信息,然后在主函数中调用这个函数,就能实现文件中信息进行数组的运算。
import java.util.Scanner; public class shuzu3 { public static void main(String[] args) { //"C:\Users\Administrator\Desktop\kkk.txt" //判断文件路径输入是否正确 FindArrayList(getfile()); } private static BigInteger FindArrayList(File file) { ArrayList<String> arrayList = new ArrayList<>(); try { InputStreamReader input = new InputStreamReader(new FileInputStream(file)); BufferedReader bf = new BufferedReader(input); // 按行读取字符串 String str; while ((str = bf.readLine()) != null) { arrayList.add(str); } bf.close(); input.close(); } catch (IOException e) { e.printStackTrace(); } // 对ArrayList中存储的字符串进行处理 int count=0; int count2=0; ArrayList<String> number = new ArrayList<>(); int length = arrayList.size(); for (int i = 0; i < length; i++) { String [] s = arrayList.get(i).split(" "); int width=s.length; for(int j=0;j<width;j++) { if(!s[j].equals("")&&s[j].matches("^-?\d+$")) { number.add(s[j]); count++; } count2++; } } System.out.println("本次共识别"+count+"个数据;有"+(count2-count)+"个非数字数据不能识别"); int numbersize=number.size(); BigInteger q=new BigInteger("-99999999999999999999999999999999999999999999"); for(int i=1;i<numbersize;i++) { ArrayList<String> newNumber=new ArrayList<String>(); for(int j=0;j<number.size();j++) { newNumber.add(number.get((i+j)%numbersize)); } q= max(selectArray(newNumber),q); } System.out.println(q); return q; } public static BigInteger selectArray(ArrayList<String> number) { BigInteger ans=new BigInteger((String)number.get(0)); for(int i = 1;i < number.size(); i++){ BigInteger big1=new BigInteger((String)number.get(i)); BigInteger big2=new BigInteger((String)number.get(i-1)); BigInteger big3=big1.add(big2); if(big3.compareTo(big1)>=0) { number.set(i, big3.toString()); } } for(int i=0;i<number.size();i++) { BigInteger big=new BigInteger((String)number.get(i)); ans=max(ans,big); } return ans; } private static BigInteger max(BigInteger big1, BigInteger ans) { // TODO Auto-generated method stub if(big1.compareTo(ans)>=0) { return big1; } else return ans; } public static File getfile() { System.out.println("请输入文件路径"); Scanner sc=new Scanner(System.in); while(true) { String line=sc.nextLine(); File kk=new File(line); if(!kk.isFile()) { System.out.println("输入的不是文件路径,请重新输入"); } else if(kk.isFile()) { return kk; } } } }