首页 > 解决方案 > 如何在类中从第一种方法调用方法到第二种方法

问题描述

给定数字,我们需要找出它是平方数还是三角形数?这个“num”应该首先验证正方形方法,然后它必须使用三角形方法。

问题是:如果我的正方形方法不适合,我怎么能从正方形调用三角形或任何其他方法来调用三角形方法。

这是我的代码:

public class HelloWorld{

     public static void main(String []args){

        class Number{

            int num;

            public boolean isSquare(){

                int squareNumber=1;

                while(squareNumber<num){

                   squareNumber = num*num;

                }
                if(squareNumber%num==0)
                {
                    System.out.println(num+" is a Square number");
                }
                else
                {
                 return isTriangle();
                }

            boolean isTriangle() {

                int x=1,triangleNumber=1;

                while(triangleNumber<num){

                   x++;

                    triangleNumber = triangleNumber + x;

                }
                if(triangleNumber==num)
                {
                    System.out.println(num+" is a triangle number");
                }
                else
                {
                     System.out.println(num+" is applicable for both triangle and square numbers");
                }
            }
        }
    }
        Number mynum = new Number();
        mynum.num=2;
        System.out.println(mynum.isSquare());
    }
}

标签: java

解决方案


所以首先,你这样做会容易得多:

public boolean isSquare(int num){
   ...
}

所以摆脱:

mynum.num = yourNumber;

您经常会在方法中遇到这种方法,其中原始输入可以是任何数字/文本......

现在对于您的代码,一个非常好的优化是:

public boolean isSquare(int num){
   if (num>0) //To check if the number is null or not...
      squareNumber = num*num;
}

因为while循环条件总是满足一次,第一次进入后就退出了……

继续下一部分......对我来说,这非常棘手,因为我认为它没用,因为它总是返回 true(文本),因为“squareNumber”总是以 num 作为根,并且总是通过 if (squareNumber%num ==0) 为真,并且永远不会调用 isTriangle(...) 。

更平易近人的方式是:

public class HelloWorld {

   static String result;

   public static void main(String[] args) {
       int mynum = 36;
       System.out.print(isSquare(mynum)+isTriangle(mynum));
     }

     public static String isSquare(int num){
       if ((Math.sqrt(num)==(int)Math.sqrt(num))){
         return "Given number is a square";
       } else return "Given number isn't a square,";
     }
     public static String isTriangle(int num){
      if (isSquare(8*num+1)){
        return " but is still a triangular number!";
      } else return " but not a triangular number.";
     }
  }

推荐阅读