You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:23:00