Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java代码为三角形区域返回0_Java_Geometry_Joptionpane - Fatal编程技术网

Java代码为三角形区域返回0

Java代码为三角形区域返回0,java,geometry,joptionpane,Java,Geometry,Joptionpane,我正在学习Java入门课程,我的任务是编写一个程序,它接受三角形的三条边,并返回类型和面积。根据赋值表,边必须是整数,因此测试它并得出与每种类型匹配的整数比率是一件痛苦的事情 不管怎样,我遇到的真正问题是,有时它给了我正确的区域,有时它没有。例如,6/8/10返回0的区域 有没有改进源代码的想法/一般提示?到目前为止,对我来说似乎有点像意大利面条,但我有点受限,因为我只能使用到目前为止我们在课堂上讨论过的东西 package trianglesides; import javax.swing.*

我正在学习Java入门课程,我的任务是编写一个程序,它接受三角形的三条边,并返回类型和面积。根据赋值表,边必须是整数,因此测试它并得出与每种类型匹配的整数比率是一件痛苦的事情

不管怎样,我遇到的真正问题是,有时它给了我正确的区域,有时它没有。例如,6/8/10返回0的区域

有没有改进源代码的想法/一般提示?到目前为止,对我来说似乎有点像意大利面条,但我有点受限,因为我只能使用到目前为止我们在课堂上讨论过的东西

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))