繁体   English   中英

NaN输出,我找不到原因

[英]NaN output, i can't find out why

我正在创建代码以帮助自己完成一些功课,但是“ C”类存在问题。 它一直给我NaN输出,您能看看并告诉我我做错了吗?

我仔细检查了一下,发现问题出在这行:

C[i][j] = C[i][j] * (Math.sqrt(((Math.pow(U[i][j],2)/Math.pow(I[i][j],2)))-Math.pow(R[i],2)));

主-


    public class Main {

        public static void main(String[] args) {

            Wzory wzor = new Wzory();
            wzor.scan();
            wzor.xU();
            wzor.xI();
            wzor.C();

        }

    }

package FizA;
import java.util.Scanner;
import java.lang.Math;

public class Wzory {
    //przypisane
    double[] f = new double[2],xf = new double[2],R = new double[2],xR = new double[2];
    double[][] U = new double[2][4],I = new double[2][4];
    double pi=3.1415;
    //obliczone
    double[][] xU = new double[2][4], xI = new double[2][4], C = new double[2][4], xC = new double[2][4];


    public void scan()
    {
        Scanner scan = new Scanner(System.in);
        for(int i=0; i<2; i++)
        {
            System.out.println("Podaj 'f':");
            f[i] = scan.nextDouble();
            System.out.println("Podaj 'xf':");
            xf[i] = scan.nextDouble();
            System.out.println("Podaj 'R':");
            R[i] = scan.nextDouble();
            System.out.println("Podaj 'xR':");
            xR[i] = scan.nextDouble();
            for(int j=0; j<4; j++)
            {
                System.out.println("Podaj 'U':");
                U[i][j] = scan.nextDouble();
                System.out.println("Podaj 'I':");
                I[i][j] = scan.nextDouble();
            }
        }
        scan.close();
    }

    public void xU()
    {
        for(int i=0; i<2; i++)
        {
            for(int j=0; j<4; j++)
            {
                xU[i][j] = 0.005 * U[i][j];
                xU[i][j] = xU[i][j] + 0.003;    
                System.out.println("xU-"+i+","+j+"="+xU[i][j]);
            }
        }

    }

    public void xI()
    {
        for(int i=0; i<2; i++)
        {
            for(int j=0; j<4; j++)
            {
                xI[i][j] = 0.015 * I[i][j];
                xI[i][j] = xI[i][j] + 0.000003;
                System.out.println("xI"+i+","+j+"="+xI[i][j]);
            }
        }
    }

    public void C()
    {
        for(int i=0; i<2; i++)
        {
            for(int j=0; j<4; j++)
            {
                C[i][j] = 2*pi*f[i];
                C[i][j] = C[i][j] * (Math.sqrt(((Math.pow(U[i][j],2)/Math.pow(I[i][j],2)))-Math.pow(R[i],2)));
                C[i][j] = Math.pow(C[i][j],-1);
                System.out.println("C"+i+","+j+"="+C[i][j]);
            }
        }
    }



}

您正在对此求平方根,Math.pow(U [i] [j],2)/Math.pow(I [i] [j],2)))-Math.pow(R [i], 2)

您的NaN来自:

1)Math.sqrt方法

2)和减去Math.pow(R [i],2),因为负数没有平方根,所以平方可以是0或正数。

例:

当U [i] [j]等于2的幂/ I [i] [j]等于2的幂时,R [i]等于2的幂时,给出一个负数,则此负数的Math.sqrt即使您将数字与C [i] [j]相乘并将其存储回C [i] [j]并进行打印,该数字也会给出NaN。

那就是获得NaN的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM