首页 > 解决方案 > java中的近似平方根

问题描述

我正在编写的程序需要读取用户输入的双精度数,然后读取输入的猜测值是第一个的平方根,然后使用巴比伦方法找出平方根是多少第一个数字(基本上它使用最后的猜测来制作一个新的数字,然后重复这个直到找出正确的数字)nextGuess + (lastGuess + (num / lastGuess))/2

问题是,不仅我不能在代码的任何部分输入一个双精度数而不产生错误(如下所示),而且由于某种原因我不能使方程式工作,即使我已经检查过数字一百万次。

这是我正在使用的 2 个类的代码: Main Class

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
     Scanner in = new Scanner(System.in);
  System.out.println("Please input a number:");
  double num = in.nextInt();
  System.out.println("Input your guess for square root of the number:");
  double lastGuess = in.nextInt();
    Sqrtclass met = new Sqrtclass();
    double e = 0.001;
    met.set_guess(num, lastGuess);
      for (int i=1; i<=1000; i=i+1){
  if(met.nextGuess - lastGuess >= e){
    System.out.println("The number " + met.nextGuess + " couldn't be precise enough. Please input this number in the box below.");
    lastGuess = in.nextInt();
  }
  else if(met.nextGuess - lastGuess <= e){
  System.out.println("The square root of " + num + " is " + met.nextGuess);
  i = 1001;
  break;
  }   
    }
  }
}

第二个类或Sqrtclass.java:

class Sqrtclass{
  static double nextGuess;
  public static double set_guess(double lastGuess, double num){
    nextGuess = (lastGuess + num / lastGuess)/2;
    return nextGuess;
   }
  }

这是我说的错误,当我在程序执行期间输入带小数的数字时出现:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Main.main(Main.java:15)

我的错误到底是什么?我想不出很多我还没有尝试过的事情。

标签: javamethods

解决方案


我解决了问题。基本上有两个。

第一次是当我打电话给其他班级的双打时。我met.set_guess(num, lastGuess);在主课和第二课中使用public static double set_guess(double lastGuess, double num). 这是,我正在切换双打的顺序。

第二个也在主类中,发生的事情是我将 for 循环放在调用公共静态双精度的构造函数之前。我的意思是:

是这样的:

    met.set_guess(num, lastGuess);
      for (int i=1; i<=1000; i=i+1){

什么时候应该是这样的:

      for (int i=1; i<=1000; i=i+1){
    met.set_guess(num, lastGuess);

现在该程序运行良好。感谢所有帮助过的人。


推荐阅读