1

我最近在这里发帖,但我再次需要帮助(我很新) - 2bc cosA in 和 sin B / b = sin A / a 这是我的代码:

import java.util.Scanner;

public class CosineLaw {

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    boolean sss = new Boolean(true);

    System.out.println("Are you working with an SSS?[y/n]");
    char askingSSS =keyboard.next().charAt(0);  
    if(askingSSS == 'y'){
        System.out.println("Please enter an a side value:");
        double a = keyboard.nextDouble();
        System.out.println("Please enter a b side value:"); 
        double b = keyboard.nextDouble();
        System.out.println("Please enter a c side value:");
        double c = keyboard.nextDouble();
            double answerA = Math.toDegrees(Math.acos((b*b+c*c-a*a) / (2*b*c)));
            double answerB = Math.toDegrees(Math.acos((c*c+a*a-b*b) / (2*c*a)));
            double answerC = Math.toDegrees(Math.acos((b*b+a*a-c*c) / (2*b*a)));
                System.out.println("A: " + answerA);
                System.out.println("B: " + answerB);
                System.out.println("C: " + answerC);

    }else if(askingSSS == 'n'){
        System.out.println("Are you working with SAS?[y/n]");
        char askingSAS =keyboard.next().charAt(0);
        System.out.println("Please enter the 2 sides and 1 angle:");
        char twoSideOneAngle =keyboard.next().charAt(0);
        if(askingSAS == 'y'){
            System.out.println("Please enter an angle for a:");
            double a = keyboard.nextDouble();
            System.out.println("Please enter a side value for b:");
            double b = keyboard.nextDouble();
            System.out.println("Please enter a side value for c:");
            double c = keyboard.nextDouble();
                double answerA = Math.cos(Math.toDegrees(b*b+c*c-2*b*c)*(a));
                double answerB = Math.sin(Math.toDegrees(sin b/b = sin a/a));
                double answerC =  (b*b+a*a-c*c) / (2*b*a);  
                    System.out.println("A: " + answerA);
                    System.out.println("B: " + answerB);
                    System.out.println("C: " + answerC);
            }
        }
}

}

4

2 回答 2

2

看起来您将所有内容都放入了 cos 和 sin 中。首先简化方程。

a² = b² + c² - 2bc cosA 变为 a = (b² + c² - 2bc cosA)^(1/2)。然后你可以从内到外工作。

在伪代码中:

answer = cos(A)
answer = answer * 2 * b * c
answer += b*b
answer += c*c
answer = sqrt(answer)

同样,如果您在 sinB/b = sinA/a 中寻找 B,则变为 B = arcsin(b*sinA/a):

answer = sin(A)
answer = b * answer
answer = answer/a
answer = arcsin(answer)

此外,您可能想查看您的一些逻辑。

else if(askingSSS == 'n'){
    System.out.println("Are you working with SAS?[y/n]");
    char askingSAS =keyboard.next().charAt(0);
    if(askingSAS == 'y'){
        // I change code here
        System.out.println("Please enter the 2 sides and 1 angle:");
        char twoSideOneAngle =keyboard.next().charAt(0);
        System.out.println("Please enter an angle for a:");
        double a = keyboard.nextDouble();
        System.out.println("Please enter a side value for b:");
        double b = keyboard.nextDouble();
        System.out.println("Please enter a side value for c:");
        double c = keyboard.nextDouble();
            double answerA = Math.cos(Math.toDegrees(b*b+c*c-2*b*c)*(a));
            double answerB = Math.sin(Math.toDegrees(sin b/b = sin a/a));
            double answerC =  (b*b+a*a-c*c) / (2*b*a);  
                System.out.println("A: " + answerA);
                System.out.println("B: " + answerB);
                System.out.println("C: " + answerC);
        }
    }

这会更有意义,因为您正在检查的角色现在是回答相关问题的角色。

于 2013-10-02T01:19:40.390 回答
1
double answerB = Math.sin(Math.toDegrees(sin b/b = sin a/a));

Math.toDegrees 在技术上应该在外面:

double answerB = Math.toDegrees(Math.sin(sin b/b = sin a/a));

sin b/b 也与 1 相同...所以我认为您的方程式没有意义...也许 sin(b)/b ....

double answerB = a*(Math.sin(b)/Math.sin(a));

试试看,看看是否有效。

最新编辑:代码说 sin b/b,我误解了。代码应该是:

double answerB = answerA*(Math.sin(Math.toRadians(b))/Math.sin(Math.toRadians(a)));

我假设“answerA”与 A(侧面)相同。

于 2013-10-02T01:18:08.713 回答