Java语言用函数调用的方式如何绘制函数曲线图

Java语言用函数调用的方式如何绘制函数曲线图?在函数统计图上标出调用的函数,怎么知道调用的是什么函数的呢

可以使用一些开源的图表库,如 JFreeChart 或 Chart.js 等

示例代码如下:

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;

import java.awt.*;

public class FunctionChart {

    public static void main(String[] args) {
        // 创建函数曲线图数据集
        XYDataset dataset = createDataset();

        // 创建函数曲线图
        JFreeChart chart = createChart(dataset);

        // 显示图表窗口
        ChartFrame frame = new ChartFrame("Function Chart", chart);
        frame.pack();
        frame.setVisible(true);
    }

    private static XYDataset createDataset() {
        DefaultXYDataset dataset = new DefaultXYDataset();

        // 添加函数曲线的数据
        double[][] data = generateFunctionData();
        dataset.addSeries("Function", data);

        return dataset;
    }

    private static double[][] generateFunctionData() {
        // 生成函数曲线的数据
        double[][] data = new double[2][100];
        for (int i = 0; i < data[0].length; i++) {
            double x = i * 0.1;
            double y = Math.sin(x);  // 这里以 sin 函数为例
            data[0][i] = x;
            data[1][i] = y;
        }
        return data;
    }

