我们有一个界面Rtriangle。
public interface Rtriangle {
int getApexX1();
int getApexY1();
int getApexX2();
int getApexY2();
int getApexX3();
int getApexY3();
}
有课
public final class RtriangleProvider {
public static Rtriangle getTriangle() {
return new Rtriangle() {
@Override
public int getApexY3() {
return 1;
}
@Override
public int getApexY2() {
return 1;
}
@Override
public int getApexY1() {
return 1;
}
@Override
public int getApexX3() {
return 1;
}
@Override
public int getApexX2() {
return 1;
}
@Override
public int getApexX1() {
return 1;
}
};
}
}
需要编写一个检查矩形三角形的测试。如果没有,应输出错误。 我写了一个样本测试,但事实并非如此。
public class TriangleTest {
@Test
public void testGetTriangle() {
Rtriangle rt = RtriangleProvider.getTriangle();
int x1 = rt.getApexX1();
int x2 = rt.getApexX2();
int x3 = rt.getApexX3();
int y1 = rt.getApexY1();
int y2 = rt.getApexY2();
int y3 = rt.getApexY3();
int side1 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
int side2 = (x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2);
int side3 = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3);
boolean hypo1 = (side1 == (side2 + side3));
boolean hypo2 = (side2 == (side1 + side3));
boolean hypo3 = (side3 == (side1 + side2));
boolean result = hypo1 || hypo2 || hypo3;
if (!result) {
throw new AssertionError();
}
}
}
也许我没有正确计算派对。 请帮助。
答案 0 :(得分:0)
您可以在这里检查三角形是否满足pythagoras theorem。
你在这做同样的事情。
您应该能够创建不同的点(3组坐标)。然后你可以使用这个逻辑。
在您的情况下,所有三个点都相同(1,1)
。这不是三角形。您可以尝试以下
现在你必须聪明。
boolean result = hypo1 || hypo2 || hypo3; // by pythagoras theorem only one
// should true
不能全部都是true
更改
boolean result = hypo1 || hypo2 || hypo3;
要
boolean result=false;
boolean[] all = { hypo1, hypo2,hypo3 };
boolean result=false;
for (boolean a : all) {
for (boolean b: all) {
for(boolean c:all){
result =(a^b^c) && !(a&&b&&c);
}
}
}
为什么?
boolean result = hypo1 || hypo2 || hypo3;// this will give you true
// for all 3 variables are true
这是不正确的。你必须放弃false
。