Java代码为三角形区域返回0
我正在学习Java入门课程,我的任务是编写一个程序,它接受三角形的三条边,并返回类型和面积。根据赋值表,边必须是整数,因此测试它并得出与每种类型匹配的整数比率是一件痛苦的事情 不管怎样,我遇到的真正问题是,有时它给了我正确的区域,有时它没有。例如,6/8/10返回0的区域 有没有改进源代码的想法/一般提示?到目前为止,对我来说似乎有点像意大利面条,但我有点受限,因为我只能使用到目前为止我们在课堂上讨论过的东西Java代码为三角形区域返回0,java,geometry,joptionpane,Java,Geometry,Joptionpane,我正在学习Java入门课程,我的任务是编写一个程序,它接受三角形的三条边,并返回类型和面积。根据赋值表,边必须是整数,因此测试它并得出与每种类型匹配的整数比率是一件痛苦的事情 不管怎样,我遇到的真正问题是,有时它给了我正确的区域,有时它没有。例如,6/8/10返回0的区域 有没有改进源代码的想法/一般提示?到目前为止,对我来说似乎有点像意大利面条,但我有点受限,因为我只能使用到目前为止我们在课堂上讨论过的东西 package trianglesides; import javax.swing.*
package trianglesides;
import javax.swing.*;
/*
This program will receive three numbers from a user describing the lengths of
the sides of a triangle. It will return and display the type of triangle and
the area.
*/
public class triangle_Sides {
public static void main(String[] args) {
int side1 = Integer.parseInt(JOptionPane.showInputDialog
("Enter the integer length of side 1"));
int side2 = Integer.parseInt(JOptionPane.showInputDialog
("Enter the integer length of side 2"));
int side3 = Integer.parseInt(JOptionPane.showInputDialog
("Enter the integer length of side 3"));
int s = (side1 + side2 + side3)/2;
double area = Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
if (side1 >= (side2 + side3) ||
side2 >= (side1 + side3) ||
side3 >= (side1 + side2)) {
JOptionPane.showMessageDialog(null, "That's no triangle.");
}
else {
/*Equilateral*/
if ((side1 == side2) && (side2 == side3)) {
JOptionPane.showMessageDialog(null, "This is an equilateral triangle with an area of " + area);
}
/*Right and isosceles*/
else if ((side1*side1) == ((side2*side2) + (side3*side3)) ||
(side2*side2) == ((side1*side1) + (side3*side3)) ||
(side3*side3) == ((side2*side2) + (side1*side1))) {
if (side1 == side2 ||
side2 == side3 ||
side3 == side1){
JOptionPane.showMessageDialog(null, "This is right and isosceles triangle with an area of " + area);
}
else {
JOptionPane.showMessageDialog(null, "This is a right triangle with an area of " + area);
}
}
/*Obtuse and isosceles*/
else if ((side1*side1) > ((side2*side2) + (side3*side3)) ||
(side2*side2) > ((side1*side1) + (side3*side3)) ||
(side3*side3) > ((side2*side2) + (side1*side1))) {
if (side1 == side2 ||
side2 == side3 ||
side3 == side1){
JOptionPane.showMessageDialog(null, "This is obtuse and isosceles triangle with an area of " + area);
}
else {
JOptionPane.showMessageDialog(null, "This is an obtuse triangle with an area of " + area);
}
}
/*Acute and isosceles*/
else if ((side1*side1) < ((side2*side2) + (side3*side3)) ||
(side2*side2) < ((side1*side1) + (side3*side3)) ||
(side3*side3) < ((side2*side2) + (side1*side1))) {
if (side1 == side2 ||
side2 == side3 ||
side3 == side1){
JOptionPane.showMessageDialog(null, "This is acute and isosceles triangle with an area of " + area);
}
else {
JOptionPane.showMessageDialog(null, "This is an acute triangle with an area of " + area);
}
}
}
}
}
packagetrianglesides;
导入javax.swing.*;
/*
此程序将从用户处收到三个数字,描述
三角形的边。它将返回并显示三角形和三角形的类型
这个地区。
*/
公共类三角形边{
公共静态void main(字符串[]args){
int side1=Integer.parseInt(JOptionPane.showInputDialog
(“输入第1边的整数长度”);
int side2=Integer.parseInt(JOptionPane.showInputDialog
(“输入第2边的整数长度”);
int side3=Integer.parseInt(JOptionPane.showInputDialog
(“输入边3的整数长度”);
ints=(side1+side2+side3)/2;
双面积=数学sqrt(s*(s侧1)*(s侧2)*(s侧3));
如果(第1侧>=(第2侧+第3侧)||
侧2>=(侧1+3)||
侧3>=(侧1+侧2)){
showMessageDialog(null,“这不是三角形”);
}
否则{
/*等边*/
如果((side1==side2)和&(side2==side3)){
showMessageDialog(null,“这是一个面积为“+面积”的等边三角形);
}
/*右等腰*/
else if((side1*side1)=((side2*side2)+(side3*side3))||
(side2*side2)==((side1*side1)+(side3*side3))||
(side3*side3)==((side2*side2)+(side1*side1))){
if(side1==side2||
侧2==侧3||
侧3=侧1){
showMessageDialog(null,“这是一个面积为“+面积的直角等腰三角形);
}
否则{
showMessageDialog(null,“这是一个面积为“+面积”的直角三角形);
}
}
/*钝等腰*/
else if((side1*side1)>((side2*side2)+(side3*side3))||
(side2*side2)>((side1*side1)+(side3*side3))||
(side3*side3)>((side2*side2)+(side1*side1))){
if(side1==side2||
侧2==侧3||
侧3=侧1){
showMessageDialog(null,“这是一个面积为“+面积”的钝角等腰三角形);
}
否则{
showMessageDialog(null,“这是一个面积为“+面积”的钝角三角形);
}
}
/*急等腰肌*/
否则如果((边1*边1)<((边2*边2)+(边3*边3))||
(边2*边2)<((边1*边1)+(边3*边3))||
(side3*side3)<((side2*side2)+(side1*side1))){
if(side1==side2||
侧2==侧3||
侧3=侧1){
showMessageDialog(null,“这是面积为“+面积的锐角等腰三角形);
}
否则{
showMessageDialog(null,“这是一个面积为“+面积”的锐角三角形);
}
}
}
}
}
发生这种情况是因为变量s不能是整数类型
改变
int s = (side1 + side2 + side3)/2;
到
整数舍入将向下舍入一半。那不是你想要的。除以2.0
,将结果改为double
Math.sqrt(s*(s-side1)*(s-side2)*(s-side3))
您正在使用整数算术进行此乘积运算,它将环绕而不是丢失精度。那不是你想要的。还有,这是
对于一系列比较,您可以先对边进行排序,这样做会更好。除此之外,在我看来,它是相当合理的代码。您可能会考虑将“读取输入和执行输出”部分与“执行计算”部分分开,以便您可以更轻松地调试和测试计算。抱歉,我无法让您满意。谢谢,我真傻。
int s = (side1 + side2 + side3)/2;
Math.sqrt(s*(s-side1)*(s-side2)*(s-side3))