解一元二次方程-Java语言实现

2023-11-19

前言

高考完的那个暑假我就开始自学C语言。那时候通过看视频和《C primer plus》写了一个解一元二次方程的程序,从此走上了吊打大学同班同学的路……

但是那次是用C语言写的,如今白云苍狗,我已经不是曾经的那个我了,但我还是一如既往的废物……Java已是我现在主要使用开发语言,能用Java就绝不用其他语言。

所以今天我用Java语言实现了当年的解一元二次方程的程序,思想还是以前的思想,只不过是语法不一样罢了,换汤不换药。

思想

授人以鱼不如授人以渔。首先先说一下写这个程序的需求和思想。

需求:当我们遇到一元二次方程ax²+bx+c=0(a≠0)时,只需要在程序中输入a,b,c的值,运行程序就能得到一元二次方程的两个解,当无解时,程序也会告诉我们程序无解。

思想:思想就是用求根公式法。
在这里插入图片描述
所以就是当我们输入a,b,c的值时,程序会先计算△(delta)的值。如果delta大于0,就利用求根公式计算方程的两个解;如果delta=0,也还是利用求根公式计算方程的解,但是输出的时候是x1=x2=[-b+√(bb-4ac)]/(2a),就是只输出一个值;当delta<0,则方程无解,不需要任何计算。

Java实现

//首先定义一元二次方程的两个解,数据类型要用float或者double
double x1;
double x2;
//然后定义一元二次方程的3个系数,a,b,c
int a;
int b;
int c;
//计算跟delta,x1,x2的值
//x1=(-b+sqrt(b*b-4*a*c))/2a
//x2=(-b-sqrt(b*b-4*a*c))/2a
//这里我们用到Math.sqrt(),这个是用来计算开平方的
double delta=b*b-4*a*c;
x1=(-b+Math.sqrt(delta))/(2*a);
x2=(-b-Math.sqrt(delta))/(2*a);
//输入a,b,c的值
System.out.println("请依次输入一元二次方程a,b,c的值");
Scanner sc=new Scanner(System.in);
a=sc.nextInt();
b=sc.nextInt();
c=sc.nextInt();
//判断delta的值
if(delta==0){
        //这里有个初学者很容易犯错的地方,就是把==写成=
        //=表示的是赋值,==表示的是相等
        //△等于0时,方程只有一个解
        System.out.println("此方程有两个相同的解");
        System.out.println("x1=x2="+x1);
 }

 else if(delta>0){
        //△>0时,方程有两个解
        //x1=(-b+sqrt(b*b-4*a*c))/2a
        //x2=(-b-sqrt(b*b-4*a*c))/2a
        System.out.println("此方程有两个解");
        System.out.println("x1="+x1);
        System.out.println("x2="+x2);
 }
 else
        System.out.println("此方程无解");

程序完成!这是个很简单的程序,适合初学者练手,熟悉一下编程语言的基础语法,同时锻炼开发编程思维。

踩坑

这里还有一个坑,就是定义x1,x2的时候是可以用float
但是如果你定义的时候用了float,那么在计算x1,x2的时候就要用到强制类型转换
double的精度比float更高,计算结果显示小数点后的位数更多
在这里插入图片描述
如果用float定义x1,x2,计算的时候却不用强制类型转换,那么编译器会报错
在这里插入图片描述

为什么会报错呢?x1,x2都是float型,delta也float型,怎么会出问题呢?是这样子的,我们这里使用了Math.sqrt()方法,这个方法计算出的结果是double类型,而x1,x2是float类型,低精度不能转成高精度,所以需要在前面加(float),把double转成精度更低的float。
在这里插入图片描述
在没有看源码之前,这只是我的猜测,当我看了JDK源码以后就证明了我的猜测是正确的,我可真是个小机灵鬼呢,哈哈哈……

结尾

上面是我写的完整程序。至此,我们的程序的写完啦。觉得写得还可以的小伙伴可以点点收藏哦~

