Java实现规则几何图形问题求解

随着计算机的发展,人们对图形的计算要求会越来越高。在各行各业中的计算人员会对图形的计算要有便利的要求,规则几何图形问题求解程序应运而生!
在这里插入图片描述



请添加图片描述

👋🏻1.背景

规则几何图形问题求解的程序是对根据输入规则几何图形的一些特定的参数来实现对规则几何图形的面积和周长求解,以及根据输入的参数对对他们进行绘制相应的图形。

在程序中通过规则几何的类型来输入相应的参数有程序得到相应的解和图形。这从而达到了对图形的计算便利计算和直观的求出图形,从而帮助计算人员拥有更高的计算效率。

关键字:Java,swing,规则几何图形,文件操作

👋🏻2.开发工具

本程序开发使用的IDE是idea!
在这里插入图片描述

👋🏻3.数据存储设计

1.程序采用文件流操作将数据存储到.txt文件中,文件的路径是d:\\xxx.txt
在这里插入图片描述
2.文件中存储了基本的数据,包括输入的规则几何图形的长宽高等数据,还包括计算得到的面积周长等数据!例如:
在这里插入图片描述

👋🏻4.项目功能设计

在程序中,可以实现已经添加的几何图形的面积和周长的求解,绘制它们相应的图形和改变其形状,线条的粗细和颜色。根据提示,我们可以输入相关特征的参数去求解除它们的面积、周长以及改变它们的参数,也可以根据提示去改变各边的线条的粗细和颜色。

在规则几何问题求解中系统主要有Main程序、Triangleplay程序、 Rectangleplay程序、Squareplay程序、Circleplay程序、Rhombusplay程序、Trapezoidplay程序、Trapezoidequilateral程序和Trapezoidright程序。

👋🏻5.部分代码展示

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;


public class Circleplay {
    public static void main(String args[]){
        WindowCircle circleplay = new WindowCircle();
        circleplay.setTitle("几何图形计算");
        circleplay.setSize(500,300);
        circleplay.setLocation(500,250);
    }
}

class WindowCircle extends JFrame {
    Circle circle; // 数据对象
    JTextField textA, textB, textC; // 数据对象的视图
    JTextArea showArea; // 数据对象的视图
    JButton controlButton1; // 控制器对象
    JButton controlButton2;


    WindowCircle() {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    }

    void init() {
        circle = new Circle();
        textA = new JTextField(5);
        textB = new JTextField(5);
        showArea = new JTextArea();
        controlButton1 = new JButton("计算");
        controlButton2 = new JButton("退出");
        JPanel pNorth = new JPanel();
        JPanel pNorth1 = new JPanel();

        pNorth.add(new JLabel("半径"));
        pNorth.add(textA);
        pNorth.add(controlButton1);
        pNorth.add(controlButton2);
        pNorth.setLocation(250,250);

        pNorth1.add(new JLabel("图形线条粗细"));
        String[] s1 = new String[]{"1","2","3","4","5","6","7","8","9"};
        final JComboBox<String> comboBox1 = new JComboBox<String>(s1);
        pNorth1.add(comboBox1);


        pNorth1.add(new JLabel("图形线条颜色"));
        String[] s2 = new String[]{"黑色","红色","灰色","蓝色","黄色","绿色","紫色"};
        final JComboBox<String> comboBox2 = new JComboBox<String>(s2);
        pNorth1.add(comboBox2);

        add(pNorth, BorderLayout.NORTH);
        pNorth1.setPreferredSize(new Dimension(90,150));
        add(pNorth1, BorderLayout.WEST);
        add(new JScrollPane(showArea), BorderLayout.CENTER);

        controlButton1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                try {
                    double a = Double.parseDouble(textA.getText().trim()); //
                    circle.setA(a); // 更新数据
                    circle.paint();
                    String area1 = circle.getlength();
                    String area2 = circle.getArea();
                    showArea.append("半径为"+a+"的圆"+"	 "+"周长为:" +area1+"	"+"面积为:"+area2+"\n");
                } catch (Exception ex) {
                    showArea.append("\n" + ex + "\n");
                }
            }});

        controlButton2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                dispose();
            }});

        comboBox1.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    circle.Line(comboBox1.getSelectedIndex()+1);
                    circle.paint();
                }
            }});


        comboBox2.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    circle.Colour(comboBox2.getSelectedIndex()+1);
                    circle.paint();
                }
            }});

    }}

class Circle {

    FileWriter dout;
    double sideA, sideB, area,p;
    int line = 1,colournumber = 1;

    public void setA(double a) {
        sideA = a;

    }



