2017-10-04 21 views
0

J'ai essayé de nombreux calculs différents pour essayer de faire fonctionner ma méthode de volume sphérique.La méthode du volume sphérique ne fonctionne pas

Ma classe Sphère est étendue de Cercle, pour obtenir la zone du cercle, ainsi que implémente mon interface Shape3D qui me permet d'utiliser ma méthode de volume.

Cependant, j'ai essayé toutes ces différentes formules pour ma méthode et rien ne me donne un volume précis d'une sphère. Il est toujours radicalement éteint.

Celui qui obtient le plus proche est (4 * 22 * ​​rayon * rayon * rayon)/(3 * 7); mais c'est toujours éteint.

//return (4/3) * super.area() * radius; 
    //return (Double)((4*22*getRadius()*getRadius()*getRadius())/(3*7)); 
    //return (4*22*radius * radius * radius)/(3*7); 
    //return ((4/3) * (Math.pow(getRadius(), 3))/(Math.PI)); 
    //return (getRadius() * getRadius() * getRadius()) * (Math.PI) * (4/3); 
    //return (super.area() * getRadius()) * (4/3); 

Je vais joindre mon code pour ma forme de classe abstraite, ma classe Circle, et ma classe Sphere, ainsi que mon interface Shape3D. Peut-être que j'ai oublié quelque chose d'évident. Quand je définis le rayon et le ramène, le rayon redevient normal. Donc, je ne suis pas sûr de savoir pourquoi chacun d'entre eux si complètement désactivé.

public class Main { 
     public static void main(String[] args) { 

      System.out.println(volume()); 
     } 



     public static double volume() { 
     double vol; 
     double x = 4/3; 
     double y = Math.pow(30.0, 3); 
     double z = Math.PI; 
     vol = y * z * x; 
     return vol; 
     //return (4/3) * super.area() * radius; 
     //return (Double)((4*22*getRadius()*getRadius()*getRadius())/(3*7)); 
     //return (4*22*radius * radius * radius)/(3*7); 
     //return ((4/3) * (Math.pow(getRadius(), 3))/(Math.PI)); 
     //return (getRadius() * getRadius() * getRadius()) * (Math.PI) * (4/3); 
     //return (super.area() * getRadius()) * (4/3); 
    }// end sphere volume 
} 
+1

'4/3' en Java est pas ce que vous pensez qu'il est. – jsheeran

+1

Cette question contient actuellement beaucoup de "extra" code qui semble superflu pour le problème réel. Il est plus difficile de parcourir et de trouver le problème. Pouvez-vous travailler pour trouver un exemple _minimal_ qui illustre l'échec? S'il s'agit d'une erreur arithmétique, il devrait être possible de le reproduire avec seulement quelques lignes d'une fonction 'main'. (Il se pourrait même qu'en trouvant cet exemple minimal, vous trouviez le bug!) – yshavit

+1

@jsheeran belle prise! C'est une dupe de "[Pourquoi est le résultat de 1/3 == 0?] (Https://stackoverflow.com/questions/4685450/why-is-the-result-of-1-3-0)" (bien que je ne puisse pas voter pour fermer comme dupe en ce moment). – yshavit

Répondre

1

Voici un programme simple test java pour calculer le volume d'une sphère que vous pouvez utiliser comme référence pour ce que vous faites mal qui est que 4/3 retourne un int, plutôt qu'une représentation double de ![1.3 recurring et les dégâts donc votre calcul:

import java.util.Scanner; 

class Main { 
    public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 

    // notice the descriptive variable names rather than x, y and z 
    double radius; 
    double diameter; 
    double volume; 

    System.out.print("Enter the radius of the sphere:"); 
    radius = scanner.nextDouble(); 
    diameter = (radius * 2.0); 
    volume = (4.0/3.0) * Math.PI * Math.pow(radius, 3); // instead of 4/3 in yours 
    System.out.println("The volume is: " + String.format("%.1f", volume)); 
    } 
} 

Exemple d'utilisation:

Enter the radius of the sphere: 5 
The volume is: 523.6 

Pour confirmer qu'il fonctionne correctement, vous pouvez utiliser Google's sphere volume calculator et confirmez donne la même valeur:

enter image description here

+1

Merci c'était parfait. Je crois que mon erreur a été faite en 4/3, il aurait dû être 4.0/3.0 Merci beaucoup. –

+0

Pourriez-vous s'il vous plaît m'expliquer pourquoi je dis 4 au lieu de 4.0 fait une énorme différence? –

+0

@BlankReaver Ajout d'une explication plus explicite. – shash678

1

Au lieu de

double x = 4/3; 

Essayez

double x = 4.0/3.0; 

ou

double x = 4.0/3; 

ou

double x = 4/3.0;