import java.util.Scanner;
public class demo {
    public static void main(String[] args) {
        //一元二次方程的两个解
        double x1;
        double x2;

        //一元二次方程的三个系数
        //ax^2+bx+c=0
        int a,b,c;

        //输入a,b,c的值
        System.out.println("请依次输入一元二次方程a,b,c的值");
        Scanner sc=new Scanner(System.in);
        a=sc.nextInt();
        b=sc.nextInt();
        c=sc.nextInt();

        //delta是根

        double delta=b*b-4*a*c;

        //x1=(-b+sqrt(b*b-4*a*c))/2a
        //x2=(-b-sqrt(b*b-4*a*c))/2a
        x1=(-b+Math.sqrt(delta))/(2*a);
        x2=(-b-Math.sqrt(delta))/(2*a);

        //判断delta的值
        if(delta==0){
            System.out.println("此方程有两个相同的解");
            System.out.println("x1=x2="+x1);
        }

        else if(delta>0){
            System.out.println("此方程有两个解");
            System.out.println("x1="+x1);
            System.out.println("x2="+x2);
        }

        else
            System.out.println("此方程无解");

    }
}

本文章选自微信公众号onceCode
如果大家喜欢喜欢的话欢迎关注公众号
附上微信公众号链接
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解一元二次方程-Java语言实现 的相关文章

