数字达到极限(Java)

数字达到极限(Java),java,math,Java,Math,编辑:这是输出的屏幕截图 我最近被要求做一个程序,可以计算和显示 1/(1!)+1/(2!)+。1/(n!) 使用Scanner实用程序。我似乎在这方面遇到了很多麻烦。程序本身可以工作,但不管我输入什么数字,它都会给出相同的答案。这是我到目前为止所拥有的(是的,这是故意不完整的,我被难住了) 谁能给我一个完成/解决这个问题的方法吗?非常感谢。 ~z~安德鲁 编辑:这段代码可以很好地找到极限。我将研究一种方法,将等式的前面部分添加到这个函数中,但这对我来说有点棘手 import java.uti

编辑:这是输出的屏幕截图

我最近被要求做一个程序,可以计算和显示

1/(1!)+1/(2!)+。1/(n!)

使用Scanner实用程序。我似乎在这方面遇到了很多麻烦。程序本身可以工作,但不管我输入什么数字,它都会给出相同的答案。这是我到目前为止所拥有的(是的,这是故意不完整的,我被难住了)

谁能给我一个完成/解决这个问题的方法吗?非常感谢。 ~z~安德鲁

编辑:这段代码可以很好地找到极限。我将研究一种方法,将等式的前面部分添加到这个函数中,但这对我来说有点棘手

import java.util.Scanner;
class Power2
{
   public static void main(String[] args)
   {
      Scanner input = new Scanner(System.in);
      System.out.println("I will calculate 1/(1!) + 1/(2!) . . . + 
         1/(n!)\nWhat is the value of n?");
      Double n = input.nextDouble();
      Math(n);
      System.out.println("e = " + Math(n));
   }
   public static Double Math(Double E)
   {
      Double product = 1.0;
      while (E > 0)
      {    
         product *= E;
         E--;
      }
      return product;
   }
}    

我认为你没有正确地使用你的方法。尝试:

System.out.println(math(n));
只会给你e的值

也许可以试试下面的代码。除了名称(尝试使用Java约定)和返回类型之外,我没有做任何更改

public static double math(double e) {
    Double product = 1.0;
    int x = 0;
    while (e > 0)
    {    
        product = product * e;
        e--;
    }
    return e;
}

你被太多的
数学
弄糊涂了

您的方法
Math
带有一个参数
E
,Java
Math
类带有一个常量
E
。你把它们混在一起了

试一试


您的代码:

  System.out.println("e = " + Math.E);
Math.E是一个常数-它将始终打印欧拉数,从而输出。

要正确调用该方法,应该

System.out.println("e = " + math(e)"
输入1-输出1

输入2-输出1.5

输入3-输出1.6667

import java.util.Scanner;
class MyClass

{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.println("I will calculate 1/(1!) + 1/(2!) . . . +   1/(n!)\nWhat is the value of n?");
        double n = input.nextDouble();
        double solution = doMath(n);
        System.out.println("e = " + solution);
    }
    public static double doMath(double n) {

        double ret = 0;
        // the number of terms we add
        for (int i = 1; i <= n; i++) {
            ret += calcFaculty(i);
        }

        return ret;

    }
    // calculate every single term
    public static double calcFaculty(double d){
        double calc = 1;

        for (int i = 1; i <= d ; i++) {
            calc = calc* 1/i;
        }
        return calc;
    }
}
import java.util.Scanner;
类MyClass
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
System.out.println(“我将计算1/(1!)+1/(2!)…+1/(n!)\n的值是多少?”;
double n=input.nextDouble();
双溶液=doMath(n);
System.out.println(“e=”+溶液);
}
公共静态双域(双n){
双ret=0;
//我们添加的术语数量

对于(inti=1;iHi),程序总是返回相同的数字

e=2.718281828459045


因为行
System.out.println(“e=“+Math.e”);
不是调用方法Math,而是调用类java.lang.Math。我不知道这是否是您认为可疑的。

使用
Double
包装器没有任何意义。请改用简单的
Double
原语类型。另外,将方法名称大写也是非常规的。您的
Math
方法应该被称为
math
@LucasBaizer谢谢,但这并不能解决我的问题。这只是偏好。好吧,假设我在程序中输入5。理想的输出是什么?如果我输入6会怎么样?你在这里试图实现的目标有点不清楚。不是真的,输出应该是他说的:1/(1!)+1/(2!)+…+1/(n!)…如果你输入5,你会得到1/(1!)+1/(2!)+1/(3!)+1/(4!)+1/(5!)@LucasBaizer刚刚读了上面的等式,我想让它相等。无论我输入什么,我总是得到一个输出
e=2.718281828459045
,但这是如果我只是在那里关闭程序的大括号,只运行上面的。我需要把等式的所有部分加在一起,我甚至不能让一个部分相等。他会的o需要将其返回时间从void更改为double,并返回double。当然,但他甚至没有正确调用该方法,因此我正在解决这个问题:“不管我输入什么数字,都会给出相同的答案”。这解决了获得正确极值的问题!现在我如何完成上面的等式?我如何才能像在等式中一样按降序将其中的几个相加?这是一个新问题-尝试一些东西,遇到问题时返回。是的,我发现了,一个愚蠢的错误。我将发布新代码
System.out.println("e = " + math(e)"
import java.util.Scanner;
class MyClass

{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.println("I will calculate 1/(1!) + 1/(2!) . . . +   1/(n!)\nWhat is the value of n?");
        double n = input.nextDouble();
        double solution = doMath(n);
        System.out.println("e = " + solution);
    }
    public static double doMath(double n) {

        double ret = 0;
        // the number of terms we add
        for (int i = 1; i <= n; i++) {
            ret += calcFaculty(i);
        }

        return ret;

    }
    // calculate every single term
    public static double calcFaculty(double d){
        double calc = 1;

        for (int i = 1; i <= d ; i++) {
            calc = calc* 1/i;
        }
        return calc;
    }
}