2016-05-21 1 views
0

Le problème avec mon code est que quand j'ai entré 0, le résultat est 0.0 mais chaque fois que j'entre quelque chose de plus que zéro, (comme 1,2,3,4,5,6, 998 ... n'importe quoi) le résultat est toujours 1,0 dans chaque cas. Ma logique est-elle incorrecte à l'intérieur de l'itération?Calcul de la valeur de y = 1/1 + 2/3 + 3/5 + 4/7 + ....... + n/(2n-1) où n est l'entrée de l'utilisateur

Mon code:

/*/ Write a y program that will calculate the value of y if the expression 
of y is as follows (n is the input): 

     y = 1/1 + 2/3 + 3/5 + 4/7 + ....... + n/(2n-1)  /*/ 

import static java.lang.System.*; 
import java.util.*; 

class Practice_Problems04_JavaPrograms_Task04{ 
    public static void main(String[] args){ 
     Scanner orcho = new Scanner(in); 
     out.println("Please enter the value of n: "); 
     int n = orcho.nextInt(); 
     double y = 0; 

     for(int count = 1; count <= n; count++){ 
      y += (count/((2 * count) - 1)); 
     } 
     out.println("The summation is, y = " + y); 
     orcho.close(); 
    } 
} 

Répondre

4

count/((2 * count) - 1) est division entière, vous avez besoin division numéro flottant, changement count/((2 * count) - 1.)

Lorsque deux entiers ont fait une opération de division, puis on effectue l'opération entière, a/b est égal à l'opération mathématique a/b avec la partie fraction supprimée.

1/2 -> 0.5 -> 0 
3/2 -> 1.5 -> 1 
-3/2 -> -1.5 -> -1 
-3/-2 -> 1.5 -> 1 

En fait, (a/b) * b + (a % b) est toujours égal à a.

Pour effectuer une division de nombres flottants, l'un des a et b doit être un nombre flottant. Vous pouvez utiliser à la fois la conversion implicite et la conversion explicite. Comme a * 1./b ou (double)a/b

Vous pouvez vérifier java 8 specs pour multiplicative operators et type conversion.

Le type d'une expression multiplicative est le type promu de ses opérandes. Si le type promu est int ou long, l'arithmétique des nombres entiers est exécutée. Si le type promu est float ou double, l'arithmétique à virgule flottante est exécutée. 15.17

+0

J'ai déjà déclaré y comme double. Donc, ça ne devrait pas fonctionner? –

+0

@OrchoSiddiqui Non, ce n'est pas suffisant. –

+0

Ce n'est pas suffisant parce que votre 'count' est Integer – Kaushal28

0

Vous divisez des entiers, ce qui produit toujours un int. Vous devez utiliser double pour obtenir votre résultat:

for(double count = 1; count <= n; count++){ 
    y += (count/((2 * count) - 1)); 
}