试图输出数学方程的解总是导致 0

Posted

技术标签:

【中文标题】试图输出数学方程的解总是导致 0【英文标题】:Trying to output solution to math equation always results in 0 【发布时间】:2018-02-04 06:34:50 【问题描述】:

我是一个完整的 java 和编码初学者,我正在尝试制作一个程序,根据用户在程序中输入的内容来解决两个方程。我尝试将变量类型更改为 long、int、double,但没有任何变化。结果始终为 0 或 0.0 任何帮助将不胜感激。

package pa2;
import java.util.Scanner;
public class GravitationalForce 

    public static void main(String[] args) 

        
            System.out.println("Please enter the name of the planet and its weight in quintillion kilograms");
            Scanner myScanner = new Scanner (System.in);
            String planetName = myScanner.next();
            int planetWeight = myScanner.nextInt();

            System.out.println("Enter the weight of the person in kilograms");
            double personWeight = myScanner.nextDouble();

            System.out.println("Please enter the radius of the planet Alderaan in million meters");
            double planetRadius = myScanner.nextDouble();
            Long gravitationalConstant = (long) (6.673*Math.pow(10,-11));
            Double force = gravitationalConstant*(planetWeight*Math.pow(10, 18)*personWeight)/planetRadius*Math.pow(10, 6)*planetRadius*Math.pow(10, 6);
            Double gravity = gravitationalConstant*(planetWeight*Math.pow(10, 18)/planetRadius*Math.pow(10, 6)*planetRadius*Math.pow(10, 6));

            System.out.println("The gravitational force of planet " + planetName + " on the person is " + force + " Newtons");
            System.out.println("The gravity of the planet " + planetName + " is " + gravity + " meters per second squared");
        

【问题讨论】:

Scanner is skipping nextLine() after using next() or nextFoo()?的可能重复 @Ravi 为什么会这样?代码不调用nextLine() 您需要重新检查您的运算符优先级。 a * b / c * d((a * b) / c) * d一样,和(a * b) / (c * d)不一样,所以gravitationalConstant*(planetWeight*Math.pow(10, 18)*personWeight)/planetRadius*Math.pow(10, 6)*planetRadius*Math.pow(10, 6)其实就是gravitationalConstant * planetWeight * personWeight * planetRadius * Math.pow(10, 30) / planetRadius Math.pow(10, 18) 最好写成double 文字1e18 【参考方案1】:

6.673*Math.pow(10,-11) 是 long,它就变成了0

改变

Long gravitationalConstant = (long) (6.673*Math.pow(10,-11));

double gravitationalConstant = 6.673*Math.pow(10,-11);

【讨论】:

你不是说6.673e-11吗? @Andreas 这是真的。所有 Math.pow 表达式都可以用数字文字替换。

以上是关于试图输出数学方程的解总是导致 0的主要内容,如果未能解决你的问题,请参考以下文章

(组合数学)不定方程的解+猜测——cf997B

解方程的历史

机器学习|数学基础Mathematics for Machine Learning系列之线性代数(13):线性方程组的解的结构

如何将for循环变成数学方程?

高等数学基础进阶常微分方程-补充 & 多元函数微分学-补充

怎么用matlab解方程啊?