Java-需要公式方面的帮助吗

Java-需要公式方面的帮助吗,java,math,trigonometry,jcreator,Java,Math,Trigonometry,Jcreator,我最近在这里发了帖子,但我需要帮助(我是新来的)我得到了第一部分(SSS),但这是我需要帮助的第二部分,我不知道如何将a²=b²+c²-2bc cosA放入,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); boo

我最近在这里发了帖子,但我需要帮助(我是新来的)我得到了第一部分(SSS),但这是我需要帮助的第二部分,我不知道如何将a²=b²+c²-2bc cosA放入,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);
            }
        }
}
}

Math.toDegrees从技术上讲应该位于外部:

double answerB = Math.toDegrees(Math.sin(sin b/b = sin a/a));
而且sinb/b和1是一样的。。。所以我认为你的方程没有意义。。。也许是罪(b)/b

试试看,看是否有效

最新编辑:代码说sinb/b,我误解了。代码应为:

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

我想“answerA”和A(侧面)是一样的。

看起来你把一切都放在了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=arcin(B*sinA/a):

此外,您可能还想回顾一下您的一些逻辑

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

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

sinB/b与one不是一回事。B是指一个角度,其中as B是边长。此外,即使B和B相同(即10),答案也不是1。(以sin(10)/10为例),它可以工作,但我使用的SAS是a=49度,b=5度,c=7度。它给了我49.26分,而不是45.4分\这次我得到了5.327398075846185但是Math.sin应该期待Math.toRadians。。。。而不是数学。toDegrees(),试试Math.toRadians。尝试新的编辑?谢谢,但是对于答案b,我仍然在(sin b/b=sin a/a)之间得到错误;就编程语言而言,您所做的工作不起作用是赋值运算符,C#无法“解”方程,你需要自己对变量进行隔离,就像在我的答案开头一样。我回答的第二部分只是告诉您应该在if语句中移动两行。我没有改变其他任何事情。
answer = cos(A)
answer = answer * 2 * b * c
answer += b*b
answer += c*c
answer = sqrt(answer)
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);
        }
    }