新手提问,java的一个求三角形面积的程序结果不对,希望高手帮忙解答一下
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SanJiao {
public static void main(String[] args) {
System.out.print("请输入三角形三条边,用逗号分割:");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = null;
try {
s = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
String[] arr = s.split(",");
int a = Integer.parseInt(arr[0]);
int b = Integer.parseInt(arr[1]);
int c = Integer.parseInt(arr[2]);
if(a+b>c && b+c>a && a+c>b) {
System.out.println("可以构成三角形");
//半周长
double ss = (a + b + c) / 2;
//面积
double sss = Math.sqrt(ss*(ss-a)*(ss-b)*(ss-c));
System.out.println("面积为:"+sss);
} else {
System.out.println("不可以构成三角形!");
}
}
}
java中求三角形的面积可以通过海伦公式来求解,具体示例代码如下:
public class Demo3 { public static void main(String[] args) { //三边长 float a = 3; float b = 4; float c = 5; float s;//面积 s = (float)((1.0/4.0)*Math.sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a))); System.out.println(s); }} 海伦公式是利用三角形的三条边的边长直接求三角形面积的公式,公式为1/4*sqrt[(a+b+c)*(a+b-c)*(a+c-b)*(b+c-a)]。
的时候你只是给这个方法传了一个参数用来哦计算p的值 但是实际上你并没有构造方法 或者说你并没有给实例变量x y z 进行赋值。所以系统调用默认的构造方法,x y z 都为0. 因此再返回Math.sqrt(p*(p-x)*(p-y)*(p-z));
的时候里面的x y z均为0 所以是6<<<<4 1296开方以后还是36 ,再你程序的基础上略作修改,把构造方法放到public double getp(int x,int y,int z)
也就是改为public double getp(int x,int y,int z)
{
this.x=x;
this.y=y;
this.z=z;
double p;
p=(x+y+z)/2;
System.out.println("p="+p);
return p;
}
这样就可以了
你自己调试下,不明白喊我,其实就是不断测试,你觉得那里出问题了,就在那里加个打印语句 啊然后一点点测试
你对Sanjiao1 类中的x,y,z没有初始化 所以 他们都是 0 ,getp(int x,int y,int z) 这个方法 里的 x,y,z 是 局部变量, 计算后 P=6,所以
p*(p-x)*(p-y)*(p-z)=1296.0
所以 Math.sqrt(1296)=6.0
修改方法如下
public double getp(int x,int y,int z)
{
this.x=x;
this.y=y;
this.z=z;
double p=0;
return p=(x+y+z)/2;
}
给分吧~
你这个方法写对了么?面积这样算?
这里p是周长,如果按下面的赋值3,4,5
那么p为3+4+5/2=6,s按你下面的公式算出来确实是36,楼上不懂不要瞎说,构造默认是无参的,不写没关系~
public double getmianji(double p)
{
return Math.sqrt(p*(p-x)*(p-y)*(p-z));
}
你的xyz都没有初始化呢,你是想让他们分别是3.4.5
但实际上他们全是0呢
你没有代码改变他们的值
相关视频
新手初学java问题?
words的长度只有2,下标0和1才有值,2肯定报错,下标越界。你的编译器肯定报错 Java.lang.ArrayIndexOutOfBoundsException 下次记得把错误发出来。你应该把你的报错信息,一起发出来。会调试代码吗?这个一定要会,自己动手调试远比问别人快得多。学的多
针对“Java编程领域”的高效提问指南
写代码:示例:“帮初学者写一个Java程序,计算圆的面积,要求包含注释和异常处理。”学知识:示例:“用做饭的流程比喻Java中的多线程,给编程新手讲解线程同步的概念。”做决策:示例:“预算500元,推荐3个Java编程课程平台,对比课程大纲和用户评价。”七、避坑指南避免模糊:错误示例:“那个框架怎么...
java问题求解!!请高手帮忙啊!我是新手!!
或者有着缺省值(当前路径).或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath),或者在运行的时候传参数给虚拟机.通过这段文字,你就知道,为什么javac编译通过了,但是java命令却出错NoClassDefFoundError(类定义没找到)的原因了。就是环境变量classpath(类路径)没有设置正确,使得JAVA虚拟...
JAVA新手请教几个小问题,希望高手作答,小弟不甚感谢!急~!!!_百度知...
√Java编译器使用文件系统来保存程序包。×Java源程序文件中是不区分字母的大小写的。×Java applet不能够存取客户机磁盘上的文件。√Java可以用来进行多媒体及网络编程。×Java applet不能够存取客户机磁盘上的文件 √applet可以运行在浏览器中 ×每个applet上只能使用一种布局管理器。×一个Applet编译后的...
Java新手问问题!请用for循环,while以及do while循环帮我写一个点餐...
"); Scanner scan=new Scanner(System.in); double sum=0d; double money=scan.nextDouble(); sum+=money; System.out.println("本次消费:"+money+"元"); System.out.println("请问您是否需要继续消费?(输入1,表示继续消费)"); int isContinue=scan.nextInt(); ...