Java入门:如何实现动态更新表格、累计求和及图表更新
嘿,作为Java新手能想到这样的需求已经超棒啦!我来一步步帮你拆解实现,分成几个核心部分来搞定:
1. 核心逻辑:输入处理、结果存储与累计求和
首先咱们先把你开头写的代码补全,同时实现存储每次结果和累计求和的功能。这里我用List来存历史输入和输出,用一个变量来累计总和,代码很直观:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; class Vedant { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<Integer> inputHistory = new ArrayList<>(); // 存每次输入的数值 List<Integer> outputHistory = new ArrayList<>(); // 存每次对应的输出结果 int totalSum = 0; // 累计求和的变量 System.out.println("欢迎!请输入1-40之间的数值(输入非整数可退出程序):"); while (scanner.hasNextInt()) { int input = scanner.nextInt(); int output = 0; // 按照规则计算输出值 if (input >= 1 && input <= 20) { output = 5; } else if (input >= 21 && input <= 40) { output = 10; } else { System.out.println("⚠️ 输入值不在1-40区间哦,跳过该值~"); continue; } // 存储结果并更新累计总和 inputHistory.add(input); outputHistory.add(output); totalSum += output; // 实时反馈当前状态 System.out.println("\n✅ 本次输入:" + input + " → 输出:" + output); System.out.println("当前累计总和:" + totalSum); System.out.println("\n请继续输入数值(输入非整数退出):"); } scanner.close(); System.out.println("\n程序结束啦!最终累计总和:" + totalSum); System.out.println("历史输入记录:" + inputHistory); System.out.println("历史输出记录:" + outputHistory); } }
这段代码里的关键点:
- 用
ArrayList存储输入和输出的历史记录,方便后续生成表格或图表 totalSum变量每次循环都会加上当前的输出值,轻松实现累计求和- 用
scanner.hasNextInt()做循环判断,输入非整数就自动退出程序
2. 生成可随输入更新的表格
如果要在控制台显示规整的表格,每次输入后更新,咱们可以用格式化输出(printf)来实现。每次输入后,重新打印表头和所有历史记录,看起来就像表格实时更新了~
修改上面的代码,在更新完总和后添加这段表格打印逻辑:
// 打印更新后的表格 System.out.println("\n=== 实时结果表格 ==="); // 格式化表头,%-10s表示左对齐,占10个字符宽度 System.out.printf("%-10s %-10s\n", "输入值", "输出结果"); System.out.println("--------------------"); // 遍历历史记录,逐行打印 for (int i = 0; i < inputHistory.size(); i++) { System.out.printf("%-10d %-10d\n", inputHistory.get(i), outputHistory.get(i)); } System.out.println("--------------------"); System.out.printf("%-10s %-10d\n", "累计总和", totalSum);
这样每次输入后,控制台都会输出一个更新后的表格,清晰展示所有历史数据和当前总和。
3. 关于图表更新
Java控制台本身没法直接显示可视化图表,如果要做实时更新的图表,咱们可以用JFreeChart这个常用的Java可视化库。这里给你一个简单的实现框架:
首先,如果你用Maven管理项目,需要在pom.xml里添加JFreeChart的依赖:
<dependency> <groupId>org.jfree</groupId> <artifactId>jfreechart</artifactId> <version>1.5.3</version> </dependency>
然后修改主代码,添加图表窗口和实时更新逻辑:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.data.category.DefaultCategoryDataset; import javax.swing.*; class Vedant { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<Integer> inputHistory = new ArrayList<>(); List<Integer> outputHistory = new ArrayList<>(); int totalSum = 0; // 初始化图表数据集和窗口 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); JFreeChart barChart = ChartFactory.createBarChart( "输入结果统计", // 图表标题 "输入序号", // X轴标签 "输出值", // Y轴标签 dataset ); JFrame chartFrame = new JFrame("实时结果图表"); ChartPanel chartPanel = new ChartPanel(barChart); chartFrame.setContentPane(chartPanel); chartFrame.setSize(600, 400); chartFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); chartFrame.setVisible(true); System.out.println("欢迎!请输入1-40之间的数值(输入非整数可退出程序):"); while (scanner.hasNextInt()) { int input = scanner.nextInt(); int output = 0; if (input >= 1 && input <= 20) { output = 5; } else if (input >= 21 && input <= 40) { output = 10; } else { System.out.println("⚠️ 输入值不在1-40区间哦,跳过该值~"); continue; } inputHistory.add(input); outputHistory.add(output); totalSum += output; // 更新图表数据集 dataset.addValue(output, "输出结果", "输入" + (inputHistory.size())); // 刷新图表 chartPanel.repaint(); // 打印表格和状态 System.out.println("\n✅ 本次输入:" + input + " → 输出:" + output); System.out.println("当前累计总和:" + totalSum); printTable(inputHistory, outputHistory, totalSum); System.out.println("\n请继续输入数值(输入非整数退出):"); } scanner.close(); System.out.println("\n程序结束啦!最终累计总和:" + totalSum); } // 把表格打印抽成单独的方法,代码更整洁 private static void printTable(List<Integer> inputs, List<Integer> outputs, int sum) { System.out.println("\n=== 实时结果表格 ==="); System.out.printf("%-10s %-10s\n", "输入值", "输出结果"); System.out.println("--------------------"); for (int i = 0; i < inputs.size(); i++) { System.out.printf("%-10d %-10d\n", inputs.get(i), outputs.get(i)); } System.out.println("--------------------"); System.out.printf("%-10s %-10d\n", "累计总和", sum); } }
这段代码会弹出一个窗口,每次输入有效数值后,图表里就会新增一个柱子,实时展示所有输出结果。
关键知识点梳理
- 结果存储:用
List(比如ArrayList)可以轻松存储历史输入和输出,随时查看或复用数据 - 累计求和:只需要一个整型变量,每次循环累加当前输出值就搞定,逻辑超级简单
- 表格更新:控制台表格靠重新打印格式化文本实现;如果做GUI表格,可以用Swing的
JTable,更新数据模型后刷新即可 - 图表更新:借助第三方可视化库(如JFreeChart),更新数据集后调用
repaint()就能让图表实时刷新
内容的提问来源于stack exchange,提问作者Vedant
相关产品推荐
相关产品推荐

