用java面向对象思想求三角形的面积和周长
来源:互联网 发布:蚕丝被淘宝评价 编辑:程序博客网 时间:2024/05/16 06:56
问题:用户输入三角形的三条边,当三角形不成立的时候,给用户重新再次输入的时候,假设第二次输入正确,因为使用了函数嵌套,那么会出现递归的问题?
最终解决方法:强制抛出一个异常,就可以解决这个问题
以下是我的代码:
domain类
package com.itxiaojia.domain;//实体类public class Triangle {//三角形的三条边private double side1;private double side2;private double side3;public void setSide1(double side1){this.side1=side1;}public double getSide1(){return side1;}public void setSide2(double side2){this.side2=side2;}public double getSide2(){return side2;}public void setSide3(double side3){this.side3=side3;}public double getSide3(){return side3;}}
工具类,主要是验证数据
package com.itxiaojia.utils;import java.util.regex.*;/** * 检查工具类 * @author wu * */public class Check {/** * 判断是否为三角形 * @param a1 * @param a2 * @param a3 * @return */public static boolean isTriangle(double a1,double a2,double a3){if((a1+a2)>a3 && (a1+a3)>a2 && (a2+a3)>a1){return true; //如果符合三角形成立的条件,返回true}return false;}//判断用户输入是否是数字字符串public static boolean isNumber(String str){Pattern p=Pattern.compile("^\\d+[0-9 .]*");Matcher m=p.matcher(str);if(!m.matches()){return false; //如果用户输入的不是数字,返回false}return true;}}
包含main函数的类
package com.itxiaojia.test;import java.util.Scanner;import com.itxiaojia.utils.Check;public class Demo1 {public static void main(String[] args){show();}/** * 显示界面 * @throws Exception */public static void show(){System.out.println("*************************************\n" +"***需求: 用户输入三角形的三条边,求其周长和面积***\n************************************");Scanner scan=new Scanner(System.in);System.out.println("请输入三角的第一条边:");String str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a1=Double.parseDouble(str);//第二条边System.out.println("请输入三角形的第二条边:");str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a2=Double.parseDouble(str);//第三条边System.out.println("请输入三角形的第三条边:");str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a3=Double.parseDouble(str);//判断三角形是否成立while(!Check.isTriangle(a1, a2, a3)){System.out.println("你输入的三条边不符合三角形成立的条件\n请重新开始输入:");show();}System.out.println("该三角形的周长为:"+getPerimeter(a1,a2,a3)+" 面积为:"+getArea(a1,a2,a3));}/** * 三角形的周长 * @param a1 * @param a2 * @param a3 * @return */public static double getPerimeter(double a1,double a2,double a3){return a1+a2+a3;}/** * 三角形的面积 * @param a1 * @param a2 * @param a3 * @return */public static double getArea(double a1,double a2,double a3){double d=(a1+a2+a3)/2;return Math.sqrt(d*(d-a1)*(d-a2)*(d-a3));}}
以下是运行后输出结果截图
这个是一次性并且值正常的结果
下面这个是问题,当输出三角形的面积和周长的时候并没有结束,而是进入了递归
解决方法:1,试过用return;但没有效果
2,通过抛出一个异常强制结束递归
最初想到在show方法最后一行加上return;但是由于采用的递归,所以没有达到我要的效果。如下:
public static void show(){System.out.println("*************************************\n" +"***需求: 用户输入三角形的三条边,求其周长和面积***\n************************************");Scanner scan=new Scanner(System.in);System.out.println("请输入三角的第一条边:");String str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a1=Double.parseDouble(str);//第二条边System.out.println("请输入三角形的第二条边:");str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a2=Double.parseDouble(str);//第三条边System.out.println("请输入三角形的第三条边:");str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a3=Double.parseDouble(str);//判断三角形是否成立while(!Check.isTriangle(a1, a2, a3)){System.out.println("你输入的三条边不符合三角形成立的条件\n请重新开始输入:");show();}System.out.println("该三角形的周长为:"+getPerimeter(a1,a2,a3)+" 面积为:"+getArea(a1,a2,a3));return;}
运行结果如下图,显然没有达到要求
后来想到了这个方法,也就是可以抛出一个异常来结束后面的代码执行。只要修改两个地方:第1个地方是在main方法中:
public class Demo1 {public static void main(String[] args){try {show();} catch (Exception e) {}}
第2个地方是在show方法中:
public static void show() throws Exception{System.out.println("*************************************\n" +"***需求: 用户输入三角形的三条边,求其周长和面积***\n************************************");Scanner scan=new Scanner(System.in);System.out.println("请输入三角的第一条边:");String str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a1=Double.parseDouble(str);//第二条边System.out.println("请输入三角形的第二条边:");str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a2=Double.parseDouble(str);//第三条边System.out.println("请输入三角形的第三条边:");str=scan.nextLine();while(!Check.isNumber(str)){System.out.println("你输入的格式不正确,请重新输入:");str=scan.nextLine();}double a3=Double.parseDouble(str);//判断三角形是否成立while(!Check.isTriangle(a1, a2, a3)){System.out.println("你输入的三条边不符合三角形成立的条件\n请重新开始输入:");show();}System.out.println("该三角形的周长为:"+getPerimeter(a1,a2,a3)+" 面积为:"+getArea(a1,a2,a3));throw new Exception(); //强制退出递归}
最终运行的结果为:
1 0
- 用java面向对象思想求三角形的面积和周长
- js面向对象思想|三角形和矩形的周长面积
- C++实现计算三角形面积和周长(利用面向对象的程序设计思想)
- C#求三角形的周长和面积
- 用面向对象方法实现求圆和椭圆的周长与面积
- 简单类与对象 求矩形 三角形 圆的周长和面积
- 三角形的周长和面积
- 求三角形面积 周长
- 两个类求三角形的面积和周长
- 4-1设计求三角形周长和面积的类
- 求矩形的周长和面积【Java】
- java求三角形面积以及周长---封装
- JAVA--第五周实验--任务1--封装一类三角形对象Triangle,并实现一些求周长求面积的功能。
- 三角形周长和面积
- 三角形周长和面积
- 定义一个三角形类Ctriangle,求三角形面积和周长。
- 计算三角形的周长和面积
- java-求矩形(长方形)的周长和面积案例
- 左式堆的简单实现(C语言描述)
- poj 2195 最大权匹配
- Swing界面组件的通用属性
- 设备电量监测原理
- 第七届蓝桥杯C/C++省赛B组真题解析与答案
- 用java面向对象思想求三角形的面积和周长
- leetcode 53
- 设计模式之简单工厂模式(整理笔记)
- java编程之泛型(三)
- MFC编个对话框,能够实时显示摄像头捕捉的镜头
- 卷积滤波器如何提取图像特征
- 【p1162-填充颜色】解题记录
- 剑指offer-倒序打印链表
- Linux中有关磁盘空间的命令