2013-02-02 27 views
0

有麻烦使用PerfectSquare代码完美的正方形,如果,否则

import java.util.*; 


public class perfectsquare { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

Scanner s= new Scanner(System.in); 
double number; 

System.out.println("Enter number >"); 

number= s.nextDouble(); 

System.out.println(Math.sqrt(number)); 





    } 

} 

使用,如果,否则你怎么可以让它返回一个完美的正方形状的9 = 3,但假开方,如果这个数字的平方根是小数为10例平方根是3.122222 .....

+4

你对完美广场的定义是什么? – zibi

+3

如果你想让我们做你的功课,至少知道你想要什么样的退货类型。 – jma127

+0

@Cthulhu返回类型'对象';) – Aidanc

回答

0
import java.util.*; 

public class perfectsquare { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner s= new Scanner(System.in); 
     double number; 

     System.out.println("Enter number >"); 

     number= s.nextDouble(); 
     double sqr= Math.sqrt(number); 
     //System.out.println(sqr); 
     double num=sqr; 
     double x; 
     x=num%1; 
     x=num-Math.floor(num); 
     if(x>0){ 
      System.out.println("False"); 
     } 
     else{ 
      System.out.println(sqr); 
     } 
    } 
} 

这将工作。

+0

你的逻辑看起来有问题,我会做'%1'。 – eboix

+0

在java中它不起作用。我是新来的java – user1658435

+0

对不起,我还不够清楚。早些时候,我说过Java双模操作没有很好的定义,但是我回过头来看。它们在C中没有很好的定义,但是它们在Java中定义得很好。这不起作用的原因是你正在执行'%10'而不是'%1'。无论平方根是否有位,您的声明都会返回。无论是否有小数,“%1”都会给你,这就是你想知道的。另外,你应该改变你的'double num = sqr;如果(num ....'只是'if(sqr ....'。没有理由有一个辅助变量'num',那里。 – eboix

2

可以改变返回类型为Object(但你必须检查它是否使用功能时使用instanceof数字),或返回-1,而不是虚假的

看它是一个完美的正方形,使用此:

if(Math.sqrt(number) % 1 == 0) { 
    return number; 
} else { 
    return -1; 
} 
+2

这不会返回上面的海报要求。 – Aidanc

+0

34没有小数,它不是一个完美的正方形。 – eboix

+0

我看到了编辑。它仍然没有回答OP的问题。 – eboix

3
if(Math.round(Math.sqrt(number))==Math.sqrt(number)){ 
    //it is a perfect square 
} 
+1

'if(Math.sqrt(number)== Math.sqrt(number)%1)' – Doorknob

+0

你也可以使用'Math。 ceil'或'Math.floor'或者将sqrt的截断乘以'int',看它是否是原始数字(在转换为double之后)。 – eboix

+0

^这也可行,有很多方法可以解决这个问题,这只是第一个出现在我脑海里的问题:P –

相关问题