Arcsine不会更改Java中变量的值

Arcsine不会更改Java中变量的值,java,double,trigonometry,Java,Double,Trigonometry,为了解决我的问题,我浏览了很多网站。我也试着在Java中查找任何YT或其他关于trig的视频,但什么也找不到。(我是一个noob,所以我也不总是了解大多数网站所指的一切) 不管怎么说,我正试图制作一个简单的程序来计算斯内尔定律的部分内容(我知道有些网站可以这样做)。但是arc sine似乎根本不会影响我的变量值 代码如下: import java.util.Scanner; public class trig_functions_test { public static void ma

为了解决我的问题,我浏览了很多网站。我也试着在Java中查找任何YT或其他关于trig的视频,但什么也找不到。(我是一个noob,所以我也不总是了解大多数网站所指的一切)

不管怎么说,我正试图制作一个简单的程序来计算斯内尔定律的部分内容(我知道有些网站可以这样做)。但是arc sine似乎根本不会影响我的变量值

代码如下:

import java.util.Scanner;

public class trig_functions_test {
    public static void main(String[] args) {
        Scanner HumanInput = new Scanner (System.in);
        double n1, n2, Oi, OR;
        System.out.println("Enter the first medium's index of refraction.");
        n1 = HumanInput.nextDouble();
        System.out.println("Enter the second medium's index of refraction.");
        n2 = HumanInput.nextDouble();
        System.out.println("Enter the angle of incidence.");
        Oi = HumanInput.nextDouble();
        System.out.println("Enter the angle of refraction.");
        OR = HumanInput.nextDouble();

        //if angle of refraction is the missing variable
        if (OR == 0) {
           Oi = Math.toRadians(Oi);
           OR = (n1*Math.sin(Oi)/n2);
           OR = Math.toRadians(OR);
           OR = Math.asin (OR);
           OR = Math.toDegrees(OR);
           System.out.println(OR);
        }
    }
}
调试程序时,我得到以下结果:

首先,以下是正在实施的计划:

(0表示没有折射角)

这些是计算if语句中第2行(?)后的结果:

将“或”转换为弧度后,“或”的值变为
0.011364657670640462

然后,这里是有问题的部分,对具有弧正弦的部分进行评估,“或”变为
0.011364*90231927541*
(更改的部分在
*
之间指示)


最后,“或”再次转换为度,在第二行(或多或少)“或”之后,我将恢复到我的值,然后等于
0.6511*609374816383*
(同样,更改的部分在
*
之间指示)。

您正在使解决方案变得比需要的复杂得多。您应该通过求解斯内尔定律中的折射角,一次性计算表达式,如下所示:

Oi = Math.toRadians(Oi);
OR = Math.asin((n1/n2)*Math.sin(Oi));
OR = Math.toDegrees(OR)

System.out.println("Angle of refraction: "+OR);

你的麻烦来自这一行:

OR = Math.toRadians(OR);       
进行此计算时,您已经有了以弧度表示的答案:

OR = (n1*Math.sin(Oi)/n2);
再次将其转换为弧度时,会使结果倾斜。删除
或=Math.toRadians(或)
和您的程序将按预期工作