Java

2016-03-21 5 views
2

sınıfında bir döngü kullanarak döngü oluşturmak için bir sayı alma Sayıyı .000001 içinde yuvarlanmış bir sayının karekökünü almaya çalışıyorum. Örneğin 10 = 3,1622766 sqrt = bir çift ile. Bende var ama 3.162267'ye yuvarlanmak benim sorunum. Bir döngü kullanmalı ve sınıfları kullanamam. Size Jared ederizJava

import java.util.Scanner; 

public class squareRoot { 
    public static void main(String[] args) { 
     Scanner kb = new Scanner(System.in); 
     System.out.println("Please enter a non-negative integer."); 
     int myInt = kb.nextInt(); 
     { 
      double testNum; 
      double squareRoot = myInt/2; 
      do { 
       testNum = squareRoot; 
       squareRoot = (testNum + (myInt/testNum))/2; 
      } 
      while (squareRoot - (testNum * testNum) > .000001); 
      System.out.println("\nThe square root of " + myInt + " is " + squareRoot); 
     } 
    } 
} 
+0

Ah vay, bu girintiler * gerçekten * kafa karıştırıcıdır. – Andreas

cevap

0

sorun istenen numaraya sonra yuvarlak önemli rakamların sayısını artırmak ve böylece bu algoritma kullanılarak, son basamağı hatanın unsuru olmasıdır:

double myDouble = kb.nextDouble(); 
{ 
    double testNum; 
    double squareRoot = myInt/2; 
    do 
    { 
     testNum=squareRoot; 
     squareRoot = (testNum + (myInt/testNum))/2; 
    } 
    while(Math.abs(myDouble - (testNum * testNum)) > .00000001);//←decrease the error here 

    //round squareRoot down to the num of decimals you want   

    System.out.println("\nThe square root of " + myDouble + " is " + squareRoot); 
    } 
} 
0

kendi round() yöntemi yazmak ve java sınıfları içinde yerine yapı kullanabilirsiniz:

private static double round(double number, int places){ 
    double result; 
    if(number == (int) number){ 
     return number; 
    } 
    result = (int) number; 
    int multiplier = 1; 
    for(int i = 0 ; i < places ; i++){ 
     multiplier*= 10; 
    } 
    double fraction = number - (int)number; 
    result = result + ((int)(multiplier * fraction))*1.0/multiplier; 
    return result; 
} 

public static void main(String[] args) { 
    double d = 1.6546213; 
    System.out.println(round(d, 2)); 
}