首页 > 代码库 > java动手动脑2

java动手动脑2

 1、 java类中不用static还能如何调用函数?

如果此函数是静态的,会在程序初始化过程中直接进行内存加载,此方法内的所有方法内容必须是静态的,否则会报错静态方法引用动态变量。方法调用:“类名.方法”

如果此函数是动态的,那么只有在调用的时候才会被主动加载一次,之后释放内存。方法调用:必须先实例化出来一个类,之后再通过实例化类名+方法的形式调用。

2、观察以下代码的不同之处?

技术分享

表示方法为静态,在其他类中可以用类名去调用这个方法。

 

2、求组合数源程序:

(1)递归求组合数:

import java.util.Scanner;public class Czuhe {	public static void main(String[] args) 	{				System.out.print("请输入N:");		@SuppressWarnings("resource")		Scanner sc=new Scanner(System.in);		int N=sc.nextInt();		System.out.print("请输入k:");		@SuppressWarnings("resource")		Scanner scan=new Scanner(System.in);		int K=scan.nextInt();		System.out.println(Cal(N,K));	}	public static int Cal(int N,int K)	{		 if(K == 0 || N == 0)  		    {  		        return 1;  		    }  		      		    if(N < K)  		    {  		        return 0;  		    }  		      		    if(N == K)  		    {  		        return 1;  		    }  		      		    return Cal(N-1,K) + Cal(N-1,K-1); 	}}

(2)利用杨辉三角求组合数:

import java.util.Scanner;@SuppressWarnings("unused")public class Czuhe {	public static void main(String[] args) 	{				System.out.print("请输入N:");		@SuppressWarnings("resource")		Scanner sc=new Scanner(System.in);		int N=sc.nextInt();		System.out.print("请输入k:");		@SuppressWarnings("resource")		Scanner scan=new Scanner(System.in);		int K=scan.nextInt();		System.out.println(Cal(N,K));	}	public static int Cal(int N,int K)	{		 if(K == 0 || N == 0)  		    {  		        return 1;  		    }  		     int c=0;int a=1; 		 int s=Math.min(K, N-K);		 for(int i=1;i<=s;i++)		 {			 c=a*(N-i+1)/(i);			 a=c;		 }		      		    return c; 		    	}}



(3)使用组合数公式计算:

import java.util.Scanner;@SuppressWarnings("unused")public class Czuhe {    public static void main(String[] args)     {                System.out.print("请输入N:");        @SuppressWarnings("resource")        Scanner sc=new Scanner(System.in);        int N=sc.nextInt();        System.out.print("请输入k:");        @SuppressWarnings("resource")        Scanner scan=new Scanner(System.in);        int K=scan.nextInt();        System.out.println(jiecheng(N)/(jiecheng(K)*jiecheng(N-K)));    }    public static int jiecheng(int N)    {        int s=1;         if(N == 1)              {                  return 1;              }                   else              s=jiecheng(N-1)*N  ;          return s;                 }}

 

3、回文数程序:

import java.util.Scanner;@SuppressWarnings("unused")public class HuiWen {    int n=100;    public static void main(String[] args)     {        System.out.print("请输入字符串:");        @SuppressWarnings("resource")        Scanner sc=new Scanner(System.in);        String N=sc.nextLine();        if(fun(N)==1)             System.out.print("是回文字符串!");        else              System.out.print("不是回文字符串!");    }            public static  int fun(  String str)    {          int len=str.length();                  {              if (len == 0 || len == 1)                  return    1;              char first=str.charAt(0);            char last=str.charAt(len-1);            if ( first!= last)                  return    0;              return fun(str.substring(1,len-1));          }      }}

4、线性同余法生成随机数

import java.util.Date;  import java.util.concurrent.atomic.AtomicLong;    public class Random {            private final AtomicLong seed;      private final static long multiplier = 0x5DEECE66DL;      private final static long addend = 0xBL;      private final static long mask = (1L << 48) - 1;      private static volatile long seedUniquifier = 8682522807148012L;            public void srandSeed(long t){          this.seed.set(t);      }            public Random(){           this(++seedUniquifier + System.nanoTime());           System.out.println(seed.get());      }            public Random(long seed) {          this.seed = new AtomicLong(0L);          srandSeed(seed);      }            int random(int bits){          long oldseed = seed.get();          long nextseed = (oldseed * multiplier + addend) & mask;          return (int)(nextseed >>> (48 - bits));      }            public static void main(String[] args) {          Random r = new Random();          r.srandSeed(new Date().getTime());          System.out.println(r.random(32));      }  }  

5、汉诺塔程序

import java.util.Scanner;public class TowersOfHanoi {        public static void solveTowers( int disks, int sourcePeg, 		      int destinationPeg, int tempPeg )		   {		      		      if ( disks == 1 )		      {		         System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );		         return;		      } 		     		      		      solveTowers( disks - 1, sourcePeg, tempPeg, destinationPeg );		      		      System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );		     		      solveTowers( disks - 1, tempPeg, destinationPeg, sourcePeg );		   } 		   public static void main( String[] args )		   {			   System.out.print("请输入要移动的盘子数:");				@SuppressWarnings("resource")				Scanner sc=new Scanner(System.in);				@SuppressWarnings("unused")				int  N=sc.nextInt();		     	solveTowers( N, 1, 2, 3 );		     			   } 		}

  

java动手动脑2