课堂练习2整数数组
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/15999202.html
题目:返回一个整数数组中最大子数组的和02
要求:
程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:
数组的行数, 数组的列数, 每一行的元素, (用逗号分开) 每一个数字都是有符号32位整数。 当然, 行数和列数都是正整数。
例如下面的文件说明数组是有1行, 6列, 元素依次是: 5, 6, –3, 8, –9, 2
解决思路:建立一维数组,在原来课堂练习1的基础上,加入文件的输入输出。
实现代码:
import java.io.*; import java.math.BigInteger; public class Main2 { @SuppressWarnings("resource") public static void main(String[] args) throws IOException { String line = ""; String snum[] = new String[100]; String sp[] = new String[10];// 设置num.txt中一行10个数据 File file = new File("num.txt"); // num.txt 就在此java工程下 BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); } catch (FileNotFoundException e) { System.out.println("文件num.txt没有在此java工程下,请设置好文件位置后再次尝试"); return; } int temp = 0; int k = 0; int i = 0; BigInteger big[] = new BigInteger[100]; BigInteger big2[] = new BigInteger[100]; BigInteger bigmax = new BigInteger("-9999999999"); BigInteger bigmax2 = new BigInteger("0"); BigInteger bigmin = new BigInteger("9999999999"); BigInteger bigsum = new BigInteger("0"); // 使用BigInteger读文件按行读取文件 while ((line = br.readLine()) != null) { sp = line.split(" ");// 按空格进行分割函数 for (i = 0; i < sp.length; i++) { snum[temp] = sp[i]; temp++; } } // 数据转换 try { for (i = 0; i < snum.length; i++) {// 转化为BigInteger if (snum[i] != null) { big[i] = new BigInteger(snum[i]); big2[i] = big[i]; //System.out.println(big[i]); bigsum = bigsum.add(big[i]); } } } catch (NumberFormatException e) { // 数据转换时的异常处理完成要求3 System.out.println("文件中存在异常字符,请更新后再次尝试!"); return; } i = 0; // 求出文件中的数据的个数k while (big[i] != null) { k++; i++; } // 求子数组最大值 BigInteger b0 = new BigInteger("0"); for (i = 1; i < k; i++) { if (big[i-1].compareTo(b0) > 0) { big[i] = big[i].add(big[i-1]); } } for (i = 0; i < k; i++) { if (big[i].compareTo(bigmax) > 0) { bigmax = big[i]; } } System.out.println("所有子数组的和的最大值为" + bigmax); // 环形数组求子数组最小值 for (i = 1; i < k; i++) { if (big2[i-1].compareTo(b0) < 0) { big2[i] = big2[i].add(big2[i-1]); } } for (i = 0; i < k; i++) { if (big2[i].compareTo(bigmin) < 0) { bigmin = big2[i]; } } bigmax = bigsum.subtract(bigmin); //System.out.println(bigsum); //System.out.println(bigmin); if(bigmax.compareTo(bigmax2) > 0) { System.out.println("环形数组的所有子数组的和的最大值为" + bigmax); }else { System.out.println("环形数组的所有子数组的和的最大值为" + bigmax2); } } }
num数据:1 12 45 -2 23 14 -12 21 0 -13
运行截图:
总结:在解决这个问题的时候,需要掌握文件输入输出
学习时长:1h18min
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」