随机推荐

  • 医疗器械相关展会

    1 CMEF中国国际医疗器械博览会 始创于1979年 每年春秋两届 已成为亚太地区最大的医疗器械及相关产品 服务展览会
  • 机器学习实战项目总结

    1 预测模型新项目模板 机器学习是针对数据进行自动挖掘 找出数据的内在规律 并应用这个规律来预测新数据 一个很好的实践机器学习项目的方法 使用从UCI机器学习仓库链接 获取的数据集开启一个机器学习项目 分类或回归模型的机器学习项目可以分成以
  • Linux Nginx配置静态html

    Linux Nginx配置静态html 第一次接触服务器时 对项目部署和域名部署感觉很新鲜 有意思 很神奇 开始学习Nginx配置静态的HTML 使用工具 MobaXterm CHS exe 第一步 将html的项目放入服务器 将自己做好的
  • 【华为OD机试真题 JAVA】信道分配

    JS版 华为OD机试真题 JS 信道分配 标题 信道分配 时间限制 1秒 内存限制 262144K 语言限制 不限 算法工程师小明面对着这样一个问题 需要将通信用的信道分配给尽量多的用户 信道的条件及分配规则如下 1 所有信道都有属性 阶
  • origin中把多个拟合曲线放在一张图

    双击其中一个 或者New一个graph 这里直接双击其中一个图 右键 找到layer contents 可以看到 一个scatter配一个polynomial fit line 把剩下的B C D对应的点和拟合曲线添加进去 注意 这里的pl
  • 01、Java并发 Java ExecutorService

    ExecutorService 是 Java java util concurrent 包的重要组成部分 是 Java JDK 提供的框架 用于简化异步模式下任务的执行 一般来说 ExecutorService 会自动提供一个线程池和相关
  • 程序员如何做副业?35岁前,千万别让死工资绊住你赚钱的步伐

    近年来互联网行情下降 好多人都在思考要不要搞个副业来抵御风险 这不又来事了 这两天又爆了互联网大裁员 继阿里 向社会输送人才 之后 京东又搞了个 毕业礼 整的小伙伴们人心惶惶 副业的关注度又一波升级 那今天我们就来聊聊 程序员做副业这件事
  • cef编译

    按照大神的一遍过 具体过程非常详细 链接https kefong blog csdn net article details 119908780 spm 1001 2101 3001 6650 2 utm medium distribute
  • 《C++ Primer(第5版)》学习笔记(第5章)

    第5章 语句 C 提供了条件执行语句 循环语句和用于中断当前控制流的跳转语句 本章将具体介绍这些语句 5 1 简单语句 空语句 最简单的语句是空语句 只有一个单独的分号 如在程序的某个地方语法上需要一条语句但是逻辑上不需要 此时应该使用空语
  • 透过Python 将接收邮件邮件进行分类统计

    工作的需要自行学习了Python的一些功能 将所学的经验在这里分享给大家 文章目录 目录 文章目录 前言 一 环境准备 二 使用步骤 1 引入库 2 读入数据 总结 前言 工作中我们可能会透过邮件 让其他公司收集资料 在学会Python之前
  • 全网最最最轻量级检测网络 yolo-fastest 快速上手

    文章目录 0x01 Yolo Fastest 0x02 Prepare step1 clone step2 make step3 run darknet 0x03 Train step1 获取权重文件 step2 准备数据集 step3 修
  • 成功上岸字节35K,技术4面+HR面,耗时20天,真是不容易

    这次字节的面试 给我的感触很深 意识到基础的重要性 一共经历了五轮面试 技术4面 HR面 下面看正文 本人自动专业毕业 压抑了五个多月 终于鼓起勇气 去字节面试 下面是我的面试过程 很多面试题 都是靠记忆写的 希望能帮助到大家 致那些努力的
  • 初步认识操作系统(Operator System)

    操作系统 一 冯诺依曼体系结构 内存的重要作用 二 操作系统的概念 三 设计操作系统的目的 三 操作系统在计算机体系中的定位 四 操作系统是如何进行管理的 一 冯诺依曼体系结构 在众多计算机相关的书籍中 不得不提的就是冯诺依曼体系结构 冯诺
  • 无需魔法三分钟上线Midjourney应用,【附源码】【示例】

    ps 我是标题党 目前还没见过三分钟完成任务的 三分钟只能打通Midjourney接口 我花了一天时间接入应用哈哈哈 首先 我要感谢laf赞助我 让我可以免费使用Midjourney进行开发和测试 来自白嫖党的快乐 其次 我要感谢白夜 米开
  • Linux驱动编程(总线设备驱动模型)

    一 驱动编写的3种方法 1 传统写法 使用哪个引脚 怎么操作引脚 都写死在代码中 最简单 不考虑扩展性 可以快速实现功能 修改引脚时 需要重新编译 2 总线设备驱动模型 引入 platform device platform driver
  • 最近opencv又报了啥错(一)

    前言 别骂了别骂了 太久没打python 手贼生 最近在搞opencv和一些ocr 报了一堆错 有些是python的原生错误 有的是opencv的 有的是我nt 就全部记录一下吧 1 bad argument type for built
  • 端口监控信息

    netstat nlptu grep 8080 一 0 0 0 0 8080 代表8080端口 对内网和外网都是开放的 tcp 0 0 0 0 0 0 8080 0 0 0 0 LISTEN 123941 java 二 查看网卡的代码 da
  • KVM中使用usb设备

    进来学习usb驱动 看到网上都在分析usb skeleton c的驱动框架 就想对其调试一下 看一下其函数调用流程 要想调试usb skeleton 首先需要kvm能够探测到usb设备 其次 在kvm中编译usb skeleton c 最后
  • 深度学习要学多久?半年能入门深度学习吗?

    深度学习的学习时间因个人背景 目标和学习方法而异 不同人可能需要不同的时间来掌握深度学习 深度学习要学多久 通常情况下 入门深度学习可能需要几个月的时间 如果你已经有相关背景知识 学习进度可能会更快 以下是一些因素 可以影响学习深度学习所需
  • 解一元二次方程-Java语言实现

    前言 高考完的那个暑假我就开始自学C语言 那时候通过看视频和 C primer plus 写了一个解一元二次方程的程序 从此走上了吊打大学同班同学的路 但是那次是用C语言写的 如今白云苍狗 我已经不是曾经的那个我了 但我还是一如既往的废物