我试图编写一个以任意顺序取三角形三边的程序,按升序排列它们(a,b,c),然后告诉用户它是什么类型的三角形和区域。但是,我无法弄清楚我的代码出了什么问题,因为它一直在为我的isValid方法获取错误的true / false值。即使双方不构成一个三角形,它仍然会像isValid方法返回true那样继续进行。有什么建议?感谢。
package javaapplication1;
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter three numbers:");
double a = input.nextDouble();
double b = input.nextDouble();
double c = input.nextDouble();
if (a > b)
{
double temp = a;
a = b;
b = temp;
}
if (b > c)
{
double temp = b;
b = c;
c = temp;
}
if (a > b)
{
double temp = a;
a = b;
b = temp;
}
double area = area(a, b, c);
boolean isValid = isValid(a, b, c);
String type = type(a, b, c);
if (isValid = true)
{
System.out.println("This triangle is " + type);
System.out.printf("The area is %.2f", area, "\n\n");
}
else
{
System.out.print("Invalid triangle");
}
}
public static boolean isValid(double a, double b, double c)
{
if (a + b > c)
{
return true;
}
else
{
return false;
}
}
public static double area(double a, double b, double c)
{
double s = (a + b + c)/2.0;
double area = Math.sqrt(s * (s - a) * (s - b) * (s - c));
return area;
}
public static String type(double a, double b, double c)
{
String type;
if (a == c)
{
type = "equilateral";
} else if (a == b || b == c)
{
type = "isosceles";
} else
{
type = "scalene";
}
return type;
}
}
答案 0 :(得分:1)
问题似乎在这里(除非是拼写错误):
if (isValid = true)
您将true
分配给isValid
,因此if
语句中的条件始终为真。
比较原始值的正确方法是使用两个等号:
if (isValid == true)
然而,对于布尔人来说,这是多余的。测试布尔值是否为真/假的最佳方法是使用布尔变量本身:
if (isValid)