    public String getArea() {

        area = 3.14*sideA*sideA;
        return String.valueOf(area); // Double.toString(area)

    }
    public String getlength() {

        p = 3.14 * sideA;
        return String.valueOf(p);

    }


    public void Line(int line)
    {
        this.line = line;

    }


    public void Colour(int colournumber)
    {
        this.colournumber = colournumber;

    }


    public void paint(){

        try{
            dout = new FileWriter("d:\\Circle.txt");

        }catch(IOException e){}

        JFrame jFrame = new JFrame("圆的图形");
        // 创建画板
        JPanel jpanel = new JPanel() {

            public void paint(Graphics graphics) {
                // 必须先调用父类的paint方法
                super.paint(graphics);

                Graphics2D g=(Graphics2D)  graphics.create();
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                if(colournumber == 1)
                    g.setColor(Color.BLACK);
                else if(colournumber == 2)
                    g.setColor(Color.RED);
                else if(colournumber == 3)
                    g.setColor(Color.GRAY);
                else if(colournumber == 4)
                    g.setColor(Color.BLUE);
                else if(colournumber == 5)
                    g.setColor(Color.YELLOW);
                else if(colournumber == 6)
                    g.setColor(Color.GREEN);
                else if(colournumber == 7)
                    g.setColor(Color.magenta);


                if(line == 1){
                    try{
                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }


                if(line == 2){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }


                if(line == 3){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }


                if(line == 4){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 5){
                    try{

                        dout.write("长方形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }


                if(line == 6){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 7){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }


                if(line == 8){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }

                if(line == 9){
                    try{

                        dout.write("圆形线条粗细为");
                        dout.write(String.valueOf(line));
                        dout.write(" \r\n");
                    }catch(IOException a){}

                }


                if(colournumber == 1)
                {
                    g.setColor(Color.BLACK);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("黑色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }


                else if(colournumber == 2)
                {
                    g.setColor(Color.RED);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("红色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 3)
                {

                    g.setColor(Color.GRAY);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("灰色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 4)

                {
                    g.setColor(Color.BLUE);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("蓝色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 5)
                {
                    g.setColor(Color.YELLOW);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("黄色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 6)
                {
                    g.setColor(Color.GREEN);
                    try{

                        dout.write("圆形颜色为");
                        dout.write("绿色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }

                else if(colournumber == 7)
                {
                    g.setColor(Color.magenta);

                    try{

                        dout.write("圆形颜色为");
                        dout.write("紫色");
                        dout.write(" \r\n");
                    }catch(IOException e){}

                }




                Stroke stroke=new BasicStroke(line);
                g.setStroke(stroke);


                DecimalFormat df = new DecimalFormat("######0");
                String str1 = df.format(sideA);
                int a = Integer.parseInt(str1);

                g.drawOval(100, 50, a*10,a*10);


                try{
                    dout.write("圆形半径为");
                    dout.write(String.valueOf(a));
                    dout.write(" \r\n");
                    dout.write("圆形周长为");
                    dout.write(String.valueOf(p));
                    dout.write(" \r\n");
                    dout.write("圆形面积为");
                    dout.write(String.valueOf(area));
                    dout.write(" \r\n");
                    dout.close();
                }catch(IOException exa){}


            }

        };

        jFrame.add(jpanel);
        // 设置画框大小(宽度,高度),默认都为0
        jFrame.setSize(300, 300);
        // 将画框展示出来。true设置可见,默认为false隐藏
        jFrame.setVisible(true);
        jFrame.setLocation(1000,250);
    }
}



👋🏻6.项目结构

以下是项目结构的展示:
在这里插入图片描述

👋🏻7.总结

规则几何图形求解根据图形的某些特征设置输入参数,根据这些参数来计算相应图形的面积和周长。在绘制图形方面,是根据所输入的参数来确定坐标,再连接坐标形成的图形。在改变图形方面,用绘图的类去改变图形。

这个程序适合在新手学习完Java基础知识以后练习,可以加深对Java编程的理解,同时对Java流的操作这一个抽象的概念有了更加深入的理解,学习完GUI技术不仅提升了编程兴趣,同时为Java下一阶段的学习奠定了基础。

在这里插入图片描述

下期见。

  • 37
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 您好!如果我理解正确,您的问题是如何使用Java实现n皇后问题的解决方法,我会尽力给出解答。 n皇后问题是一个经典的问题,旨在找到在n×n棋盘上放置n个皇后的所有不同方式,使得它们互相攻击的情况最少。在Java中,您可以使用回溯算法来解决这个问题。 下面是一个Java实现n皇后问题的示例代码: ``` public class NQueens { private int[] queens; public void solve(int n) { queens = new int[n]; placeQueen(0, n); } private void placeQueen(int row, int n) { if (row == n) { printQueens(); return; } for (int col = 0; col < n; col++) { if (isValid(row, col)) { queens[row] = col; placeQueen(row + 1, n); } } } private boolean isValid(int row, int col) { for (int i = 0; i < row; i++) { int pos = queens[i]; if (pos == col || pos - i == col - row || pos + i == col + row) { return false; } } return true; } private void printQueens() { for (int i = 0; i < queens.length; i++) { for (int j = 0; j < queens.length; j++) { if (queens[i] == j) { System.out.print("Q "); } else { System.out.print(". "); } } System.out.println(); } System.out.println(); } public static void main(String[] args) { NQueens nQueens = new NQueens(); nQueens.solve(4); } } ``` 在这个示例中,我们使用一个int类型的数组queens来保存每一行中皇后所在的列数。在placeQueen方法中,我们对每一行进行迭代,并尝试在该行的所有列中放置一个皇后。在每次迭代时,我们检查该皇后是否不会攻击到之前放置的皇后,并在不会冲突的情况下递归地继续放置下一个皇后,直到所有皇后都被放置在棋盘上为止。 如果我们放置好了n个皇后,就会调用printQueens方法打印出结果。在isValid方法中,我们检查一个皇后是否会被其他皇后攻击到。如果我们成功地找到了所有不同的n皇后解决方案,就会在控制台上输出相应的结果。 最后,在main方法中,我们创建了一个NQueens对象,并使用solve方法来解决n皇后问题。在这个例子中,我们使用n=4来演示程序的运行情况。 希望这个例子可以帮助您更好地理解Java中n皇后问题的解决方法。如果您有 ### 回答2: n皇后问题是指在一个n×n的棋盘上放置n个皇后,使得任意两个皇后不在同一行、同一列或同一对角线上。下面是用Java实现n皇后问题求解的步骤: 1. 定义一个二维数组board,表示棋盘,初始化所有元素为0。 2. 定义一个递归函数solveNQueen,用于寻找解决n皇后问题的解。 3. 在solveNQueen函数中,使用回溯算法进行搜索。从左到右遍历每一行,在每一行中尝试放置一个皇后。 - 对于当前行的每一个位置,首先判断是否与已放置的皇后冲突(是否在同一列或同一对角线)。 - 如果不冲突,则将当前位置设置为1,表示放置一个皇后。 - 继续递归调用solveNQueen函数,处理下一行。 - 如果递归调用返回的结果为真,则表明找到了一个解,将其返回。 - 如果递归调用返回的结果为假,则回溯,将当前位置重新置为0,继续尝试下一个位置。 4. 在solveNQueen函数中,使用一个整型变量count来记录找到的解的数量。 5. 在solveNQueen函数中,处理每一行后,如果当前行是最后一行,说明找到了一个解,将count加一,并返回真。 6. 在外部调用solveNQueen函数,并输出结果。 这样就用Java实现了n皇后问题求解。该算法通过回溯的方式搜索所有可能的解,找到其中一个解后再继续搜索,直到找到所有解或者搜索完所有可能的情况。实际上,该算法的时间复杂度很高,随着n的增加,求解的时间将指数增长。因此,在实际应用中,可能需要使用一些剪枝策略或优化算法来减少搜索的时间。 ### 回答3: n皇后问题是一个经典的回溯算法问题,可以用Java实现。 首先,我们需要定义一个二维数组来表示棋盘,棋盘的大小为n×n,其中n是皇后的个数。我们可以将棋盘的每个位置初始化为0,表示该位置没有放置皇后,如果该位置放置了皇后,则置为1。 接下来,我们使用递归的方式来寻找合适的解。首先,我们从第一行开始遍历棋盘,对于每一行我们都遍历该行的每一个位置。对于每个位置,我们检查是否满足以下条件: 1. 当前位置没有其他皇后威胁到它的位置(即没有其他皇后在同一行、同一列、同一对角线上); 2. 如果满足条件1,则将当前位置置为1,表示在该位置放置了皇后; 3. 继续递归调用求解函数,对下一行继续进行查找; 4. 如果下一行没有找到合适的位置,说明当前位置不可行,将当前位置置为0,回溯到上一步继续寻找其他位置。 在递归调用过程中,我们还需要记录所有合适的解。当我们找到一组解后,将该解存储起来,在递归回溯到上一步时,继续寻找其他解。 最后,我们可以输出所有的解,即将存储解的数据结构打印出来即可。 总的来说,用Java实现n皇后问题求解就是通过回溯算法来寻找可行解,并将找到的解存储起来并输出。具体实现中需要考虑如何判断当前位置是否可行、如何寻找下一行的合适位置等问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值