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 );

		   } 

}

  

时间: 2024-08-07 18:32:22

java动手动脑2的相关文章

java动手动脑08

一.动手动脑 1)源代码: public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printValue

java 动手动脑7

---恢复内容开始--- 一.动手动脑:多层的异常捕获-1 阅读以下代码(CatchWho.java),写出程序运行结果: ArrayIndexOutOfBoundsException/内层try-catch 发生ArithmeticException 1.源码: public class CatchWho { public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException

java动手动脑异常处理

实验任务一:多层的异常捕获-1 1.实验内容:阅读(CatchWho.java),写出程序运行结果: public class CatchWho{ public static void main(String[] args) { try { try { throw new ArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(  "ArrayIndexOut

Java动手动脑07

(1)现在有三个类: class Mammal{} class Dog extends Mammal {} class Cat extends Mammal{} 针对每个类定义三个变量并进行初始化 Mammal m=null ; Dog d=new Dog(); Cat c=new Cat(); 下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 编译错误 d=m;d=c; 不正确 子类对象可以直接赋给基类

java动手动脑和课后实验型问题String类型

1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请新开辟一个地址空间,存储的地址空间不一样(对象不同),string类型下hello是同一个对象,其内容和地址都相容. 2. public class StringEquals { /** * @param args the command line arguments */ public stati

java动手动脑——异常处理

Java07异常处理动手动脑 异常处理的基本知识 Java异常处理通过5个关键字try.catch.throw.throws.finally进行管理.基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理:还有以部分系统生成的异常在Java运行时自动抛出.你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象.finally语句块会在方法执行return之前执行,

Java动手动脑第四讲课堂作业

动手动脑1 完全"手写代码实现"随机数生成 纯随机数发生器 Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复. 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int LEFT = 40; private static fi

java动手动脑和课后实验型问题第四讲

1.完全"手写代码实现"随机数生成 动手动脑: 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复. 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int

java动手动脑

public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t); // //是原始数据类型吗? System.out.println(s.getClass().isPrimitive()); //从字符串中转换 Size u=Size.valueOf("SMALL");

java动手动脑多态

实验任务一:阅读并运行一下代码 public class ParentChildTest { public static void main(String[] args) { Parent parent=new Parent(); parent.printValue(); Child child=new Child(); child.printValue(); parent=child; parent.printValue(); parent.myValue++; parent.printVal