Member 13817762 Ответов: 3

Число Эйлера(математическая константа) с java .my код работает неправильно.


Я хочу написать java-код, который мог бы посчитать число Эйлера e = 2.718281828459...) ,
e= Сигма(k=от 0 до n) 1/n!
Команда задает число n в приведенной выше формуле.
У меня есть две проблемы :
1. Я думаю, что мой метод Эйлера не corrct .
2. как я должен виртировать свой код, чтобы вывести приближенное число, округленное до ближайших четырех (или каких-то еще) десятичных знаков.

Что я уже пробовал:

<pre>package edu.kit.informatik;

import java.util.Scanner;

public class Main {
    // Main Method
    public static void main(String[] args) {
        System.out.println("type a number");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println(euler(n));
    }

    // factorial Method

    public static int factorial(int n) {
        for (int i = 0; i <= n; i++) {
            if (n == 0)
                return 1;
            else
                return n * factorial(n - 1);
        }
        return factorial(n);
    }
    // Euler

    public static double euler(int n) {
        double sum = 0.0;
        for (int i = 0; i <= n; i++) {

            sum += 1 / factorial(i);
            return sum;
        }
        return euler(n);
    }
}

3 Ответов

Рейтинг:
2

Patrice T

sum += 1 / factorial(i);

Будьте осторожны, о делении 2 целых чисел в Java, это делает целочисленное деление !
Начало Java - Unit 2 Математические Операторы[^]

Цитата:
1. Я думаю, что мой метод Эйлера не corrct .

Не думай ! Гарантия !

Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
2

Richard MacCutchan

1. Почему?
2. Используйте строковый формат, как описано в разделе Строка (Java Platform SE 7 )[^]


Рейтинг:
0

Meem Siddique

import java.util.Scanner;

public class EulersNumber
{
	public static void main(String args[])
	{
		int counter = 1;
		double mult = 1;
		double div = 0;
		double sumDiv = 0;
		double e;
		
		//if you want the user to specify the number of iterations
		
		Scanner input = new Scanner(System.in);
		System.out.print("Up to how many numbers do you want to compute e? ");
		int size = input.nextInt();
		
		while(counter<=size)
		{
			mult = (mult*counter); 	//for the factoial 
			div = 1/mult; 			//for the fraction part
			sumDiv = sumDiv+div; 	//summing all the fractions with factorials
			e = 1+sumDiv; 			//final version with 1 added
			
			//if you wanna see what everything else looks like
			//System.out.println(mult); 
			//System.out.println(div);
			//System.out.println(sumDiv);
			
			//the final approximation of e 
			System.out.println(e);
			System.out.println("\n");
			
			counter++;
		}
		
	}
}