有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将数组作为参数传递不起作用。可能是什么错误?

我将var数组作为参数传递给quadraticalc方法,并使用它执行操作,但我想返回两个值。。但是给我错误

package testingequality;

import java.util.Scanner;

public class Sum {

    public static void main(String[] args) {
        //comparison ();

        double [] var = new double [3];
        int counter;
        Scanner input = new Scanner (System.in);
        for (counter = 0; counter< var.length; counter++)
        {
            System.out.println ("Input value for a,b,c");
            var [counter] = input.nextDouble();
        }

        double [] sum = quadraticalc (var);
        for (int i = 0; i < sum.length; i++)
        {
        System.out.println (sum [i]);
}
    }
     public static double [] quadraticalc (double [] var)
    {
         double a,b,c,d,e;
         double [] x = new double [2];
         a = var [0];
         b = var [1];
         c = var [2] ;
         d = (b*b)-(4*a*c);
         e =  Math.sqrt(d);
         double x1 = (-b + e)/ (2 * a);
         double x2 = (-b - e)/ (2 * a);
         x [0] = x1;
         x [1] = x2;
         return x; 

    }
}

我对代码做了一点修改,现在我能得到正确的答案了。。感谢所有的贡献


共 (3) 个答案

  1. # 1 楼答案

    您应该打印数组中的值,而不是打印数组引用

    更改:

    System.out.println (sum);
    

    致:

    System.out.println (sum[0]);
    System.out.println (sum[1]);
    
  2. # 2 楼答案

    所以我运行了你的代码。没有错误,但我认为您得到了类似[D@330bedb4的打印结果,并且您认为这是一个错误。相反,这是完全可以接受的行为。在

    System.out.println (sum);
    

    我想你希望这些数字被打印出来。但实际上,Java打印的是数组对象,它没有漂亮的字符串表示形式。因此,您需要打印在数组中找到的双精度值。这样就行了

    for (int i=0; i < sum.length; i++) {
        System.out.println(sum[i]);
    }
    

    当我这样做的时候,我得到了NaN,所以二次曲线和计算值的方式一定有问题

    编辑:这是因为如果d为负,e(d的sqrt)将不是实数。如果你在计算二次曲线,你可能需要检查一下

    为了便于阅读,我修改了二次函数

    public static double [] quadraticalc (double [] var)
    {
        double a = var [0];
        double b = var [1];
        double c = var [2];
    
        System.out.println("a = " + a + ", b = " + b + ", c = " + c);
    
        double root1 = (-b + Math.sqrt(Math.pow(b, 2) - 4*a*c)) / (2*a);
        double root2 = (-b - Math.sqrt(Math.pow(b, 2) - 4*a*c)) / (2*a);
    
        return new double[] { root1, root2 };
    } 
    

    运行示例(我打印了可见性的a、b、c、d和e值)

    Input value for a,b,c
    10 100 10
    Input value for a,b,c
    Input value for a,b,c
    a = 10.0, b = 100.0, c = 10.0, d = 9600.0, e = 97.97958971132712
    -0.10102051443364388
    -9.898979485566356
    

    这些答案是正确的,可以验证

  3. # 3 楼答案

    在这里孤注一掷。。。 您需要漂亮地打印数组的内容。试一试

    Arrays.toString(sum)
    

    但是,当然,你可能还有其他问题