    private static JFreeChart createChart(XYDataset dataset) {
        // 创建函数曲线图
        JFreeChart chart = ChartFactory.createXYLineChart(
                "Function Chart",  // 图表标题
                "X",  // X 轴标签
                "Y",  // Y 轴标签
                dataset  // 数据集
        );

        // 在图表上标出调用的函数
        chart.addSubtitle("Function: sin(x)");

        // 设置字体样式
        Font font = new Font("SansSerif", Font.BOLD, 16);
        chart.getSubtitle(0).setFont(font);

        return chart;
    }
}


  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/726908
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:java通过键盘不断输入某门课程的成绩(利用异常处理解决当输入非法数字或非数字的字符串时提示输入不正确)
  • 你还可以看下java参考手册中的 java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-泛型是Java编程语言的一个强大功能。它们提高了代码的类型安全性,使更多的错误可以在编译时发现。-野生动物
  • 除此之外, 这篇博客: JAVA去掉数组重复数字中的 去掉一个已经排好序的数组的重复数字,执行速度也是考虑的问题。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • package JAVA_Project_01_04;//创建一个包
    /*
    提供两种思路解决去掉重复数字:第一种是增加一个数组,但是长度无法确定,记录没有重复的值;
    第二种是增加一个数组,用于记录原数组中存在的数,再增加一个数组可以确定数组的长度,用于存放原数组的值。
     */
    public class TextDelRepeat {//操作去掉数组中重复数字的类
    
        public static int[]changeMethodOne(int src[]){//方法一  去掉重复数字
            int length=src.length;//获得传入数组的长度
            int[] taget =new int[length];//声明一个数组,长度为传入数组的长度
            int index = 0;
            taget[0]=src[0];//设置数组的初始值
            for (int i = 1; i < length; i++) {//循环遍历传入数组
                if (taget[index]!=src[i]){//遍历数组与初始值进行比较
                    index++;//等价于index=index+1
                    taget[index]=src[i];//元素赋值
                }
            }
            return taget;//返回结果数组
        }
    
        public static int[]changeMethodTwo(int src[]){//方法二  去掉重复数字
            int length =src.length;//获得传入数组的长度
            int[] tagetIndex=new int[length];//声明一个数组,长度为传入数组的长度
            int tagetLength = length;
            for (int i = 0; i < length; i++) {
                tagetIndex[i]=0;//初始化tagetIndex
            }
            for (int j = 1; j < length; j++) {//记录重复的值
                if (src[j]==src[j-1]){
                    tagetIndex[j]=1;
                    tagetLength--;
                }
            }
            int[] target =new int[tagetLength];
            int index=0;
            for (int k = 0; k < length; k++) {//循环将数组赋值
                if (tagetIndex[k]==0){//数组元素等于1是存放重复数字
                    target[index++]=src[k];
                }
            }
            return target;
        }
    
        public static void main(String[] args) {
            int[] a={1,1,1,2,3,4,5,6,9,9,12,53};//声明数组并初始化
            int[] b=changeMethodOne(a);//调用第一种方法去掉重复数字
            System.out.println("第一种方法去掉数组中重复的数字结果:");
            for (int i = 0; i < b.length; i++) {//将返回的数组输出
                System.out.println(b[i]+" ");
            }
            System.out.println();
            System.out.println("第二种方法去掉数组中重复数字结果:");
            int[] c=changeMethodTwo(a);//调用第二种方法去掉重复数字
            for (int i = 0; i < c.length; i++) {//将返回的数组输出
                System.out.println(c[i]+" ");
            }
        }
    }
    /*
    在changeMethodone()方法中,声明一个与传入数组长度相等的数组,根据循环判断是否有重复的数字,并将不重复
    的数字放入声明的数组中,如果传入数组中存在重复的数字,那么这个数组的长度应会小于传入数组的长度,这样也就造成了数组长度的浪费。
    在ChangeMothodTwo()方法中,也声明一个与传入数组长度相等的数组tagetIndex,值初始化全为0.循环进行判断重复数字的个数,如果存在重复数字则
    数组tagetIndex元素赋值为1.然后声明一个数组target,长度为(tagetIndex.length-重复数字个数)。当tagetIndex数组中元素为0的,
    将数组src元素下标等于tagetIndex元素中不为0的下标的元素赋值给target.
     */
    
  • 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 给扑克牌绑定鼠标事件实现单击可以选择出牌列表小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于通过函数调用绘制函数曲线图的问题,下面给出一个基本的解决方案:

    1. 首先,确定需要绘制的函数。可以在代码中定义一个函数,例如f(x),表示需要绘制的函数。

    2. 创建一个绘图窗口,可以使用Java的图形库,如Awt或JavaFX。

    3. 在绘图窗口中,创建一个画布,并设置坐标系和绘图区域。

    4. 在绘图区域中,通过循环遍历x的取值范围,计算出对应的y值,即f(x)。可以使用一定的步长来控制x的取值范围和曲线的精细度。

    5. 使用绘图库的函数,将计算得到的(x, y)坐标点连接起来,绘制曲线。

    下面是一个简单示例代码,使用JavaFX库绘制函数y = sin(x)的曲线图:

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.chart.LineChart;
    import javafx.scene.chart.NumberAxis;
    import javafx.scene.chart.XYChart;
    import javafx.stage.Stage;
    import java.lang.Math;
    
    public class FunctionGraph extends Application {
    
        @Override
        public void start(Stage stage) {
            // 定义x轴和y轴
            final NumberAxis xAxis = new NumberAxis();
            final NumberAxis yAxis = new NumberAxis();
            xAxis.setLabel("X");
            yAxis.setLabel("Y");
    
            // 创建折线图
            final LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
            lineChart.setTitle("Function Graph");
    
            // 创建数据序列
            XYChart.Series<Number, Number> series = new XYChart.Series<>();
            series.setName("y = sin(x)");
    
            // 计算函数曲线上的点,并添加到数据序列中
            double step = 0.1; // 步长
            for (double x = -10; x <= 10; x += step) {
                double y = Math.sin(x);
                series.getData().add(new XYChart.Data<>(x, y));
            }
    
            // 将数据序列添加到图表中
            lineChart.getData().add(series);
    
            // 创建场景并显示图表
            Scene scene = new Scene(lineChart, 800, 600);
            stage.setScene(scene);
            stage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    这个示例使用了JavaFX库来绘制图表,首先定义了x轴和y轴,然后创建了一个折线图,接着计算函数y = sin(x)上的点,并添加到数据序列中,最后将数据序列添加到图表中并显示出来。

    这个示例中只绘制了函数y = sin(x)的曲线图,你可以根据需要替换为其他函数。另外,你可能需要根据具体需求调整图表的大小、坐标范围、步长等参数。