如何在没有main方法的情况下使用java类

时间:2018-03-30 12:00:28

标签: java algorithm optimization javac

我正在寻找Java中的“Whale_optimization_algorithm”代码,我在一个网站上找到它,但是当我试图运行它时。它显示“无法找到或加载Main class Whale_optimization_algorithm.java”的错误 但它成功编译。

这是代码

package test;

import java.io.*;

abstract class f_xj
{
abstract double func(double x[]);
}

public class Whale_optimization_algorithm {



    double A;   
    double C;   
    double a;
    double a2;
    double b;
    double l;
    double p;
    double r1;
    double r2;
    double Leader_score;
    double[] Leader_pos;
    double D_Leader;
    double distance2Leader;
    double[] Lower;
    double[] Upper;
    double[] X_rand;
    double D_X_rand;
    int Maxiter;
    int rand_leader_index;
    double[][] Positions;
    double[] Fitness;
    int N;
    int D;
    f_xj ff;


    public Whale_optimization_algorithm(f_xj iff, int iMaxiter, double[] iLower, double[] iUpper, int iN)
    {
    ff=iff; 
    Maxiter=iMaxiter;   
    Lower=iLower;   
    Upper=iUpper;   
    D=Lower.length;
    N=iN;
    Positions=new double[N][D];
    Fitness=new double[N];
    Leader_pos=new double[D];
    X_rand=new double[D];
    Leader_score=100000000000.0;

    }


    void init()
    {
      for(int i=0;i<N;i++)
      {for(int j=0;j<D;j++)
         {Positions[i][j]=Lower[j]+((Upper[j]-Lower[j])*Math.random());}}

    }


    double[][] solution()
    {
    init(); 
    int iter=0; 

       while(iter<Maxiter)
       {
           for(int i=0;i<N;i++)
           {
               for(int j=0;j<D;j++)
               {if ((Positions[i][j]<Lower[j]) || (Positions[i][j]>Upper[j]))
                  {Positions[i][j]=Lower[j]+((Upper[j]-Lower[j])*Math.random());}}   

               Fitness[i]=ff.func(Positions[i]);   

               if(Fitness[i]<Leader_score)
               {
                  Leader_score=Fitness[i];
                  for(int j=0;j<D;j++)
                  {Leader_pos[j]=Positions[i][j];}     
               }

           }       
           a=2.0 - (double)iter*(2.0/(double)Maxiter);
           a2= -1.0 + (double)iter*(-1.0/(double)Maxiter);

           for(int i=0;i<N;i++)
           {
            r1=Math.random();   
            r2=Math.random();
            A=2.0*a*r1-a;
            C=2.0*r2;   
            b=1.0;  
            l=(a2-1.0)*Math.random() + 1.0;
            p=Math.random();

                 for(int j=0;j<D;j++)
                 {
                      if (p<0.5)
                      {
                          if (Math.abs(A)>=1.0)
                          {
                              rand_leader_index=(int)Math.floor((double)N*Math.random());
                              X_rand[j]=Positions[rand_leader_index][j]; 
                              D_X_rand=Math.abs(C*X_rand[j] - Positions[i][j]);     
                              Positions[i][j]=X_rand[j] - A*D_X_rand;
                          }    
                          else if (Math.abs(A)<1)
                          {
                          D_Leader=Math.abs(C*Leader_pos[j] - Positions[i][j]);
                          Positions[i][j]=Leader_pos[j]-A*D_Leader;    
                          }
                      }    
                      else if (p>=0.5)
                      {
                       distance2Leader=Math.abs(Leader_pos[j] - Positions[i][j]);   
                       Positions[i][j]=distance2Leader*Math.exp(b*l)*Math.cos(l*2.0*Math.PI) +  Leader_pos[j]; 
                      }

                 }
            }

       iter++;   
       }


            double out[][]=new double[2][D];
            out[0][0]=Leader_score;
            for(int i=0;i<D;i++)
            {out[1][i]=Leader_pos[i];}
            return out;

}

    void toStringnew()
    {
      double[][] out=solution();
      System.out.println("Optimized value = "+out[0][0]);
      for(int i=0;i<D;i++)
      {System.out.println("x["+i+"] = "+out[1][i]);}    
    }


    void toTxtfile()
            {   String named="whale_plateframe_f36_ackley.txt";
                String line="";
                int lineNo;
                try
                   {
                   FileWriter fw=new FileWriter(named,true);       
                   BufferedWriter bw=new BufferedWriter(fw);
                   LineNumberReader lnr=new LineNumberReader(new FileReader(named));   
                   lnr.setLineNumber(1);
                   for(int i=1;i<=lnr.getLineNumber();i++)
                   {bw.newLine();}
                   double[][] dd=solution();
                   Double d1d=new Double(dd[0][0]);
                   String s1=d1d.toString();
                   int nn=dd[1].length;
                   Double[] val=new Double[nn];
                   String[] str=new String[nn];
                   for(int i=0;i<nn;i++)
                   {val[i]=new Double(dd[1][i]);}
                   for(int i=0;i<nn;i++)
                   {str[i]=val[i].toString();}
                   bw.write(s1+" ");
                   for(int i=0;i<nn;i++)
                   {bw.write(str[i]+" ");}
                   bw.close();
                   lnr.close();
                   }catch(IOException e)
                   {e.printStackTrace();}

            }
}

请帮帮我。我是Java新手。 如果我要添加方法如何添加它或在方法中调用此类?

2 个答案:

答案 0 :(得分:1)

作为基本JAVA的一部分,首要的是主要功能对于独立类来说是必须的。

但是,有些方法可以在不实现此类中的main函数的情况下执行所需的函数:

  1. 通过Jshell(在JAVA 9中发布)
  2. 执行所需的功能
  3. 从您要实施算法的现有应用程序(可能是独立应用程序或Web应用程序)中的任何位置调用所需的功能
  4. 同样,如果测试是唯一的动机,您也可以使用JUnit
  5. 执行所需的功能

答案 1 :(得分:0)

请在测试包中选择一个简单的课程。然后运行它。

    public class MainClass { 
     public static void main(String args[]) { 
     Whale_optimization_algorithm algo = new Whale_optimization_algorithm(); 
     algo.init(); 
     algo.solution(); 
     algo.toTxtfile(); 
    } 
  }